@cadenza.io/service 2.18.1 → 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.mjs CHANGED
@@ -2,8 +2,46 @@
2
2
  import Cadenza from "@cadenza.io/core";
3
3
 
4
4
  // src/graph/definition/DeputyTask.ts
5
- import { v4 as uuid } from "uuid";
5
+ import { v4 as uuid2 } from "uuid";
6
6
  import { Task } from "@cadenza.io/core";
7
+
8
+ // src/utils/delegation.ts
9
+ import { v4 as uuid } from "uuid";
10
+ var ROOT_METADATA_PASSTHROUGH_KEYS = [
11
+ "__executionTraceId",
12
+ "__inquiryId",
13
+ "__inquirySourceTaskName",
14
+ "__inquirySourceTaskVersion",
15
+ "__inquirySourceTaskExecutionId",
16
+ "__inquirySourceRoutineExecutionId"
17
+ ];
18
+ function hoistDelegationMetadataFields(input, metadataInput) {
19
+ const context = input && typeof input === "object" ? { ...input } : {};
20
+ const mutableContext = context;
21
+ const metadata = metadataInput && typeof metadataInput === "object" ? metadataInput : context.__metadata && typeof context.__metadata === "object" ? context.__metadata : {};
22
+ for (const key of ROOT_METADATA_PASSTHROUGH_KEYS) {
23
+ if ((mutableContext[key] === void 0 || mutableContext[key] === null) && metadata[key] !== void 0 && metadata[key] !== null) {
24
+ mutableContext[key] = metadata[key];
25
+ }
26
+ }
27
+ return context;
28
+ }
29
+ function ensureDelegationContextMetadata(input) {
30
+ const rawContext = input && typeof input === "object" ? { ...input } : {};
31
+ const metadata = rawContext.__metadata && typeof rawContext.__metadata === "object" ? { ...rawContext.__metadata } : {};
32
+ const context = hoistDelegationMetadataFields(rawContext, metadata);
33
+ const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof rawContext.__deputyExecId === "string" && rawContext.__deputyExecId.length > 0 ? context.__deputyExecId : uuid();
34
+ return {
35
+ ...context,
36
+ __deputyExecId: deputyExecId,
37
+ __metadata: {
38
+ ...metadata,
39
+ __deputyExecId: deputyExecId
40
+ }
41
+ };
42
+ }
43
+
44
+ // src/graph/definition/DeputyTask.ts
7
45
  var DeputyTask = class extends Task {
8
46
  /**
9
47
  * Constructs a new instance of the class with the specified parameters.
@@ -41,7 +79,7 @@ var DeputyTask = class extends Task {
41
79
  resolve(context);
42
80
  return;
43
81
  }
44
- const processId = uuid();
82
+ const processId = uuid2();
45
83
  context.__metadata.__deputyExecId = processId;
46
84
  emit("meta.deputy.delegation_requested", {
47
85
  ...context
@@ -129,7 +167,7 @@ var DeputyTask = class extends Task {
129
167
  execute(context, emit, inquire, progressCallback, nodeData) {
130
168
  const ctx = context.getContext();
131
169
  const metadata = context.getMetadata();
132
- const deputyContext = {
170
+ const deputyContext = hoistDelegationMetadataFields({
133
171
  __timeout: this.timeout,
134
172
  __localTaskName: this.name,
135
173
  __localTaskVersion: this.version,
@@ -146,7 +184,7 @@ var DeputyTask = class extends Task {
146
184
  __deputyTaskName: this.name
147
185
  },
148
186
  ...ctx
149
- };
187
+ });
150
188
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
151
189
  }
152
190
  };
@@ -227,7 +265,7 @@ var DatabaseTask = class extends DeputyTask {
227
265
  },
228
266
  ...dynamicQueryData
229
267
  };
230
- const deputyContext = {
268
+ const deputyContext = hoistDelegationMetadataFields({
231
269
  ...ctx,
232
270
  __localTaskName: this.name,
233
271
  __localTaskVersion: this.version,
@@ -250,7 +288,7 @@ var DatabaseTask = class extends DeputyTask {
250
288
  filter: nextQueryData.filter ?? ctx.filter,
251
289
  fields: nextQueryData.fields ?? ctx.fields,
252
290
  queryData: nextQueryData
253
- };
291
+ });
254
292
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
255
293
  }
256
294
  };
@@ -501,22 +539,6 @@ function getRouteableTransport(instance, role, protocol) {
501
539
  return selectTransportForRole(instance.transports ?? [], role, protocol);
502
540
  }
503
541
 
504
- // src/utils/delegation.ts
505
- import { v4 as uuid2 } from "uuid";
506
- function ensureDelegationContextMetadata(input) {
507
- const context = input && typeof input === "object" ? { ...input } : {};
508
- const metadata = context.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
509
- const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof context.__deputyExecId === "string" && context.__deputyExecId.length > 0 ? context.__deputyExecId : uuid2();
510
- return {
511
- ...context,
512
- __deputyExecId: deputyExecId,
513
- __metadata: {
514
- ...metadata,
515
- __deputyExecId: deputyExecId
516
- }
517
- };
518
- }
519
-
520
542
  // src/utils/readiness.ts
521
543
  function evaluateDependencyReadiness(input) {
522
544
  const missedHeartbeats = Math.max(
@@ -686,6 +708,21 @@ var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data
686
708
  var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
687
709
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
688
710
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
711
+ var EARLY_FULL_SYNC_DELAYS_MS = [
712
+ 100,
713
+ 1500,
714
+ 5e3,
715
+ 12e3,
716
+ 25e3,
717
+ 45e3,
718
+ 7e4
719
+ ];
720
+ var BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS = [
721
+ "Query service_instance",
722
+ "Query service_instance_transport",
723
+ "Query signal_to_task_map",
724
+ "Query intent_to_task_map"
725
+ ];
689
726
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
690
727
  "Track local routine start",
691
728
  "Track local routine end",
@@ -698,6 +735,10 @@ var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
698
735
  "Collect distributed readiness",
699
736
  "Get status"
700
737
  ]);
738
+ var SERVICE_REGISTRY_TRACE_SERVICE = (process.env.CADENZA_SERVICE_REGISTRY_TRACE_SERVICE ?? "").trim();
739
+ function shouldTraceServiceRegistry(serviceName) {
740
+ return SERVICE_REGISTRY_TRACE_SERVICE.length > 0 && serviceName === SERVICE_REGISTRY_TRACE_SERVICE;
741
+ }
701
742
  function buildServiceRegistryInsertQueryData(ctx, queryData) {
702
743
  const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];
703
744
  const getJoinedValue = (key) => {
@@ -771,6 +812,45 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
771
812
  }
772
813
  return result;
773
814
  }
815
+ function resolveServiceInstanceRegistrationPayload(ctx, fallbackServiceName, fallbackServiceInstanceId) {
816
+ const candidateSources = [
817
+ ctx.__registrationData,
818
+ ctx.queryData?.data,
819
+ ctx.__resolverQueryData?.data,
820
+ ctx.__resolverOriginalContext?.__registrationData,
821
+ ctx.__resolverOriginalContext?.queryData?.data,
822
+ ctx.data,
823
+ ctx.__resolverOriginalContext?.data
824
+ ];
825
+ let resolvedData = null;
826
+ for (const candidate of candidateSources) {
827
+ if (candidate && typeof candidate === "object" && !Array.isArray(candidate)) {
828
+ resolvedData = {
829
+ ...candidate
830
+ };
831
+ break;
832
+ }
833
+ }
834
+ if (!resolvedData) {
835
+ return null;
836
+ }
837
+ const resolvedUuid = String(
838
+ resolvedData.uuid ?? ctx.__serviceInstanceId ?? ctx.__resolverOriginalContext?.__serviceInstanceId ?? fallbackServiceInstanceId ?? ""
839
+ ).trim();
840
+ const resolvedServiceName = String(
841
+ resolvedData.service_name ?? ctx.__serviceName ?? ctx.__resolverOriginalContext?.__serviceName ?? fallbackServiceName ?? ""
842
+ ).trim();
843
+ 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;
844
+ if (!resolvedUuid || !resolvedServiceName || resolvedProcessPid === null) {
845
+ return null;
846
+ }
847
+ return {
848
+ ...resolvedData,
849
+ uuid: resolvedUuid,
850
+ service_name: resolvedServiceName,
851
+ process_pid: resolvedProcessPid
852
+ };
853
+ }
774
854
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
775
855
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
776
856
  tableName,
@@ -795,13 +875,24 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
795
875
  });
796
876
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
797
877
  delegationContext.__metadata.__blockRemoteExecution = delegationContext.__metadata.__blockRemoteExecution ?? delegationContext.__blockRemoteExecution ?? false;
798
- return {
878
+ const nextContext = {
799
879
  ...delegationContext,
800
880
  __resolverOriginalContext: {
801
881
  ...ctx
802
882
  },
803
883
  __resolverQueryData: nextQueryData
804
884
  };
885
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
886
+ console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_registry_insert_execution", {
887
+ tableName,
888
+ signalName,
889
+ resolverRequestId: ctx.__resolverRequestId ?? null,
890
+ hasData: nextQueryData.data !== void 0,
891
+ queryDataKeys: Object.keys(nextQueryData),
892
+ dataKeys: nextQueryData.data && typeof nextQueryData.data === "object" ? Object.keys(nextQueryData.data) : []
893
+ });
894
+ }
895
+ return nextContext;
805
896
  },
806
897
  `Prepares ${tableName} service-registry insert payloads for runner execution.`,
807
898
  {
@@ -827,6 +918,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
827
918
  ctx.__resolverQueryData ?? ctx.queryData ?? {},
828
919
  ctx
829
920
  );
921
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
922
+ console.log("[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert", {
923
+ tableName,
924
+ hasNormalized: !!normalized,
925
+ normalizedKeys: normalized && typeof normalized === "object" ? Object.keys(normalized) : [],
926
+ uuid: normalized && typeof normalized === "object" ? normalized.uuid ?? normalized.data?.uuid ?? normalized.queryData?.data?.uuid ?? null : null,
927
+ serviceName: normalized && typeof normalized === "object" ? normalized.__serviceName ?? normalized.data?.service_name ?? normalized.queryData?.data?.service_name ?? null : null,
928
+ errored: normalized && typeof normalized === "object" ? normalized.errored === true : false,
929
+ error: normalized && typeof normalized === "object" ? normalized.__error ?? null : null,
930
+ inquiryMeta: normalized && typeof normalized === "object" ? normalized.__inquiryMeta ?? null : null
931
+ });
932
+ }
830
933
  if (!normalized || typeof normalized !== "object") {
831
934
  return normalized;
832
935
  }
@@ -852,6 +955,16 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
852
955
  CadenzaService.createEphemeralMetaTask(
853
956
  `Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,
854
957
  (resultCtx) => {
958
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
959
+ console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert_signal", {
960
+ tableName,
961
+ resolverRequestId,
962
+ incomingResolverRequestId: resultCtx.__resolverRequestId ?? null,
963
+ errored: resultCtx.errored === true,
964
+ error: resultCtx.__error ?? null,
965
+ keys: resultCtx && typeof resultCtx === "object" ? Object.keys(resultCtx) : []
966
+ });
967
+ }
855
968
  if (resultCtx.__resolverRequestId !== resolverRequestId) {
856
969
  return false;
857
970
  }
@@ -871,6 +984,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
871
984
  ).doOn(executionResolvedSignal, executionFailedSignal);
872
985
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
873
986
  const executionSignal = localInsertTask ? localExecutionRequestedSignal : remoteExecutionRequestedSignal;
987
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
988
+ console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert", {
989
+ tableName,
990
+ executionSignal,
991
+ hasLocalInsertTask: !!localInsertTask,
992
+ serviceName: ctx.__serviceName ?? ctx.data?.service_name ?? null,
993
+ serviceInstanceId: ctx.__serviceInstanceId ?? ctx.data?.uuid ?? null,
994
+ hasData: !!ctx.data,
995
+ dataKeys: ctx.data && typeof ctx.data === "object" ? Object.keys(ctx.data) : [],
996
+ registrationKeys: ctx.__registrationData && typeof ctx.__registrationData === "object" ? Object.keys(ctx.__registrationData) : []
997
+ });
998
+ }
874
999
  if (localInsertTask && !wiredLocalTaskNames.has(localInsertTask.name)) {
875
1000
  wireExecutionTarget(localInsertTask, prepareLocalExecutionTask);
876
1001
  wiredLocalTaskNames.add(localInsertTask.name);
@@ -953,6 +1078,7 @@ var ServiceRegistry = class _ServiceRegistry {
953
1078
  this.useSocket = false;
954
1079
  this.retryCount = 3;
955
1080
  this.isFrontend = false;
1081
+ this.connectsToCadenzaDB = false;
956
1082
  CadenzaService.defineIntent({
957
1083
  name: META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,
958
1084
  description: "Gather transport diagnostics across all services and communication clients.",
@@ -1311,6 +1437,9 @@ var ServiceRegistry = class _ServiceRegistry {
1311
1437
  )?.destroy();
1312
1438
  continue;
1313
1439
  }
1440
+ if (map.serviceName === this.serviceName) {
1441
+ continue;
1442
+ }
1314
1443
  if (locallyEmittedSignals.includes(map.signalName)) {
1315
1444
  if (!this.remoteSignals.get(map.serviceName)) {
1316
1445
  this.remoteSignals.set(map.serviceName, /* @__PURE__ */ new Set());
@@ -1327,7 +1456,10 @@ var ServiceRegistry = class _ServiceRegistry {
1327
1456
  return true;
1328
1457
  },
1329
1458
  "Handles registration of remote signals"
1330
- ).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
1459
+ ).emits("meta.service_registry.registered_global_signals").doOn(
1460
+ "global.meta.cadenza_db.gathered_sync_data",
1461
+ "global.meta.graph_metadata.task_signal_observed"
1462
+ );
1331
1463
  this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
1332
1464
  "Reconcile gathered sync signal transmissions",
1333
1465
  (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
@@ -1341,6 +1473,13 @@ var ServiceRegistry = class _ServiceRegistry {
1341
1473
  "Handle global intent registration",
1342
1474
  (ctx, emit) => {
1343
1475
  const intentToTaskMaps = this.normalizeIntentMaps(ctx);
1476
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1477
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] handle_global_intents", {
1478
+ localServiceName: this.serviceName,
1479
+ intentCount: intentToTaskMaps.length,
1480
+ sample: intentToTaskMaps.slice(0, 5)
1481
+ });
1482
+ }
1344
1483
  const sorted = intentToTaskMaps.sort((a, b) => {
1345
1484
  if (a.deleted && !b.deleted) return -1;
1346
1485
  if (!a.deleted && b.deleted) return 1;
@@ -1352,6 +1491,9 @@ var ServiceRegistry = class _ServiceRegistry {
1352
1491
  this.unregisterRemoteIntentDeputy(map);
1353
1492
  continue;
1354
1493
  }
1494
+ if (map.serviceName === this.serviceName) {
1495
+ continue;
1496
+ }
1355
1497
  CadenzaService.inquiryBroker.addIntent({
1356
1498
  name: map.intentName
1357
1499
  });
@@ -1481,7 +1623,7 @@ var ServiceRegistry = class _ServiceRegistry {
1481
1623
  );
1482
1624
  this.handleSocketStatusUpdateTask = CadenzaService.createMetaTask(
1483
1625
  "Handle Socket Status Update",
1484
- (ctx) => {
1626
+ (ctx, emit) => {
1485
1627
  const report = this.normalizeRuntimeStatusReport(ctx);
1486
1628
  if (!report) {
1487
1629
  return false;
@@ -1524,6 +1666,13 @@ var ServiceRegistry = class _ServiceRegistry {
1524
1666
  if (!applied) {
1525
1667
  return false;
1526
1668
  }
1669
+ const updatedInstance = this.getInstance(
1670
+ report.serviceName,
1671
+ report.serviceInstanceId
1672
+ );
1673
+ if (updatedInstance && !updatedInstance.isFrontend && (this.deputies.has(report.serviceName) || this.remoteIntents.has(report.serviceName) || this.remoteSignals.has(report.serviceName))) {
1674
+ this.ensureDependeeClientForInstance(updatedInstance, emit, ctx);
1675
+ }
1527
1676
  this.registerDependee(report.serviceName, report.serviceInstanceId);
1528
1677
  this.lastHeartbeatAtByInstance.set(report.serviceInstanceId, Date.now());
1529
1678
  this.missedHeartbeatsByInstance.set(report.serviceInstanceId, 0);
@@ -1534,9 +1683,28 @@ var ServiceRegistry = class _ServiceRegistry {
1534
1683
  },
1535
1684
  "Handles status update from socket broadcast"
1536
1685
  ).doOn("meta.socket_client.status_received");
1686
+ CadenzaService.createMetaTask(
1687
+ "Request full sync after CadenzaDB fetch handshake",
1688
+ (ctx) => {
1689
+ const serviceName = typeof ctx.serviceName === "string" ? ctx.serviceName.trim() : typeof ctx.__serviceName === "string" ? ctx.__serviceName.trim() : "";
1690
+ if (serviceName !== "CadenzaDB") {
1691
+ return false;
1692
+ }
1693
+ return this.scheduleEarlyFullSyncRequests("cadenza_db_fetch_handshake");
1694
+ },
1695
+ "Schedules a few early service-registry full-sync retries after the authority fetch transport comes up."
1696
+ ).doOn("meta.fetch.handshake_complete");
1537
1697
  this.fullSyncTask = CadenzaService.createMetaTask(
1538
1698
  "Full sync",
1539
1699
  async (ctx) => {
1700
+ if (this.connectsToCadenzaDB && this.serviceName !== "CadenzaDB" && !this.hasBootstrapFullSyncDeputies()) {
1701
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1702
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_skipped_missing_bootstrap_deputies", {
1703
+ localServiceName: this.serviceName
1704
+ });
1705
+ }
1706
+ return false;
1707
+ }
1540
1708
  const inquiryResult = await CadenzaService.inquire(
1541
1709
  META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
1542
1710
  {
@@ -1553,6 +1721,15 @@ var ServiceRegistry = class _ServiceRegistry {
1553
1721
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1554
1722
  inquiryResult
1555
1723
  );
1724
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1725
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_result", {
1726
+ localServiceName: this.serviceName,
1727
+ inquiryMeta: inquiryResult.__inquiryMeta,
1728
+ signalToTaskMaps: signalToTaskMaps.length,
1729
+ intentToTaskMaps: intentToTaskMaps.length,
1730
+ serviceInstances: serviceInstances.length
1731
+ });
1732
+ }
1556
1733
  return {
1557
1734
  ...ctx,
1558
1735
  signalToTaskMaps,
@@ -1593,8 +1770,11 @@ var ServiceRegistry = class _ServiceRegistry {
1593
1770
  );
1594
1771
  this.handleDeputyRegistrationTask = CadenzaService.createMetaTask(
1595
1772
  "Handle Deputy Registration",
1596
- (ctx) => {
1773
+ (ctx, emit) => {
1597
1774
  const { serviceName } = ctx;
1775
+ if (!serviceName || serviceName === this.serviceName) {
1776
+ return false;
1777
+ }
1598
1778
  if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);
1599
1779
  this.deputies.get(serviceName).push({
1600
1780
  serviceName,
@@ -1603,6 +1783,7 @@ var ServiceRegistry = class _ServiceRegistry {
1603
1783
  localTaskName: ctx.localTaskName,
1604
1784
  communicationType: ctx.communicationType
1605
1785
  });
1786
+ this.ensureDependeeClientsForService(serviceName, emit, ctx);
1606
1787
  }
1607
1788
  ).doOn("meta.deputy.created");
1608
1789
  this.getAllInstances = CadenzaService.createMetaTask(
@@ -2155,9 +2336,29 @@ var ServiceRegistry = class _ServiceRegistry {
2155
2336
  retryDelayFactor: 1.3
2156
2337
  }
2157
2338
  ).emits("meta.service_registry.service_inserted").emitsOnFail("meta.service_registry.service_insertion_failed");
2158
- this.insertServiceInstanceTask = resolveServiceRegistryInsertTask(
2339
+ const insertServiceInstanceResolverTask = resolveServiceRegistryInsertTask(
2159
2340
  "service_instance",
2160
- {},
2341
+ {
2342
+ onConflict: {
2343
+ target: ["uuid"],
2344
+ action: {
2345
+ do: "update",
2346
+ set: {
2347
+ process_pid: "excluded",
2348
+ is_primary: "excluded",
2349
+ service_name: "excluded",
2350
+ is_database: "excluded",
2351
+ is_frontend: "excluded",
2352
+ is_blocked: "excluded",
2353
+ is_non_responsive: "excluded",
2354
+ is_active: "excluded",
2355
+ last_active: "excluded",
2356
+ health: "excluded",
2357
+ deleted: "false"
2358
+ }
2359
+ }
2360
+ }
2361
+ },
2161
2362
  {
2162
2363
  inputSchema: {
2163
2364
  type: "object",
@@ -2213,7 +2414,8 @@ var ServiceRegistry = class _ServiceRegistry {
2213
2414
  retryCount: 5,
2214
2415
  retryDelay: 1e3
2215
2416
  }
2216
- ).then(
2417
+ ).emitsOnFail("meta.service_registry.instance_insertion_failed");
2418
+ this.insertServiceInstanceTask = insertServiceInstanceResolverTask.then(
2217
2419
  CadenzaService.createMetaTask(
2218
2420
  "Setup service",
2219
2421
  (ctx) => {
@@ -2230,6 +2432,21 @@ var ServiceRegistry = class _ServiceRegistry {
2230
2432
  transports: ctx.__transportData ?? ctx.transportData ?? []
2231
2433
  });
2232
2434
  if (!normalizedLocalInstance?.uuid || !normalizedLocalInstance.serviceName) {
2435
+ if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
2436
+ console.log("[CADENZA_INSTANCE_DEBUG] setup_service_rejected_instance", {
2437
+ hasServiceInstance: !!serviceInstance,
2438
+ hasData: !!data,
2439
+ hasQueryDataData: !!queryData?.data,
2440
+ serviceInstanceKeys: serviceInstance && typeof serviceInstance === "object" ? Object.keys(serviceInstance) : [],
2441
+ dataKeys: data && typeof data === "object" ? Object.keys(data) : [],
2442
+ queryDataDataKeys: queryData?.data && typeof queryData.data === "object" ? Object.keys(queryData.data) : [],
2443
+ normalizedLocalInstance,
2444
+ transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
2445
+ errored: ctx.errored === true,
2446
+ error: ctx.__error ?? null,
2447
+ inquiryMeta: ctx.__inquiryMeta ?? null
2448
+ });
2449
+ }
2233
2450
  return false;
2234
2451
  }
2235
2452
  this.serviceInstanceId = normalizedLocalInstance.uuid;
@@ -2281,11 +2498,65 @@ var ServiceRegistry = class _ServiceRegistry {
2281
2498
  ).attachSignal("meta.service_registry.transport_registration_requested")
2282
2499
  )
2283
2500
  );
2501
+ CadenzaService.createMetaTask(
2502
+ "Retry local service instance registration after failed insert",
2503
+ (ctx) => {
2504
+ const registrationPayload = resolveServiceInstanceRegistrationPayload(
2505
+ ctx,
2506
+ this.serviceName,
2507
+ this.serviceInstanceId
2508
+ );
2509
+ if (!registrationPayload) {
2510
+ return false;
2511
+ }
2512
+ const serviceName = String(
2513
+ registrationPayload.service_name ?? this.serviceName ?? ""
2514
+ ).trim();
2515
+ if (!serviceName || serviceName !== this.serviceName) {
2516
+ return false;
2517
+ }
2518
+ CadenzaService.schedule(
2519
+ "meta.service_registry.instance_registration_requested",
2520
+ {
2521
+ ...ctx,
2522
+ data: registrationPayload,
2523
+ __registrationData: registrationPayload,
2524
+ __serviceName: serviceName,
2525
+ __serviceInstanceId: registrationPayload.uuid
2526
+ },
2527
+ 5e3
2528
+ );
2529
+ return true;
2530
+ },
2531
+ "Retries local service instance registration only after the previous insert attempt has failed.",
2532
+ {
2533
+ register: false,
2534
+ isHidden: true
2535
+ }
2536
+ ).doOn("meta.service_registry.instance_insertion_failed");
2284
2537
  CadenzaService.createMetaTask(
2285
2538
  "Prepare service instance registration",
2286
2539
  (ctx) => {
2540
+ const registrationPayload = resolveServiceInstanceRegistrationPayload(
2541
+ ctx,
2542
+ this.serviceName,
2543
+ this.serviceInstanceId
2544
+ );
2545
+ if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
2546
+ console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration", {
2547
+ serviceName: registrationPayload?.service_name ?? ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
2548
+ serviceInstanceId: registrationPayload?.uuid ?? ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
2549
+ hasData: !!registrationPayload,
2550
+ dataKeys: registrationPayload && typeof registrationPayload === "object" ? Object.keys(registrationPayload) : [],
2551
+ transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
2552
+ skipRemoteExecution: ctx.__skipRemoteExecution === true
2553
+ });
2554
+ }
2555
+ if (!registrationPayload) {
2556
+ return false;
2557
+ }
2287
2558
  const serviceName = String(
2288
- ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
2559
+ registrationPayload.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
2289
2560
  ).trim();
2290
2561
  if (serviceName === "CadenzaDB" && !CadenzaService.getLocalCadenzaDBInsertTask("service_instance")) {
2291
2562
  CadenzaService.schedule(
@@ -2295,7 +2566,16 @@ var ServiceRegistry = class _ServiceRegistry {
2295
2566
  );
2296
2567
  return false;
2297
2568
  }
2298
- return ctx;
2569
+ return {
2570
+ ...ctx,
2571
+ data: registrationPayload,
2572
+ __registrationData: {
2573
+ ...ctx.__registrationData ?? {},
2574
+ ...registrationPayload
2575
+ },
2576
+ __serviceName: serviceName,
2577
+ __serviceInstanceId: registrationPayload.uuid
2578
+ };
2299
2579
  },
2300
2580
  "Waits for the exact local CadenzaDB service instance insert task during self-bootstrap."
2301
2581
  ).doOn("meta.service_registry.instance_registration_requested").then(this.insertServiceInstanceTask);
@@ -2476,21 +2756,40 @@ var ServiceRegistry = class _ServiceRegistry {
2476
2756
  return [];
2477
2757
  }
2478
2758
  normalizeSignalMaps(ctx) {
2479
- return this.readArrayPayload(ctx, [
2759
+ const arrayPayload = this.readArrayPayload(ctx, [
2480
2760
  "signalToTaskMaps",
2481
2761
  "signal_to_task_maps",
2482
2762
  "signalToTaskMap",
2483
2763
  "signal_to_task_map"
2484
- ]).map((map) => ({
2485
- signalName: String(
2486
- map.signalName ?? map.signal_name ?? ""
2487
- ).trim(),
2488
- serviceName: String(
2489
- map.serviceName ?? map.service_name ?? ""
2490
- ).trim(),
2491
- isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),
2492
- deleted: Boolean(map.deleted)
2493
- })).filter((map) => map.signalName && map.serviceName);
2764
+ ]);
2765
+ if (arrayPayload.length > 0) {
2766
+ return arrayPayload.map((map) => ({
2767
+ signalName: String(
2768
+ map.signalName ?? map.signal_name ?? ""
2769
+ ).trim(),
2770
+ serviceName: String(
2771
+ map.serviceName ?? map.service_name ?? ""
2772
+ ).trim(),
2773
+ isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),
2774
+ deleted: Boolean(map.deleted)
2775
+ })).filter((map) => map.signalName && map.serviceName);
2776
+ }
2777
+ const single = ctx.signalToTaskMap ?? ctx.signal_to_task_map ?? ctx.data ?? (ctx.signalName ?? ctx.signal_name ? ctx : void 0);
2778
+ if (!single || typeof single !== "object") {
2779
+ return [];
2780
+ }
2781
+ return [
2782
+ {
2783
+ signalName: String(
2784
+ single.signalName ?? single.signal_name ?? ""
2785
+ ).trim(),
2786
+ serviceName: String(
2787
+ single.serviceName ?? single.service_name ?? ""
2788
+ ).trim(),
2789
+ isGlobal: Boolean(single.isGlobal ?? single.is_global ?? false),
2790
+ deleted: Boolean(single.deleted)
2791
+ }
2792
+ ].filter((map) => map.signalName && map.serviceName);
2494
2793
  }
2495
2794
  normalizeIntentMaps(ctx) {
2496
2795
  const arrayPayload = this.readArrayPayload(ctx, [
@@ -2605,7 +2904,7 @@ var ServiceRegistry = class _ServiceRegistry {
2605
2904
  )?.destroy();
2606
2905
  this.gatheredSyncTransmissionServices.delete(serviceName);
2607
2906
  }
2608
- if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
2907
+ if (createdRecipients.length > 0) {
2609
2908
  emit("meta.cadenza_db.sync_tick", {
2610
2909
  __syncing: true,
2611
2910
  __reason: "gathered_sync_transmissions_reconciled"
@@ -2651,6 +2950,15 @@ var ServiceRegistry = class _ServiceRegistry {
2651
2950
  };
2652
2951
  this.remoteIntentDeputiesByKey.set(key, descriptor);
2653
2952
  this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);
2953
+ if (shouldTraceServiceRegistry(this.serviceName)) {
2954
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] register_remote_intent_deputy", {
2955
+ localServiceName: this.serviceName,
2956
+ intentName: map.intentName,
2957
+ remoteServiceName: map.serviceName,
2958
+ remoteTaskName: map.taskName,
2959
+ remoteTaskVersion: map.taskVersion
2960
+ });
2961
+ }
2654
2962
  }
2655
2963
  unregisterRemoteIntentDeputy(map) {
2656
2964
  const key = this.buildRemoteIntentDeputyKey(map);
@@ -2680,6 +2988,56 @@ var ServiceRegistry = class _ServiceRegistry {
2680
2988
  }
2681
2989
  }
2682
2990
  }
2991
+ registerBootstrapFullSyncDeputies(emit, ctx) {
2992
+ if (!this.serviceName || this.serviceName === "CadenzaDB") {
2993
+ return false;
2994
+ }
2995
+ CadenzaService.inquiryBroker.addIntent({
2996
+ name: META_SERVICE_REGISTRY_FULL_SYNC_INTENT
2997
+ });
2998
+ for (const taskName of BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS) {
2999
+ this.registerRemoteIntentDeputy({
3000
+ intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
3001
+ serviceName: "CadenzaDB",
3002
+ taskName,
3003
+ taskVersion: 1
3004
+ });
3005
+ }
3006
+ this.ensureDependeeClientsForService("CadenzaDB", emit, ctx);
3007
+ return true;
3008
+ }
3009
+ hasBootstrapFullSyncDeputies() {
3010
+ if (!this.serviceName || this.serviceName === "CadenzaDB") {
3011
+ return true;
3012
+ }
3013
+ return BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS.every(
3014
+ (taskName) => this.remoteIntentDeputiesByKey.has(
3015
+ this.buildRemoteIntentDeputyKey({
3016
+ intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
3017
+ serviceName: "CadenzaDB",
3018
+ taskName,
3019
+ taskVersion: 1
3020
+ })
3021
+ )
3022
+ );
3023
+ }
3024
+ scheduleEarlyFullSyncRequests(reason) {
3025
+ for (const delayMs of EARLY_FULL_SYNC_DELAYS_MS) {
3026
+ CadenzaService.schedule(
3027
+ "meta.sync_requested",
3028
+ {
3029
+ __syncing: false,
3030
+ __reason: reason
3031
+ },
3032
+ delayMs
3033
+ );
3034
+ }
3035
+ return true;
3036
+ }
3037
+ bootstrapFullSync(emit, ctx, reason = "local_instance_inserted") {
3038
+ this.registerBootstrapFullSyncDeputies(emit, ctx);
3039
+ return this.scheduleEarlyFullSyncRequests(reason);
3040
+ }
2683
3041
  getInquiryResponderDescriptor(task) {
2684
3042
  const remote = this.remoteIntentDeputiesByTask.get(task);
2685
3043
  if (remote) {
@@ -2708,6 +3066,9 @@ var ServiceRegistry = class _ServiceRegistry {
2708
3066
  }
2709
3067
  return this.getInstance(this.serviceName, this.serviceInstanceId);
2710
3068
  }
3069
+ hasLocalInstanceRegistered() {
3070
+ return Boolean(this.getLocalInstance());
3071
+ }
2711
3072
  summarizeTransportForDebug(transport) {
2712
3073
  if (!transport) {
2713
3074
  return void 0;
@@ -2856,7 +3217,7 @@ var ServiceRegistry = class _ServiceRegistry {
2856
3217
  return communicationTypes;
2857
3218
  }
2858
3219
  ensureDependeeClientForInstance(instance, emit, ctx) {
2859
- if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
3220
+ if (!instance || instance.uuid === this.serviceInstanceId || instance.serviceName === this.serviceName || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2860
3221
  return false;
2861
3222
  }
2862
3223
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
@@ -2884,6 +3245,9 @@ var ServiceRegistry = class _ServiceRegistry {
2884
3245
  return true;
2885
3246
  }
2886
3247
  ensureDependeeClientsForService(serviceName, emit, ctx) {
3248
+ if (!serviceName || serviceName === this.serviceName) {
3249
+ return;
3250
+ }
2887
3251
  for (const instance of this.instances.get(serviceName) ?? []) {
2888
3252
  this.ensureDependeeClientForInstance(instance, emit, ctx);
2889
3253
  }
@@ -3676,7 +4040,7 @@ var SignalTransmissionTask = class extends Task2 {
3676
4040
  execute(context, emit, inquire, progressCallback) {
3677
4041
  const ctx = context.getContext();
3678
4042
  const metadata = context.getMetadata();
3679
- const deputyContext = {
4043
+ const deputyContext = hoistDelegationMetadataFields({
3680
4044
  __localTaskName: this.name,
3681
4045
  __localServiceName: CadenzaService.serviceRegistry.serviceName,
3682
4046
  __serviceName: this.serviceName,
@@ -3689,7 +4053,7 @@ var SignalTransmissionTask = class extends Task2 {
3689
4053
  __signalName: this.signalName,
3690
4054
  __signalEmissionId: metadata.__signalEmission?.uuid,
3691
4055
  ...ctx
3692
- };
4056
+ });
3693
4057
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
3694
4058
  }
3695
4059
  };
@@ -3705,6 +4069,7 @@ import fs from "fs";
3705
4069
  import https from "https";
3706
4070
  import fetch from "node-fetch";
3707
4071
  import { v4 as uuid5 } from "uuid";
4072
+ var FETCH_HANDSHAKE_TIMEOUT_MS = 5e3;
3708
4073
  var RestController = class _RestController {
3709
4074
  /**
3710
4075
  * Constructor for initializing the REST server and related configurations.
@@ -3796,7 +4161,15 @@ var RestController = class _RestController {
3796
4161
  is_blocked: false,
3797
4162
  health: {}
3798
4163
  },
3799
- __transportData: []
4164
+ __transportData: Array.isArray(ctx.__declaredTransports) ? ctx.__declaredTransports.map((transport) => ({
4165
+ uuid: transport.uuid,
4166
+ service_instance_id: ctx.__serviceInstanceId,
4167
+ role: transport.role,
4168
+ origin: transport.origin,
4169
+ protocols: transport.protocols ?? ["rest", "socket"],
4170
+ ...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
4171
+ ...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
4172
+ })) : []
3800
4173
  });
3801
4174
  return;
3802
4175
  }
@@ -3879,8 +4252,11 @@ var RestController = class _RestController {
3879
4252
  const app = ctx.__app;
3880
4253
  app.post("/handshake", (req, res) => {
3881
4254
  try {
3882
- CadenzaService.log("New fetch connection.", req.body);
3883
- CadenzaService.emit("meta.rest.handshake", req.body);
4255
+ const handshakePayload = req.body && typeof req.body === "object" ? req.body : {};
4256
+ if (Object.keys(handshakePayload).length > 0) {
4257
+ CadenzaService.log("New fetch connection.", handshakePayload);
4258
+ }
4259
+ CadenzaService.emit("meta.rest.handshake", handshakePayload);
3884
4260
  res.send({
3885
4261
  __status: "success",
3886
4262
  __serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
@@ -4128,6 +4504,19 @@ var RestController = class _RestController {
4128
4504
  ...ctx.data
4129
4505
  };
4130
4506
  ctx.__transportData = transportData;
4507
+ if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
4508
+ console.log("[CADENZA_INSTANCE_DEBUG] configure_network_emit", {
4509
+ serviceName: ctx.__serviceName,
4510
+ serviceInstanceId: ctx.__serviceInstanceId,
4511
+ isDatabase: ctx.__isDatabase === true,
4512
+ transportCount: transportData.length,
4513
+ transports: transportData.map((transport) => ({
4514
+ role: transport.role,
4515
+ origin: transport.origin,
4516
+ protocols: transport.protocols
4517
+ }))
4518
+ });
4519
+ }
4131
4520
  delete ctx.__app;
4132
4521
  CadenzaService.emit(
4133
4522
  "meta.service_registry.instance_registration_requested",
@@ -4188,6 +4577,7 @@ var RestController = class _RestController {
4188
4577
  if (!serviceName || !URL2 || !fetchId) {
4189
4578
  return false;
4190
4579
  }
4580
+ const clientTaskSuffix = `${URL2} (${fetchId})`;
4191
4581
  const fetchDiagnostics = this.ensureFetchClientDiagnostics(
4192
4582
  fetchId,
4193
4583
  serviceName,
@@ -4195,12 +4585,12 @@ var RestController = class _RestController {
4195
4585
  );
4196
4586
  fetchDiagnostics.destroyed = false;
4197
4587
  fetchDiagnostics.updatedAt = Date.now();
4198
- if (CadenzaService.get(`Send Handshake to ${URL2}`)) {
4199
- console.error("Fetch client already exists", URL2);
4588
+ if (CadenzaService.get(`Send Handshake to ${clientTaskSuffix}`)) {
4589
+ console.error("Fetch client already exists", { URL: URL2, fetchId });
4200
4590
  return;
4201
4591
  }
4202
4592
  const handshakeTask = CadenzaService.createMetaTask(
4203
- `Send Handshake to ${URL2}`,
4593
+ `Send Handshake to ${clientTaskSuffix}`,
4204
4594
  async (ctx2, emit) => {
4205
4595
  try {
4206
4596
  const response = await this.fetchDataWithTimeout(
@@ -4212,7 +4602,7 @@ var RestController = class _RestController {
4212
4602
  method: "POST",
4213
4603
  body: JSON.stringify(ctx2.handshakeData)
4214
4604
  },
4215
- 1e3
4605
+ FETCH_HANDSHAKE_TIMEOUT_MS
4216
4606
  );
4217
4607
  if (response.__status !== "success") {
4218
4608
  const error = response.__error ?? `Failed to connect to service ${serviceName} ${ctx2.serviceInstanceId}`;
@@ -4263,13 +4653,19 @@ var RestController = class _RestController {
4263
4653
  return ctx2;
4264
4654
  },
4265
4655
  "Sends handshake request",
4266
- { retryCount: 5, retryDelay: 1e3, retryDelayFactor: 1.5 }
4656
+ {
4657
+ retryCount: 5,
4658
+ retryDelay: 1e3,
4659
+ retryDelayFactor: 1.5,
4660
+ register: false,
4661
+ isHidden: true
4662
+ }
4267
4663
  ).doOn(`meta.fetch.handshake_requested:${fetchId}`).emits("meta.fetch.handshake_complete").attachSignal(
4268
4664
  "meta.fetch.handshake_failed",
4269
4665
  "global.meta.fetch.service_communication_established"
4270
4666
  );
4271
4667
  const delegateTask = CadenzaService.createMetaTask(
4272
- `Delegate flow to REST server ${URL2}`,
4668
+ `Delegate flow to REST server ${clientTaskSuffix}`,
4273
4669
  async (ctx2, emit) => {
4274
4670
  if (ctx2.__remoteRoutineName === void 0) {
4275
4671
  return;
@@ -4317,13 +4713,17 @@ var RestController = class _RestController {
4317
4713
  }
4318
4714
  return resultContext;
4319
4715
  },
4320
- "Sends delegation request"
4716
+ "Sends delegation request",
4717
+ {
4718
+ register: false,
4719
+ isHidden: true
4720
+ }
4321
4721
  ).doOn(
4322
4722
  `meta.service_registry.selected_instance_for_fetch:${fetchId}`,
4323
4723
  `meta.service_registry.socket_failed:${fetchId}`
4324
4724
  ).emitsOnFail("meta.fetch.delegate_failed").attachSignal("meta.fetch.delegated");
4325
4725
  const transmitTask = CadenzaService.createMetaTask(
4326
- `Transmit signal to server ${URL2}`,
4726
+ `Transmit signal to server ${clientTaskSuffix}`,
4327
4727
  async (ctx2, emit) => {
4328
4728
  if (ctx2.__signalName === void 0) {
4329
4729
  return;
@@ -4369,14 +4769,18 @@ var RestController = class _RestController {
4369
4769
  }
4370
4770
  return response;
4371
4771
  },
4372
- "Sends signal request"
4772
+ "Sends signal request",
4773
+ {
4774
+ register: false,
4775
+ isHidden: true
4776
+ }
4373
4777
  ).doOn(
4374
4778
  `meta.service_registry.selected_instance_for_fetch:${fetchId}`,
4375
4779
  `meta.signal_controller.remote_signal_registered:${serviceName}`,
4376
4780
  "meta.signal_controller.wildcard_signal_registered"
4377
4781
  ).emitsOnFail("meta.fetch.signal_transmission_failed").attachSignal("meta.fetch.transmitted");
4378
4782
  const statusTask = CadenzaService.createMetaTask(
4379
- `Request status from ${URL2}`,
4783
+ `Request status from ${clientTaskSuffix}`,
4380
4784
  async (ctx2) => {
4381
4785
  fetchDiagnostics.statusChecks++;
4382
4786
  fetchDiagnostics.updatedAt = Date.now();
@@ -4411,18 +4815,30 @@ var RestController = class _RestController {
4411
4815
  }
4412
4816
  return status;
4413
4817
  },
4414
- "Requests status"
4818
+ "Requests status",
4819
+ {
4820
+ register: false,
4821
+ isHidden: true
4822
+ }
4415
4823
  ).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
4416
- CadenzaService.createEphemeralMetaTask("Destroy fetch client", () => {
4417
- fetchDiagnostics.connected = false;
4418
- fetchDiagnostics.destroyed = true;
4419
- fetchDiagnostics.updatedAt = Date.now();
4420
- CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
4421
- handshakeTask.destroy();
4422
- delegateTask.destroy();
4423
- transmitTask.destroy();
4424
- statusTask.destroy();
4425
- }).doOn(
4824
+ CadenzaService.createEphemeralMetaTask(
4825
+ `Destroy fetch client ${fetchId}`,
4826
+ () => {
4827
+ fetchDiagnostics.connected = false;
4828
+ fetchDiagnostics.destroyed = true;
4829
+ fetchDiagnostics.updatedAt = Date.now();
4830
+ CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
4831
+ handshakeTask.destroy();
4832
+ delegateTask.destroy();
4833
+ transmitTask.destroy();
4834
+ statusTask.destroy();
4835
+ },
4836
+ "",
4837
+ {
4838
+ register: false,
4839
+ isHidden: true
4840
+ }
4841
+ ).doOn(
4426
4842
  `meta.fetch.destroy_requested:${fetchId}`,
4427
4843
  `meta.socket_client.disconnected:${fetchId}`,
4428
4844
  `meta.fetch.handshake_failed:${fetchId}`
@@ -5841,7 +6257,11 @@ var SocketController = class _SocketController {
5841
6257
  }
5842
6258
  );
5843
6259
  },
5844
- "Handshakes with socket server"
6260
+ "Handshakes with socket server",
6261
+ {
6262
+ register: false,
6263
+ isHidden: true
6264
+ }
5845
6265
  ).doOn(`meta.socket_client.connected:${fetchId}`);
5846
6266
  runtimeHandle.delegateTask = CadenzaService.createMetaTask(
5847
6267
  `Delegate flow to Socket service ${url}`,
@@ -5919,7 +6339,11 @@ var SocketController = class _SocketController {
5919
6339
  }
5920
6340
  }
5921
6341
  },
5922
- `Delegate flow to service ${serviceName} with address ${url}`
6342
+ `Delegate flow to service ${serviceName} with address ${url}`,
6343
+ {
6344
+ register: false,
6345
+ isHidden: true
6346
+ }
5923
6347
  ).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal(
5924
6348
  "meta.socket_client.delegated",
5925
6349
  "meta.socket_shutdown_requested"
@@ -5943,7 +6367,11 @@ var SocketController = class _SocketController {
5943
6367
  }
5944
6368
  return response;
5945
6369
  },
5946
- `Transmits signal to service ${serviceName} with address ${url}`
6370
+ `Transmits signal to service ${serviceName} with address ${url}`,
6371
+ {
6372
+ register: false,
6373
+ isHidden: true
6374
+ }
5947
6375
  ).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal("meta.socket_client.transmitted");
5948
6376
  CadenzaService.createEphemeralMetaTask(
5949
6377
  `Shutdown SocketClient ${url}`,
@@ -5987,7 +6415,11 @@ var SocketController = class _SocketController {
5987
6415
  fetchId
5988
6416
  });
5989
6417
  },
5990
- "Shuts down the socket client"
6418
+ "Shuts down the socket client",
6419
+ {
6420
+ register: false,
6421
+ isHidden: true
6422
+ }
5991
6423
  ).doOn(
5992
6424
  `meta.socket_shutdown_requested:${fetchId}`,
5993
6425
  `meta.socket_client.disconnected:${fetchId}`,
@@ -6251,10 +6683,18 @@ function decomposeSignalName(signalName) {
6251
6683
 
6252
6684
  // src/signals/SignalController.ts
6253
6685
  function buildSignalDatabaseTriggerContext(data) {
6686
+ const onConflict = {
6687
+ target: ["name"],
6688
+ action: {
6689
+ do: "nothing"
6690
+ }
6691
+ };
6254
6692
  return {
6255
6693
  data: { ...data },
6694
+ onConflict,
6256
6695
  queryData: {
6257
- data: { ...data }
6696
+ data: { ...data },
6697
+ onConflict
6258
6698
  }
6259
6699
  };
6260
6700
  }
@@ -6281,16 +6721,28 @@ var SignalController = class _SignalController {
6281
6721
  CadenzaService.createMetaTask(
6282
6722
  "Handle Signal Registration",
6283
6723
  (ctx, emit) => {
6724
+ if (!CadenzaService.hasCompletedBootstrapSync()) {
6725
+ return false;
6726
+ }
6284
6727
  const { signalName } = ctx;
6728
+ const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
6729
+ signalName
6730
+ );
6731
+ if (signalObserver?.registered || signalObserver?.registrationRequested) {
6732
+ return false;
6733
+ }
6734
+ if (signalObserver) {
6735
+ signalObserver.registrationRequested = true;
6736
+ }
6285
6737
  const { isMeta, isGlobal, domain, action } = decomposeSignalName(signalName);
6286
6738
  emit(
6287
6739
  "global.meta.signal_controller.signal_added",
6288
6740
  buildSignalDatabaseTriggerContext({
6289
6741
  name: signalName,
6290
- isGlobal,
6742
+ is_global: isGlobal,
6291
6743
  domain,
6292
6744
  action,
6293
- isMeta
6745
+ is_meta: isMeta
6294
6746
  })
6295
6747
  );
6296
6748
  return ctx;
@@ -6299,12 +6751,35 @@ var SignalController = class _SignalController {
6299
6751
  ).doOn("meta.signal_broker.added").attachSignal("global.meta.signal_controller.signal_added");
6300
6752
  CadenzaService.createMetaTask(
6301
6753
  "Add data to signal emission",
6302
- (ctx) => {
6754
+ (ctx, emit) => {
6303
6755
  const signalEmission = ctx.__signalEmission;
6304
6756
  delete ctx.__signalEmission;
6305
6757
  if (!signalEmission) {
6306
6758
  return false;
6307
6759
  }
6760
+ if (typeof signalEmission.signalName === "string" && signalEmission.signalName.trim().length > 0 && !CadenzaService.signalBroker.signalObservers?.has(signalEmission.signalName)) {
6761
+ CadenzaService.signalBroker.addSignal(signalEmission.signalName);
6762
+ } else {
6763
+ const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
6764
+ signalEmission.signalName
6765
+ );
6766
+ if (signalObserver && signalObserver.registered !== true && signalObserver.registrationRequested !== true && CadenzaService.hasCompletedBootstrapSync()) {
6767
+ signalObserver.registrationRequested = true;
6768
+ const { isMeta, isGlobal, domain, action } = decomposeSignalName(
6769
+ signalEmission.signalName
6770
+ );
6771
+ emit(
6772
+ "global.meta.signal_controller.signal_added",
6773
+ buildSignalDatabaseTriggerContext({
6774
+ name: signalEmission.signalName,
6775
+ is_global: isGlobal,
6776
+ domain,
6777
+ action,
6778
+ is_meta: isMeta
6779
+ })
6780
+ );
6781
+ }
6782
+ }
6308
6783
  return {
6309
6784
  data: {
6310
6785
  uuid: signalEmission.uuid,
@@ -6659,10 +7134,10 @@ function registerActorSessionPersistenceTasks() {
6659
7134
  }
6660
7135
 
6661
7136
  // src/graph/controllers/GraphMetadataController.ts
6662
- function buildDatabaseTriggerContext(data, filter, extra = {}) {
7137
+ function buildDatabaseTriggerContext(data, filter, extra = {}, queryExtra = {}) {
6663
7138
  const nextData = data && typeof data === "object" ? { ...data } : void 0;
6664
7139
  const nextFilter = filter && typeof filter === "object" ? { ...filter } : void 0;
6665
- const queryData = {};
7140
+ const queryData = { ...queryExtra };
6666
7141
  if (nextData !== void 0) {
6667
7142
  queryData.data = nextData;
6668
7143
  }
@@ -6676,19 +7151,108 @@ function buildDatabaseTriggerContext(data, filter, extra = {}) {
6676
7151
  ...Object.keys(queryData).length > 0 ? { queryData } : {}
6677
7152
  };
6678
7153
  }
7154
+ function resolveTaskFromMetadataContext(ctx) {
7155
+ const taskName = String(
7156
+ ctx?.taskName ?? ctx?.data?.taskName ?? ctx?.data?.task_name ?? ctx?.filter?.taskName ?? ctx?.filter?.task_name ?? ""
7157
+ );
7158
+ return taskName ? CadenzaService.get(taskName) : void 0;
7159
+ }
7160
+ function resolveTaskByName(name) {
7161
+ const taskName = String(name ?? "");
7162
+ return taskName ? CadenzaService.get(taskName) : void 0;
7163
+ }
7164
+ function resolvePredecessorTaskFromMetadataContext(ctx) {
7165
+ return resolveTaskByName(
7166
+ ctx?.predecessorTaskName ?? ctx?.data?.predecessorTaskName ?? ctx?.data?.predecessor_task_name ?? ctx?.filter?.predecessorTaskName ?? ctx?.filter?.predecessor_task_name
7167
+ );
7168
+ }
7169
+ function shouldSkipDirectTaskMetadata(task) {
7170
+ return !task || !task.register || task.isHidden || task.isDeputy;
7171
+ }
7172
+ function shouldPersistBusinessTaskExecution(task) {
7173
+ return !!task && task.register && !task.isHidden && !task.isMeta && !task.isSubMeta && !task.isDeputy;
7174
+ }
7175
+ function shouldEmitDirectPrimitiveMetadata() {
7176
+ return CadenzaService.hasCompletedBootstrapSync();
7177
+ }
7178
+ function shouldPersistBusinessInquiry(ctx) {
7179
+ const inquiryName = String(
7180
+ ctx?.data?.name ?? ctx?.inquiry ?? ctx?.data?.metadata?.inquiryMeta?.inquiry ?? ""
7181
+ );
7182
+ if (!inquiryName) {
7183
+ return false;
7184
+ }
7185
+ return !isMetaIntentName(inquiryName) && ctx?.data?.isMeta !== true && ctx?.data?.is_meta !== true;
7186
+ }
7187
+ function shouldPersistRoutineExecution(ctx) {
7188
+ if (ctx?.data?.isMeta === true || ctx?.data?.is_meta === true) {
7189
+ return false;
7190
+ }
7191
+ const routineTask = resolveTaskByName(ctx?.data?.name);
7192
+ if (routineTask) {
7193
+ return shouldPersistBusinessTaskExecution(routineTask);
7194
+ }
7195
+ return true;
7196
+ }
7197
+ function shouldPersistTaskExecutionMetadata(ctx) {
7198
+ const task = resolveTaskFromMetadataContext(ctx);
7199
+ return shouldPersistBusinessTaskExecution(task);
7200
+ }
7201
+ function shouldPersistTaskExecutionMap(ctx) {
7202
+ return shouldPersistBusinessTaskExecution(resolveTaskFromMetadataContext(ctx)) && shouldPersistBusinessTaskExecution(resolvePredecessorTaskFromMetadataContext(ctx));
7203
+ }
7204
+ function hasInquiryLink(data) {
7205
+ const metaContext = data?.metaContext ?? data?.meta_context;
7206
+ const directInquiryId = metaContext?.__inquiryId ?? metaContext?.__metadata?.__inquiryId;
7207
+ return typeof directInquiryId === "string" && directInquiryId.length > 0;
7208
+ }
6679
7209
  var GraphMetadataController = class _GraphMetadataController {
6680
7210
  static get instance() {
6681
7211
  if (!this._instance) this._instance = new _GraphMetadataController();
6682
7212
  return this._instance;
6683
7213
  }
6684
7214
  constructor() {
6685
- CadenzaService.createMetaTask("Handle task creation", (ctx) => {
6686
- return buildDatabaseTriggerContext({
6687
- ...ctx.data,
6688
- serviceName: CadenzaService.serviceRegistry.serviceName
6689
- });
7215
+ const buildOnConflictDoNothing = (target) => ({
7216
+ target,
7217
+ action: {
7218
+ do: "nothing"
7219
+ }
7220
+ });
7221
+ CadenzaService.createMetaTask("Handle task creation", (ctx) => {
7222
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7223
+ return false;
7224
+ }
7225
+ const taskName = String(ctx.data?.name ?? ctx.data?.taskName ?? "");
7226
+ const task = taskName ? CadenzaService.get(taskName) : void 0;
7227
+ const onConflict = buildOnConflictDoNothing([
7228
+ "name",
7229
+ "service_name",
7230
+ "version"
7231
+ ]);
7232
+ if (shouldSkipDirectTaskMetadata(task) || task?.registered || task?.registrationRequested) {
7233
+ return false;
7234
+ }
7235
+ if (task) {
7236
+ task.registrationRequested = true;
7237
+ }
7238
+ return buildDatabaseTriggerContext(
7239
+ {
7240
+ ...ctx.data,
7241
+ serviceName: CadenzaService.serviceRegistry.serviceName
7242
+ },
7243
+ void 0,
7244
+ { onConflict },
7245
+ { onConflict }
7246
+ );
6690
7247
  }).doOn("meta.task.created").emits("global.meta.graph_metadata.task_created");
6691
7248
  CadenzaService.createMetaTask("Handle task update", (ctx) => {
7249
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7250
+ return false;
7251
+ }
7252
+ const task = resolveTaskFromMetadataContext(ctx);
7253
+ if (shouldSkipDirectTaskMetadata(task)) {
7254
+ return false;
7255
+ }
6692
7256
  return buildDatabaseTriggerContext(
6693
7257
  ctx.data ?? void 0,
6694
7258
  {
@@ -6698,11 +7262,14 @@ var GraphMetadataController = class _GraphMetadataController {
6698
7262
  );
6699
7263
  }).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
6700
7264
  CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
7265
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7266
+ return false;
7267
+ }
6701
7268
  const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
6702
7269
  const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
6703
7270
  const task = taskName ? CadenzaService.get(taskName) : void 0;
6704
7271
  const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
6705
- if (!task?.registered || !predecessorTask?.registered) {
7272
+ if (shouldSkipDirectTaskMetadata(task) || shouldSkipDirectTaskMetadata(predecessorTask) || !task?.registered || !predecessorTask?.registered) {
6706
7273
  return false;
6707
7274
  }
6708
7275
  return buildDatabaseTriggerContext({
@@ -6715,14 +7282,35 @@ var GraphMetadataController = class _GraphMetadataController {
6715
7282
  CadenzaService.log(`Error in task ${ctx.data.taskName}`, ctx.data, "error");
6716
7283
  }).doOn("meta.node.errored");
6717
7284
  CadenzaService.createMetaTask("Handle task signal observation", (ctx) => {
6718
- const isGlobal = ctx.signalName.startsWith("global.");
7285
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7286
+ return false;
7287
+ }
7288
+ const signalName = String(
7289
+ ctx.signalName ?? ctx.data?.signalName ?? ""
7290
+ ).split(":")[0];
7291
+ const task = resolveTaskFromMetadataContext(ctx);
7292
+ if (shouldSkipDirectTaskMetadata(task)) {
7293
+ return false;
7294
+ }
7295
+ if (task?.registered && task.registeredSignals.has(signalName)) {
7296
+ return false;
7297
+ }
7298
+ const isGlobal = signalName.startsWith("global.");
6719
7299
  return buildDatabaseTriggerContext({
6720
7300
  ...ctx.data,
7301
+ signalName,
6721
7302
  isGlobal,
6722
7303
  serviceName: CadenzaService.serviceRegistry.serviceName
6723
7304
  });
6724
7305
  }).doOn("meta.task.observed_signal").emits("global.meta.graph_metadata.task_signal_observed");
6725
7306
  CadenzaService.createMetaTask("Handle task signal attachment", (ctx) => {
7307
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7308
+ return false;
7309
+ }
7310
+ const task = resolveTaskFromMetadataContext(ctx);
7311
+ if (shouldSkipDirectTaskMetadata(task)) {
7312
+ return false;
7313
+ }
6726
7314
  return buildDatabaseTriggerContext(
6727
7315
  ctx.data ?? void 0,
6728
7316
  {
@@ -6731,7 +7319,34 @@ var GraphMetadataController = class _GraphMetadataController {
6731
7319
  }
6732
7320
  );
6733
7321
  }).doOn("meta.task.attached_signal").emits("global.meta.graph_metadata.task_attached_signal");
7322
+ CadenzaService.createMetaTask("Handle task intent association", (ctx) => {
7323
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7324
+ return false;
7325
+ }
7326
+ const intentName = String(ctx.data?.intentName ?? "");
7327
+ const task = resolveTaskFromMetadataContext(ctx);
7328
+ if (shouldSkipDirectTaskMetadata(task)) {
7329
+ return false;
7330
+ }
7331
+ if (task?.registered && task.__registeredIntents?.has(
7332
+ intentName
7333
+ )) {
7334
+ return false;
7335
+ }
7336
+ return buildDatabaseTriggerContext({
7337
+ ...ctx.data,
7338
+ intentName,
7339
+ serviceName: CadenzaService.serviceRegistry.serviceName
7340
+ });
7341
+ }).doOn("meta.task.intent_associated").emits("global.meta.graph_metadata.task_intent_associated");
6734
7342
  CadenzaService.createMetaTask("Handle task unsubscribing signal", (ctx) => {
7343
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7344
+ return false;
7345
+ }
7346
+ const task = resolveTaskFromMetadataContext(ctx);
7347
+ if (shouldSkipDirectTaskMetadata(task)) {
7348
+ return false;
7349
+ }
6735
7350
  return buildDatabaseTriggerContext(
6736
7351
  {
6737
7352
  deleted: true
@@ -6743,6 +7358,13 @@ var GraphMetadataController = class _GraphMetadataController {
6743
7358
  );
6744
7359
  }).doOn("meta.task.unsubscribed_signal").emits("meta.graph_metadata.task_unsubscribed_signal");
6745
7360
  CadenzaService.createMetaTask("Handle task detaching signal", (ctx) => {
7361
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7362
+ return false;
7363
+ }
7364
+ const task = resolveTaskFromMetadataContext(ctx);
7365
+ if (shouldSkipDirectTaskMetadata(task)) {
7366
+ return false;
7367
+ }
6746
7368
  return buildDatabaseTriggerContext(
6747
7369
  {
6748
7370
  deleted: true
@@ -6754,12 +7376,18 @@ var GraphMetadataController = class _GraphMetadataController {
6754
7376
  );
6755
7377
  }).doOn("meta.task.detached_signal").emits("global.meta.graph_metadata.task_detached_signal");
6756
7378
  CadenzaService.createMetaTask("Handle routine creation", (ctx) => {
7379
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7380
+ return false;
7381
+ }
6757
7382
  return buildDatabaseTriggerContext({
6758
7383
  ...ctx.data,
6759
7384
  serviceName: CadenzaService.serviceRegistry.serviceName
6760
7385
  });
6761
7386
  }).doAfter(CadenzaService.registry.registerRoutine).emits("global.meta.graph_metadata.routine_created");
6762
7387
  CadenzaService.createMetaTask("Handle routine update", (ctx) => {
7388
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7389
+ return false;
7390
+ }
6763
7391
  return buildDatabaseTriggerContext(
6764
7392
  ctx.data ?? void 0,
6765
7393
  {
@@ -6769,6 +7397,9 @@ var GraphMetadataController = class _GraphMetadataController {
6769
7397
  );
6770
7398
  }).doOn("meta.routine.destroyed").emits("global.meta.graph_metadata.routine_updated");
6771
7399
  CadenzaService.createMetaTask("Handle adding task to routine", (ctx) => {
7400
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7401
+ return false;
7402
+ }
6772
7403
  return buildDatabaseTriggerContext({
6773
7404
  ...ctx.data,
6774
7405
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -6784,8 +7415,12 @@ var GraphMetadataController = class _GraphMetadataController {
6784
7415
  CadenzaService.createMetaTask(
6785
7416
  "Handle routine execution creation",
6786
7417
  (ctx) => {
7418
+ if (!shouldPersistRoutineExecution(ctx)) {
7419
+ return false;
7420
+ }
6787
7421
  return buildDatabaseTriggerContext({
6788
7422
  ...ctx.data,
7423
+ previousRoutineExecution: hasInquiryLink(ctx.data) ? null : ctx.data?.previousRoutineExecution ?? ctx.data?.previous_routine_execution ?? null,
6789
7424
  serviceName: CadenzaService.serviceRegistry.serviceName,
6790
7425
  serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
6791
7426
  });
@@ -6822,6 +7457,9 @@ var GraphMetadataController = class _GraphMetadataController {
6822
7457
  CadenzaService.createMetaTask(
6823
7458
  "Handle task execution creation",
6824
7459
  (ctx) => {
7460
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7461
+ return false;
7462
+ }
6825
7463
  return buildDatabaseTriggerContext({
6826
7464
  ...ctx.data,
6827
7465
  serviceName: CadenzaService.serviceRegistry.serviceName,
@@ -6834,6 +7472,9 @@ var GraphMetadataController = class _GraphMetadataController {
6834
7472
  CadenzaService.createMetaTask(
6835
7473
  "Handle task execution mapped",
6836
7474
  (ctx) => {
7475
+ if (!shouldPersistTaskExecutionMap(ctx)) {
7476
+ return false;
7477
+ }
6837
7478
  return buildDatabaseTriggerContext(
6838
7479
  ctx.data ?? void 0,
6839
7480
  ctx.filter ?? void 0
@@ -6845,6 +7486,9 @@ var GraphMetadataController = class _GraphMetadataController {
6845
7486
  CadenzaService.createMetaTask(
6846
7487
  "Handle task execution started",
6847
7488
  (ctx) => {
7489
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7490
+ return false;
7491
+ }
6848
7492
  return buildDatabaseTriggerContext(
6849
7493
  ctx.data ?? void 0,
6850
7494
  ctx.filter ?? void 0
@@ -6856,6 +7500,9 @@ var GraphMetadataController = class _GraphMetadataController {
6856
7500
  CadenzaService.createMetaTask(
6857
7501
  "Handle task execution ended",
6858
7502
  (ctx) => {
7503
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7504
+ return false;
7505
+ }
6859
7506
  return buildDatabaseTriggerContext(
6860
7507
  {
6861
7508
  ...ctx.data,
@@ -6868,9 +7515,39 @@ var GraphMetadataController = class _GraphMetadataController {
6868
7515
  "Handles task execution ended",
6869
7516
  { concurrency: 100, isSubMeta: true }
6870
7517
  ).doOn("meta.node.ended").emits("global.meta.graph_metadata.task_execution_ended");
7518
+ CadenzaService.createMetaTask(
7519
+ "Handle inquiry creation",
7520
+ (ctx) => {
7521
+ if (!shouldPersistBusinessInquiry(ctx)) {
7522
+ return false;
7523
+ }
7524
+ return buildDatabaseTriggerContext({
7525
+ ...ctx.data,
7526
+ serviceName: CadenzaService.serviceRegistry.serviceName,
7527
+ serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
7528
+ isMeta: false
7529
+ });
7530
+ },
7531
+ "Handles inquiry creation",
7532
+ { concurrency: 100, isSubMeta: true }
7533
+ ).doOn("meta.inquiry_broker.inquiry_started").emits("global.meta.graph_metadata.inquiry_created");
7534
+ CadenzaService.createMetaTask(
7535
+ "Handle inquiry update",
7536
+ (ctx) => {
7537
+ return buildDatabaseTriggerContext(
7538
+ ctx.data ?? void 0,
7539
+ ctx.filter ?? void 0
7540
+ );
7541
+ },
7542
+ "Handles inquiry completion updates",
7543
+ { concurrency: 100, isSubMeta: true }
7544
+ ).doOn("meta.inquiry_broker.inquiry_completed").emits("global.meta.graph_metadata.inquiry_updated");
6871
7545
  CadenzaService.createMetaTask(
6872
7546
  "Handle task execution relationship creation",
6873
7547
  (ctx) => {
7548
+ if (!shouldPersistTaskExecutionMap(ctx)) {
7549
+ return false;
7550
+ }
6874
7551
  return buildDatabaseTriggerContext(
6875
7552
  {
6876
7553
  executionCount: "increment",
@@ -6886,12 +7563,18 @@ var GraphMetadataController = class _GraphMetadataController {
6886
7563
  { concurrency: 100, isSubMeta: true }
6887
7564
  ).doOn("meta.node.mapped", "meta.node.detected_previous_task_execution").emits("global.meta.graph_metadata.relationship_executed");
6888
7565
  CadenzaService.createMetaTask("Handle actor creation", (ctx) => {
7566
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7567
+ return false;
7568
+ }
6889
7569
  return buildDatabaseTriggerContext({
6890
7570
  ...ctx.data,
6891
7571
  service_name: CadenzaService.serviceRegistry.serviceName
6892
7572
  });
6893
7573
  }).doOn("meta.actor.created").emits("global.meta.graph_metadata.actor_created");
6894
7574
  CadenzaService.createMetaTask("Handle actor task association", (ctx) => {
7575
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7576
+ return false;
7577
+ }
6895
7578
  return buildDatabaseTriggerContext({
6896
7579
  ...ctx.data,
6897
7580
  service_name: CadenzaService.serviceRegistry.serviceName
@@ -6899,6 +7582,9 @@ var GraphMetadataController = class _GraphMetadataController {
6899
7582
  }).doOn("meta.actor.task_associated").emits("global.meta.graph_metadata.actor_task_associated");
6900
7583
  registerActorSessionPersistenceTasks();
6901
7584
  CadenzaService.createMetaTask("Handle Intent Creation", (ctx) => {
7585
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7586
+ return false;
7587
+ }
6902
7588
  const intentName = ctx.data?.name;
6903
7589
  return buildDatabaseTriggerContext({
6904
7590
  ...ctx.data,
@@ -6948,6 +7634,10 @@ var AUTHORITY_SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
6948
7634
  "Prepare for signal sync"
6949
7635
  ]);
6950
7636
  var AUTHORITY_SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
7637
+ var INTENT_MAP_DEBUG_ENABLED = process.env.CADENZA_INTENT_MAP_DEBUG === "1" || process.env.CADENZA_INTENT_MAP_DEBUG === "true";
7638
+ var POSTGRES_SETUP_DEBUG_ENABLED = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
7639
+ var GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY = 200;
7640
+ var GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS = 12e4;
6951
7641
  function logAuthoritySyncDebug(event, payload) {
6952
7642
  if (!AUTHORITY_SYNC_DEBUG_ENABLED) {
6953
7643
  return;
@@ -6987,6 +7677,18 @@ function shouldDebugAuthoritySyncPayload(tableName, payload) {
6987
7677
  }
6988
7678
  return false;
6989
7679
  }
7680
+ function logIntentMapSetupDebug(event, payload) {
7681
+ if (!INTENT_MAP_DEBUG_ENABLED) {
7682
+ return;
7683
+ }
7684
+ console.log("[CADENZA_INTENT_MAP_DEBUG]", event, payload);
7685
+ }
7686
+ function logPostgresSetupDebug(event, payload) {
7687
+ if (!POSTGRES_SETUP_DEBUG_ENABLED) {
7688
+ return;
7689
+ }
7690
+ console.log("[CADENZA_POSTGRES_SETUP_DEBUG]", event, payload);
7691
+ }
6990
7692
  function buildAuthoritySyncDebugSummary(payload, context) {
6991
7693
  const data = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : {};
6992
7694
  return {
@@ -7198,7 +7900,55 @@ function errorMessage(error) {
7198
7900
  }
7199
7901
  return String(error);
7200
7902
  }
7201
- function isTransientDatabaseError(error) {
7903
+ var EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS = /* @__PURE__ */ new Set([
7904
+ "routine_execution_execution_trace_id_fkey",
7905
+ "routine_execution_previous_routine_execution_fkey",
7906
+ "task_execution_routine_execution_id_fkey",
7907
+ "task_execution_execution_trace_id_fkey",
7908
+ "task_execution_signal_emission_id_fkey",
7909
+ "task_execution_inquiry_id_fkey",
7910
+ "task_execution_map_task_execution_id_fkey",
7911
+ "task_execution_map_previous_task_execution_id_fkey",
7912
+ "signal_emission_execution_trace_id_fkey",
7913
+ "signal_emission_routine_execution_id_fkey",
7914
+ "signal_emission_task_execution_id_fkey",
7915
+ "inquiry_execution_trace_id_fkey",
7916
+ "inquiry_routine_execution_id_fkey",
7917
+ "inquiry_task_execution_id_fkey"
7918
+ ]);
7919
+ function resolveOperationTableName(operationLabel) {
7920
+ if (!operationLabel) {
7921
+ return null;
7922
+ }
7923
+ const match = /^insert\s+([a-z0-9_]+)$/i.exec(operationLabel.trim());
7924
+ return match?.[1]?.toLowerCase() ?? null;
7925
+ }
7926
+ function isRetryableExecutionObservabilityForeignKeyError(error, operationLabel) {
7927
+ if (!error || typeof error !== "object") {
7928
+ return false;
7929
+ }
7930
+ const dbError = error;
7931
+ if (String(dbError.code ?? "") !== "23503") {
7932
+ return false;
7933
+ }
7934
+ const constraint = String(dbError.constraint ?? "").toLowerCase();
7935
+ if (constraint && EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS.has(constraint)) {
7936
+ return true;
7937
+ }
7938
+ const table = String(dbError.table ?? "").toLowerCase() || resolveOperationTableName(operationLabel) || "";
7939
+ if (![
7940
+ "routine_execution",
7941
+ "task_execution",
7942
+ "task_execution_map",
7943
+ "signal_emission",
7944
+ "inquiry"
7945
+ ].includes(table)) {
7946
+ return false;
7947
+ }
7948
+ const message = String(dbError.message ?? "").toLowerCase();
7949
+ 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"));
7950
+ }
7951
+ function isTransientDatabaseError(error, operationLabel) {
7202
7952
  if (!error || typeof error !== "object") {
7203
7953
  return false;
7204
7954
  }
@@ -7208,7 +7958,10 @@ function isTransientDatabaseError(error) {
7208
7958
  return true;
7209
7959
  }
7210
7960
  const message = String(dbError.message ?? "").toLowerCase();
7211
- return message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset");
7961
+ if (message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset")) {
7962
+ return true;
7963
+ }
7964
+ return isRetryableExecutionObservabilityForeignKeyError(error, operationLabel);
7212
7965
  }
7213
7966
  function isSqlIdentifier(value) {
7214
7967
  return /^[a-z_][a-z0-9_]*$/.test(value);
@@ -7242,6 +7995,37 @@ function resolveDataRows(data) {
7242
7995
  }
7243
7996
  return [ensurePlainObject(data, "data")];
7244
7997
  }
7998
+ var DB_OPERATION_CONTEXT_KEYS = [
7999
+ "data",
8000
+ "batch",
8001
+ "transaction",
8002
+ "onConflict",
8003
+ "filter",
8004
+ "fields",
8005
+ "joins",
8006
+ "sort",
8007
+ "limit",
8008
+ "offset",
8009
+ "queryMode",
8010
+ "aggregates",
8011
+ "groupBy"
8012
+ ];
8013
+ function mergeTriggerQueryData(context, triggerQueryData) {
8014
+ const existingQueryData = typeof context.queryData === "object" && context.queryData ? { ...context.queryData } : {};
8015
+ for (const key of DB_OPERATION_CONTEXT_KEYS) {
8016
+ if (!Object.prototype.hasOwnProperty.call(existingQueryData, key) && context[key] !== void 0) {
8017
+ existingQueryData[key] = context[key];
8018
+ }
8019
+ }
8020
+ return {
8021
+ ...existingQueryData,
8022
+ ...triggerQueryData
8023
+ };
8024
+ }
8025
+ function resolveOperationPayload(context) {
8026
+ const queryData = typeof context.queryData === "object" && context.queryData ? context.queryData : {};
8027
+ return mergeTriggerQueryData(context, queryData);
8028
+ }
7245
8029
  function buildAddConstraintIfMissingStatement(tableName, constraintName, constraintDefinition) {
7246
8030
  const escapedConstraintName = constraintName.replace(/'/g, "''");
7247
8031
  const escapedTableName = tableName.replace(/'/g, "''");
@@ -7379,9 +8163,19 @@ var DatabaseController = class _DatabaseController {
7379
8163
  };
7380
8164
  const runtimeState = registration.actor.getRuntimeState(registration.actorKey);
7381
8165
  if (runtimeState?.ready) {
8166
+ logPostgresSetupDebug("setup_already_ready", {
8167
+ actorName: registration.actorName,
8168
+ databaseName: registration.databaseName
8169
+ });
7382
8170
  this.emitSetupDone(registration, payload);
7383
8171
  return registration;
7384
8172
  }
8173
+ logPostgresSetupDebug("emit_setup_requested", {
8174
+ actorName: registration.actorName,
8175
+ databaseName: registration.databaseName,
8176
+ ownerServiceName: registration.ownerServiceName,
8177
+ payloadKeys: Object.keys(payload)
8178
+ });
7385
8179
  CadenzaService.emit(registration.setupSignal, payload);
7386
8180
  return registration;
7387
8181
  }
@@ -7433,6 +8227,11 @@ var DatabaseController = class _DatabaseController {
7433
8227
  `Setup ${registration.actorName}`,
7434
8228
  registration.actor.task(
7435
8229
  async ({ input, state, runtimeState, setState, setRuntimeState, emit }) => {
8230
+ logPostgresSetupDebug("setup_task_started", {
8231
+ actorName: registration.actorName,
8232
+ databaseName: registration.databaseName,
8233
+ inputKeys: Object.keys(input ?? {})
8234
+ });
7436
8235
  const requestedDatabaseName = String(
7437
8236
  input.options?.databaseName ?? input.databaseName ?? registration.databaseName
7438
8237
  );
@@ -7451,11 +8250,19 @@ var DatabaseController = class _DatabaseController {
7451
8250
  }
7452
8251
  try {
7453
8252
  await this.createDatabaseIfMissing(requestedDatabaseName);
8253
+ logPostgresSetupDebug("database_ready", {
8254
+ actorName: registration.actorName,
8255
+ databaseName: requestedDatabaseName
8256
+ });
7454
8257
  const pool = this.createTargetPool(
7455
8258
  requestedDatabaseName,
7456
8259
  state.safetyPolicy.statementTimeoutMs
7457
8260
  );
7458
8261
  await this.checkPoolHealth(pool, state.safetyPolicy);
8262
+ logPostgresSetupDebug("pool_healthy", {
8263
+ actorName: registration.actorName,
8264
+ databaseName: requestedDatabaseName
8265
+ });
7459
8266
  this.validateSchema({
7460
8267
  schema: registration.schema,
7461
8268
  options: registration.options
@@ -7471,6 +8278,18 @@ var DatabaseController = class _DatabaseController {
7471
8278
  if (!registration.tasksGenerated) {
7472
8279
  this.generateDatabaseTasks(registration);
7473
8280
  registration.tasksGenerated = true;
8281
+ const localTasks = Array.from(CadenzaService.registry.tasks.values());
8282
+ logIntentMapSetupDebug("generated_database_tasks", {
8283
+ actorName: registration.actorName,
8284
+ ownerServiceName: registration.ownerServiceName,
8285
+ totalLocalTasks: localTasks.length,
8286
+ generatedTaskNames: localTasks.map((task) => task.name).filter(
8287
+ (taskName) => /(Query|Insert|Update|Delete|COUNT|EXISTS|ONE|AGGREGATE|UPSERT) /.test(
8288
+ taskName
8289
+ )
8290
+ ).slice(0, 24)
8291
+ });
8292
+ CadenzaService.schedule("meta.sync_requested", { __syncing: true }, 250);
7474
8293
  }
7475
8294
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
7476
8295
  setRuntimeState({
@@ -7491,6 +8310,10 @@ var DatabaseController = class _DatabaseController {
7491
8310
  this.emitSetupDone(registration, {
7492
8311
  ...input
7493
8312
  });
8313
+ logPostgresSetupDebug("setup_task_completed", {
8314
+ actorName: registration.actorName,
8315
+ databaseName: requestedDatabaseName
8316
+ });
7494
8317
  return {
7495
8318
  ...input,
7496
8319
  __success: true,
@@ -7500,6 +8323,11 @@ var DatabaseController = class _DatabaseController {
7500
8323
  };
7501
8324
  } catch (error) {
7502
8325
  const message = errorMessage(error);
8326
+ logPostgresSetupDebug("setup_task_failed", {
8327
+ actorName: registration.actorName,
8328
+ databaseName: requestedDatabaseName,
8329
+ error: message
8330
+ });
7503
8331
  setRuntimeState({
7504
8332
  pool: null,
7505
8333
  ready: false,
@@ -7627,7 +8455,7 @@ var DatabaseController = class _DatabaseController {
7627
8455
  return await work();
7628
8456
  } catch (error) {
7629
8457
  lastError = error;
7630
- const transient = isTransientDatabaseError(error);
8458
+ const transient = isTransientDatabaseError(error, operationLabel);
7631
8459
  if (!transient || attempt >= attempts) {
7632
8460
  break;
7633
8461
  }
@@ -8293,7 +9121,7 @@ var DatabaseController = class _DatabaseController {
8293
9121
  description: `Macro upsert operation for table ${tableName}`,
8294
9122
  input: insertSchema
8295
9123
  });
8296
- CadenzaService.createThrottledTask(
9124
+ CadenzaService.createTask(
8297
9125
  `UPSERT ${tableName}`,
8298
9126
  registration.actor.task(
8299
9127
  async ({ input }) => {
@@ -8314,9 +9142,11 @@ var DatabaseController = class _DatabaseController {
8314
9142
  },
8315
9143
  { mode: "write" }
8316
9144
  ),
8317
- (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
8318
9145
  `Macro upsert task for ${tableName}`,
8319
9146
  {
9147
+ concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
9148
+ timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
9149
+ getTagCallback: () => `upsert:${registration.actorToken}:${tableName}`,
8320
9150
  isMeta: registration.options.isMeta,
8321
9151
  isSubMeta: registration.options.isMeta,
8322
9152
  validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
@@ -8347,15 +9177,15 @@ var DatabaseController = class _DatabaseController {
8347
9177
  };
8348
9178
  }
8349
9179
  if (trigger.queryData) {
8350
- context.queryData = {
8351
- ...context.queryData ?? {},
8352
- ...trigger.queryData
8353
- };
9180
+ context.queryData = mergeTriggerQueryData(
9181
+ context,
9182
+ trigger.queryData
9183
+ );
8354
9184
  payloadModifiedByTriggers = true;
8355
9185
  }
8356
9186
  }
8357
9187
  }
8358
- const operationPayload = typeof context.queryData === "object" && context.queryData ? context.queryData : context;
9188
+ const operationPayload = resolveOperationPayload(context);
8359
9189
  const shouldDebugAuthoritySync = shouldDebugAuthoritySyncPayload(
8360
9190
  tableName,
8361
9191
  operationPayload
@@ -8452,18 +9282,29 @@ var DatabaseController = class _DatabaseController {
8452
9282
  },
8453
9283
  { mode: op === "query" ? "read" : "write" }
8454
9284
  );
8455
- const task = CadenzaService.createThrottledTask(
9285
+ const taskOptions = {
9286
+ isMeta: registration.options.isMeta,
9287
+ isSubMeta: registration.options.isMeta,
9288
+ validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
9289
+ inputSchema: schema
9290
+ };
9291
+ const task = (op === "insert" ? CadenzaService.createTask(
8456
9292
  taskName,
8457
9293
  databaseTaskFunction,
8458
- (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
8459
9294
  `Auto-generated ${op} task for ${tableName} (PostgresActor)`,
8460
9295
  {
8461
- isMeta: registration.options.isMeta,
8462
- isSubMeta: registration.options.isMeta,
8463
- validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
8464
- inputSchema: schema
9296
+ ...taskOptions,
9297
+ concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
9298
+ timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
9299
+ getTagCallback: () => `insert:${registration.actorToken}:${tableName}`
8465
9300
  }
8466
- ).doOn(
9301
+ ) : CadenzaService.createThrottledTask(
9302
+ taskName,
9303
+ databaseTaskFunction,
9304
+ (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
9305
+ `Auto-generated ${op} task for ${tableName} (PostgresActor)`,
9306
+ taskOptions
9307
+ )).doOn(
8467
9308
  ...table.customSignals?.triggers?.[op]?.map(
8468
9309
  (signal) => typeof signal === "string" ? signal : signal.signal
8469
9310
  ) ?? []
@@ -9122,7 +9963,7 @@ function buildIntentRegistryData(intent) {
9122
9963
  description: typeof intent?.description === "string" ? intent.description : "",
9123
9964
  input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
9124
9965
  output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
9125
- isMeta: isMetaIntentName(name)
9966
+ is_meta: isMetaIntentName(name)
9126
9967
  };
9127
9968
  }
9128
9969
  function getJoinedContextValue(ctx, key) {
@@ -9195,34 +10036,7 @@ function buildSyncInsertQueryData(ctx, queryData = {}) {
9195
10036
  }
9196
10037
  return nextQueryData;
9197
10038
  }
9198
- function buildSyncQueryQueryData(ctx, queryData = {}) {
9199
- const joinedQueryData = getJoinedContextValue(ctx, "queryData");
9200
- const existingQueryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : joinedQueryData && typeof joinedQueryData === "object" ? joinedQueryData : {};
9201
- const nextQueryData = {};
9202
- const allowedKeys = [
9203
- "transaction",
9204
- "filter",
9205
- "fields",
9206
- "joins",
9207
- "sort",
9208
- "limit",
9209
- "offset",
9210
- "queryMode",
9211
- "aggregates",
9212
- "groupBy"
9213
- ];
9214
- for (const key of allowedKeys) {
9215
- if (Object.prototype.hasOwnProperty.call(existingQueryData, key)) {
9216
- nextQueryData[key] = existingQueryData[key];
9217
- }
9218
- }
9219
- return {
9220
- ...nextQueryData,
9221
- ...queryData
9222
- };
9223
- }
9224
10039
  var REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY = 5;
9225
- var REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY = 3;
9226
10040
  function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
9227
10041
  if (!graph) {
9228
10042
  return void 0;
@@ -9235,11 +10049,27 @@ function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
9235
10049
  }
9236
10050
  function buildSyncExecutionEnvelope(ctx, queryData) {
9237
10051
  const originalContext = { ...ctx };
10052
+ const syncSourceServiceName = typeof ctx.__syncSourceServiceName === "string" && ctx.__syncSourceServiceName.trim().length > 0 ? ctx.__syncSourceServiceName : typeof ctx.__serviceName === "string" && ctx.__serviceName.trim().length > 0 ? ctx.__serviceName : resolveSyncServiceName();
10053
+ const rootDbOperationFields = {};
10054
+ for (const key of [
10055
+ "data",
10056
+ "batch",
10057
+ "transaction",
10058
+ "onConflict",
10059
+ "filter",
10060
+ "fields"
10061
+ ]) {
10062
+ if (Object.prototype.hasOwnProperty.call(queryData, key)) {
10063
+ rootDbOperationFields[key] = queryData[key];
10064
+ }
10065
+ }
9238
10066
  const nextContext = {
9239
10067
  __syncing: ctx.__syncing === true || ctx.__metadata?.__syncing === true || false,
10068
+ __syncSourceServiceName: syncSourceServiceName,
9240
10069
  __preferredTransportProtocol: "rest",
9241
10070
  __resolverOriginalContext: originalContext,
9242
10071
  __resolverQueryData: queryData,
10072
+ ...rootDbOperationFields,
9243
10073
  queryData
9244
10074
  };
9245
10075
  if (typeof ctx.__reason === "string" && ctx.__reason.trim().length > 0) {
@@ -9247,9 +10077,26 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
9247
10077
  }
9248
10078
  return nextContext;
9249
10079
  }
10080
+ function markCompletedSyncCycle(completedCycles, cycleId, limit = 32) {
10081
+ if (!cycleId) {
10082
+ return false;
10083
+ }
10084
+ if (completedCycles.has(cycleId)) {
10085
+ return false;
10086
+ }
10087
+ completedCycles.add(cycleId);
10088
+ while (completedCycles.size > limit) {
10089
+ const oldestCycleId = completedCycles.values().next().value;
10090
+ if (!oldestCycleId) {
10091
+ break;
10092
+ }
10093
+ completedCycles.delete(oldestCycleId);
10094
+ }
10095
+ return true;
10096
+ }
9250
10097
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
9251
10098
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
9252
- if (!localInsertTask && !isCadenzaDBReady) {
10099
+ if (isCadenzaDBReady && !localInsertTask) {
9253
10100
  return void 0;
9254
10101
  }
9255
10102
  const targetTask = localInsertTask ?? CadenzaService.createCadenzaDBInsertTask(tableName, queryData, {
@@ -9300,6 +10147,11 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9300
10147
  ...ctx,
9301
10148
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
9302
10149
  };
10150
+ if (originalContext.__syncing === true && !didSyncInsertSucceed(normalizedContext)) {
10151
+ CadenzaService.debounce("meta.sync_requested", {
10152
+ delayMs: 1e3
10153
+ });
10154
+ }
9303
10155
  return normalizedContext;
9304
10156
  },
9305
10157
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -9327,86 +10179,82 @@ var CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES = [
9327
10179
  "intent_to_task_map",
9328
10180
  "directional_task_graph_map"
9329
10181
  ];
9330
- var AUTHORITY_QUERY_RESULT_KEYS = {
9331
- task: "tasks",
9332
- routine: "routines",
9333
- signal_registry: "signalRegistrys",
9334
- intent_registry: "intentRegistrys"
9335
- };
9336
- var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
9337
- function resolveSyncQueryRows(ctx, tableName) {
9338
- const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
9339
- const rows = ctx?.[resultKey];
9340
- return Array.isArray(rows) ? rows : [];
9341
- }
9342
- function resolveSyncQueryTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
9343
- const localQueryTask = CadenzaService.getLocalCadenzaDBQueryTask(tableName);
9344
- if (!localQueryTask && !isCadenzaDBReady) {
9345
- return void 0;
10182
+ var BOOTSTRAP_SYNC_STALE_CYCLE_MS = 15e3;
10183
+ var EARLY_SYNC_TICK_DELAYS_MS = [
10184
+ 400,
10185
+ BOOTSTRAP_SYNC_STALE_CYCLE_MS + 1e3,
10186
+ BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2e3,
10187
+ BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3e3
10188
+ ];
10189
+ function shouldTraceSyncPhase(serviceName) {
10190
+ const configured = process.env.CADENZA_SYNC_PHASE_TRACE_SERVICE;
10191
+ if (!configured || !serviceName) {
10192
+ return false;
9346
10193
  }
9347
- const targetTask = localQueryTask ?? CadenzaService.createCadenzaDBQueryTask(tableName, queryData, {
9348
- ...options,
9349
- concurrency: Number(options.concurrency) > 0 ? Math.min(
9350
- Number(options.concurrency),
9351
- REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY
9352
- ) : REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY,
9353
- register: false,
9354
- isHidden: true
9355
- });
9356
- const prepareQueryTask = CadenzaService.createMetaTask(
9357
- `Prepare graph sync query for ${tableName}`,
9358
- (ctx) => buildSyncExecutionEnvelope(
9359
- ctx,
9360
- buildSyncQueryQueryData(ctx, queryData)
9361
- ),
9362
- `Prepares ${tableName} graph-sync query payloads.`,
9363
- {
9364
- register: false,
9365
- isHidden: true
9366
- }
9367
- );
9368
- const finalizeQueryTask = CadenzaService.createMetaTask(
9369
- `Finalize graph sync query for ${tableName}`,
9370
- (ctx) => ctx,
9371
- `Finalizes ${tableName} graph-sync query payloads after authority lookup.`,
9372
- {
9373
- register: false,
9374
- isHidden: true
9375
- }
9376
- );
9377
- prepareQueryTask.then(targetTask);
9378
- targetTask.then(finalizeQueryTask);
9379
- return {
9380
- entryTask: prepareQueryTask,
9381
- completionTask: finalizeQueryTask
9382
- };
10194
+ return configured === serviceName;
10195
+ }
10196
+ function canonicalizeSignalName(signalName) {
10197
+ if (typeof signalName !== "string") {
10198
+ return "";
10199
+ }
10200
+ return signalName.split(":")[0]?.trim() ?? "";
10201
+ }
10202
+ function isBootstrapLocalOnlySignal(signalName) {
10203
+ return signalName === "meta.service_registry.insert_execution_requested" || signalName.startsWith("meta.sync_controller.");
9383
10204
  }
9384
10205
  function getRegistrableTasks() {
9385
10206
  return Array.from(CadenzaService.registry.tasks.values()).filter(
9386
- (task) => task.register && !task.isHidden
10207
+ (task) => task.register && !task.isHidden && !task.isDeputy
9387
10208
  );
9388
10209
  }
9389
10210
  function getRegistrableRoutines() {
9390
10211
  return Array.from(CadenzaService.registry.routines.values());
9391
10212
  }
9392
- function isAuthoritySyncSignal(signalName) {
9393
- return decomposeSignalName(signalName).isGlobal;
9394
- }
9395
10213
  function getRegistrableSignalObservers() {
9396
10214
  const signalObservers = CadenzaService.signalBroker.signalObservers;
9397
10215
  if (!signalObservers) {
9398
10216
  return [];
9399
10217
  }
9400
- return Array.from(signalObservers.entries()).filter(([signalName]) => isAuthoritySyncSignal(signalName)).map(([signalName, observer]) => ({
9401
- signalName,
9402
- ...observer
9403
- }));
10218
+ const canonicalObservers = /* @__PURE__ */ new Map();
10219
+ for (const [rawSignalName, observer] of signalObservers.entries()) {
10220
+ const signalName = canonicalizeSignalName(rawSignalName);
10221
+ if (!signalName || isBootstrapLocalOnlySignal(signalName)) {
10222
+ continue;
10223
+ }
10224
+ const existing = canonicalObservers.get(signalName);
10225
+ canonicalObservers.set(signalName, {
10226
+ signalName,
10227
+ registered: existing?.registered === true || observer?.registered === true
10228
+ });
10229
+ }
10230
+ return Array.from(canonicalObservers.values());
10231
+ }
10232
+ function isLocallyHandledIntentName(intentName) {
10233
+ const observer = CadenzaService.inquiryBroker.inquiryObservers.get(intentName);
10234
+ if (!observer) {
10235
+ return false;
10236
+ }
10237
+ for (const task of observer.tasks) {
10238
+ if (task.register && !task.isHidden && !task.isDeputy) {
10239
+ return true;
10240
+ }
10241
+ }
10242
+ return false;
9404
10243
  }
9405
10244
  function getRegistrableIntentNames() {
9406
10245
  return Array.from(CadenzaService.inquiryBroker.intents.values()).map((intent) => buildIntentRegistryData(intent)).filter(
9407
10246
  (intentDefinition) => intentDefinition !== null
10247
+ ).filter(
10248
+ (intentDefinition) => isLocallyHandledIntentName(String(intentDefinition.name))
9408
10249
  ).map((intentDefinition) => String(intentDefinition.name));
9409
10250
  }
10251
+ function isRegistrableLocalIntentDefinition(intent) {
10252
+ const intentData = buildIntentRegistryData(intent);
10253
+ if (!intentData) {
10254
+ return false;
10255
+ }
10256
+ return isLocallyHandledIntentName(String(intentData.name));
10257
+ }
9410
10258
  function buildActorRegistrationKey(actor, serviceName) {
9411
10259
  const data = buildActorRegistrationData(actor);
9412
10260
  const name = typeof data.name === "string" && data.name.trim().length > 0 ? data.name.trim() : "";
@@ -9448,10 +10296,23 @@ var GraphSyncController = class _GraphSyncController {
9448
10296
  this.signalsSynced = false;
9449
10297
  this.intentsSynced = false;
9450
10298
  this.routinesSynced = false;
10299
+ this.directionalTaskMapsSynced = false;
10300
+ this.signalTaskMapsSynced = false;
10301
+ this.intentTaskMapsSynced = false;
10302
+ this.actorTaskMapsSynced = false;
10303
+ this.routineTaskMapsSynced = false;
9451
10304
  this.isCadenzaDBReady = false;
9452
10305
  this.initialized = false;
9453
10306
  this.initRetryScheduled = false;
9454
10307
  this.lastMissingLocalCadenzaDBInsertTablesKey = "";
10308
+ this.syncCycleCounter = 0;
10309
+ this.primitivePhaseCompletedCycles = /* @__PURE__ */ new Set();
10310
+ this.mapPhaseCompletedCycles = /* @__PURE__ */ new Set();
10311
+ this.activeSyncCycleId = null;
10312
+ this.activeSyncCycleStartedAt = 0;
10313
+ this.pendingBootstrapSyncRerun = false;
10314
+ this.localServiceInserted = false;
10315
+ this.localServiceInstanceInserted = false;
9455
10316
  }
9456
10317
  static get instance() {
9457
10318
  if (!this._instance) this._instance = new _GraphSyncController();
@@ -9525,45 +10386,16 @@ var GraphSyncController = class _GraphSyncController {
9525
10386
  },
9526
10387
  { concurrency: 30 }
9527
10388
  );
9528
- const ensureIntentRegistryBeforeIntentMapTask = resolveSyncInsertTask(
9529
- this.isCadenzaDBReady,
9530
- "intent_registry",
9531
- {
9532
- onConflict: {
9533
- target: ["name"],
9534
- action: {
9535
- do: "nothing"
9536
- }
9537
- }
9538
- },
9539
- { concurrency: 30 }
9540
- );
9541
- const authoritativeTaskQueryGraph = resolveSyncQueryTask(
9542
- this.isCadenzaDBReady,
9543
- "task",
9544
- {},
9545
- { concurrency: 10 }
9546
- );
9547
- const authoritativeRoutineQueryGraph = resolveSyncQueryTask(
9548
- this.isCadenzaDBReady,
9549
- "routine",
9550
- {},
9551
- { concurrency: 10 }
9552
- );
9553
- const authoritativeSignalQueryGraph = resolveSyncQueryTask(
9554
- this.isCadenzaDBReady,
9555
- "signal_registry",
9556
- {},
9557
- { concurrency: 10 }
9558
- );
9559
- const authoritativeIntentQueryGraph = resolveSyncQueryTask(
9560
- this.isCadenzaDBReady,
9561
- "intent_registry",
9562
- {},
9563
- { concurrency: 10 }
9564
- );
9565
10389
  const finalizeTaskSync = (emit, ctx) => {
9566
10390
  const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);
10391
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10392
+ if (shouldTraceSyncPhase(serviceName2)) {
10393
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_tasks", {
10394
+ serviceName: serviceName2,
10395
+ pendingCount: pendingTasks.length,
10396
+ sample: pendingTasks.slice(0, 5).map((task) => task.name)
10397
+ });
10398
+ }
9567
10399
  if (pendingTasks.length > 0) {
9568
10400
  this.tasksSynced = false;
9569
10401
  return false;
@@ -9582,6 +10414,14 @@ var GraphSyncController = class _GraphSyncController {
9582
10414
  const pendingRoutines = getRegistrableRoutines().filter(
9583
10415
  (routine) => !routine.registered
9584
10416
  );
10417
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10418
+ if (shouldTraceSyncPhase(serviceName2)) {
10419
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_routines", {
10420
+ serviceName: serviceName2,
10421
+ pendingCount: pendingRoutines.length,
10422
+ sample: pendingRoutines.slice(0, 5).map((routine) => routine.name)
10423
+ });
10424
+ }
9585
10425
  if (pendingRoutines.length > 0) {
9586
10426
  this.routinesSynced = false;
9587
10427
  return false;
@@ -9600,6 +10440,14 @@ var GraphSyncController = class _GraphSyncController {
9600
10440
  const pendingSignals = getRegistrableSignalObservers().filter(
9601
10441
  (observer) => observer.registered !== true
9602
10442
  );
10443
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10444
+ if (shouldTraceSyncPhase(serviceName2)) {
10445
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_signals", {
10446
+ serviceName: serviceName2,
10447
+ pendingCount: pendingSignals.length,
10448
+ sample: pendingSignals.slice(0, 5).map((observer) => observer.signalName)
10449
+ });
10450
+ }
9603
10451
  if (pendingSignals.length > 0) {
9604
10452
  this.signalsSynced = false;
9605
10453
  return false;
@@ -9618,6 +10466,14 @@ var GraphSyncController = class _GraphSyncController {
9618
10466
  const pendingIntentNames = getRegistrableIntentNames().filter(
9619
10467
  (intentName) => !this.registeredIntentDefinitions.has(intentName)
9620
10468
  );
10469
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10470
+ if (shouldTraceSyncPhase(serviceName2)) {
10471
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_intents", {
10472
+ serviceName: serviceName2,
10473
+ pendingCount: pendingIntentNames.length,
10474
+ sample: pendingIntentNames.slice(0, 5)
10475
+ });
10476
+ }
9621
10477
  if (pendingIntentNames.length > 0) {
9622
10478
  this.intentsSynced = false;
9623
10479
  return false;
@@ -9639,6 +10495,13 @@ var GraphSyncController = class _GraphSyncController {
9639
10495
  return false;
9640
10496
  }
9641
10497
  const pendingActorKeys = CadenzaService.getAllActors().map((actor) => buildActorRegistrationKey(actor, syncServiceName)).filter((registrationKey) => Boolean(registrationKey)).filter((registrationKey) => !this.registeredActors.has(registrationKey));
10498
+ if (shouldTraceSyncPhase(syncServiceName)) {
10499
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_actors", {
10500
+ serviceName: syncServiceName,
10501
+ pendingCount: pendingActorKeys.length,
10502
+ sample: pendingActorKeys.slice(0, 5)
10503
+ });
10504
+ }
9642
10505
  if (pendingActorKeys.length > 0) {
9643
10506
  this.actorsSynced = false;
9644
10507
  return false;
@@ -9719,8 +10582,8 @@ var GraphSyncController = class _GraphSyncController {
9719
10582
  name: routine.name,
9720
10583
  version: routine.version,
9721
10584
  description: routine.description,
9722
- serviceName: serviceName2,
9723
- isMeta: routine.isMeta
10585
+ service_name: serviceName2,
10586
+ is_meta: routine.isMeta
9724
10587
  },
9725
10588
  __routineName: routine.name
9726
10589
  };
@@ -9783,11 +10646,11 @@ var GraphSyncController = class _GraphSyncController {
9783
10646
  yield {
9784
10647
  __syncing: ctx.__syncing,
9785
10648
  data: {
9786
- taskName: nextTask.name,
9787
- taskVersion: nextTask.version,
9788
- routineName: routine.name,
9789
- routineVersion: routine.version,
9790
- serviceName: serviceName2
10649
+ task_name: nextTask.name,
10650
+ task_version: nextTask.version,
10651
+ routine_name: routine.name,
10652
+ routine_version: routine.version,
10653
+ service_name: serviceName2
9791
10654
  },
9792
10655
  __routineName: routine.name,
9793
10656
  __taskName: nextTask.name
@@ -9845,12 +10708,20 @@ var GraphSyncController = class _GraphSyncController {
9845
10708
  });
9846
10709
  const { signals } = ctx;
9847
10710
  if (!signals) return;
9848
- const filteredSignals = signals.filter((signal) => {
9849
- if (signal.data.registered) {
10711
+ const seenSignals = /* @__PURE__ */ new Set();
10712
+ const filteredSignals = signals.map((signal) => ({
10713
+ signalName: canonicalizeSignalName(signal.signal),
10714
+ data: signal.data
10715
+ })).filter((signal) => {
10716
+ if (!signal.signalName || signal.data?.registered || isBootstrapLocalOnlySignal(signal.signalName)) {
10717
+ return false;
10718
+ }
10719
+ if (seenSignals.has(signal.signalName)) {
9850
10720
  return false;
9851
10721
  }
9852
- return isAuthoritySyncSignal(signal.signal);
9853
- }).map((signal) => signal.signal);
10722
+ seenSignals.add(signal.signalName);
10723
+ return true;
10724
+ }).map((signal) => signal.signalName);
9854
10725
  for (const signal of filteredSignals) {
9855
10726
  const { isMeta, isGlobal, domain, action } = decomposeSignalName(signal);
9856
10727
  this.signalsSynced = false;
@@ -9858,10 +10729,10 @@ var GraphSyncController = class _GraphSyncController {
9858
10729
  __syncing: ctx.__syncing,
9859
10730
  data: {
9860
10731
  name: signal,
9861
- isGlobal,
10732
+ is_global: isGlobal,
9862
10733
  domain,
9863
10734
  action,
9864
- isMeta
10735
+ is_meta: isMeta
9865
10736
  },
9866
10737
  __signal: signal
9867
10738
  };
@@ -9883,14 +10754,15 @@ var GraphSyncController = class _GraphSyncController {
9883
10754
  );
9884
10755
  const processSignalRegistrationTask = CadenzaService.createMetaTask(
9885
10756
  "Process signal registration",
9886
- (ctx) => {
9887
- if (!didSyncInsertSucceed(ctx)) {
10757
+ (ctx, emit) => {
10758
+ const insertSucceeded = didSyncInsertSucceed(ctx);
10759
+ const signalName = resolveSignalNameFromSyncContext(ctx);
10760
+ if (!insertSucceeded) {
9888
10761
  return;
9889
10762
  }
9890
10763
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
9891
10764
  delayMs: 3e3
9892
10765
  });
9893
- const signalName = resolveSignalNameFromSyncContext(ctx);
9894
10766
  if (!signalName) {
9895
10767
  return false;
9896
10768
  }
@@ -9901,7 +10773,14 @@ var GraphSyncController = class _GraphSyncController {
9901
10773
  const observer = signalObservers?.get(signalName);
9902
10774
  if (observer) {
9903
10775
  observer.registered = true;
10776
+ observer.registrationRequested = false;
9904
10777
  }
10778
+ emit(
10779
+ "meta.sync_controller.signal_registered",
10780
+ buildMinimalSyncSignalContext(ctx, {
10781
+ __signal: signalName
10782
+ })
10783
+ );
9905
10784
  return { signalName };
9906
10785
  }
9907
10786
  ).then(CadenzaService.signalBroker.registerSignalTask).then(gatherSignalRegistrationTask);
@@ -9922,6 +10801,7 @@ var GraphSyncController = class _GraphSyncController {
9922
10801
  return;
9923
10802
  }
9924
10803
  for (const task of tasks) {
10804
+ if (task.hidden || !task.register || task.isDeputy) continue;
9925
10805
  if (task.registered) continue;
9926
10806
  const { __functionString, __getTagCallback } = task.export();
9927
10807
  this.tasksSynced = false;
@@ -9931,32 +10811,33 @@ var GraphSyncController = class _GraphSyncController {
9931
10811
  name: task.name,
9932
10812
  version: task.version,
9933
10813
  description: task.description,
9934
- functionString: __functionString,
9935
- tagIdGetter: __getTagCallback,
9936
- layerIndex: task.layerIndex,
10814
+ function_string: __functionString,
10815
+ tag_id_getter: __getTagCallback,
10816
+ layer_index: task.layerIndex,
9937
10817
  concurrency: task.concurrency,
9938
10818
  timeout: task.timeout,
9939
- isUnique: task.isUnique,
9940
- isSignal: task.isSignal,
9941
- isThrottled: task.isThrottled,
9942
- isDebounce: task.isDebounce,
9943
- isEphemeral: task.isEphemeral,
9944
- isMeta: task.isMeta,
9945
- isSubMeta: task.isSubMeta,
9946
- isHidden: task.isHidden,
9947
- validateInputContext: task.validateInputContext,
9948
- validateOutputContext: task.validateOutputContext,
9949
- retryCount: task.retryCount,
9950
- retryDelay: task.retryDelay,
9951
- retryDelayMax: task.retryDelayMax,
9952
- retryDelayFactor: task.retryDelayFactor,
10819
+ is_unique: task.isUnique,
10820
+ is_signal: task.isSignal,
10821
+ is_throttled: task.isThrottled,
10822
+ is_debounce: task.isDebounce,
10823
+ is_ephemeral: task.isEphemeral,
10824
+ is_meta: task.isMeta,
10825
+ is_sub_meta: task.isSubMeta,
10826
+ is_hidden: task.isHidden,
10827
+ validate_input_context: task.validateInputContext,
10828
+ validate_output_context: task.validateOutputContext,
10829
+ retry_count: task.retryCount,
10830
+ retry_delay: task.retryDelay,
10831
+ retry_delay_max: task.retryDelayMax,
10832
+ retry_delay_factor: task.retryDelayFactor,
9953
10833
  service_name: serviceName2,
9954
10834
  signals: {
9955
10835
  emits: Array.from(task.emitsSignals),
9956
10836
  signalsToEmitAfter: Array.from(task.signalsToEmitAfter),
9957
10837
  signalsToEmitOnFail: Array.from(task.signalsToEmitOnFail),
9958
10838
  observed: Array.from(task.observedSignals)
9959
- }
10839
+ },
10840
+ intents: Array.from(task.handlesIntents)
9960
10841
  },
9961
10842
  __taskName: task.name
9962
10843
  };
@@ -9979,17 +10860,20 @@ var GraphSyncController = class _GraphSyncController {
9979
10860
  const registerTaskTask = CadenzaService.createMetaTask(
9980
10861
  "Record registration",
9981
10862
  (ctx, emit) => {
9982
- if (!didSyncInsertSucceed(ctx)) {
10863
+ const task = resolveLocalTaskFromSyncContext(ctx);
10864
+ const serviceName2 = resolveSyncServiceName(task);
10865
+ const insertSucceeded = didSyncInsertSucceed(ctx);
10866
+ if (!insertSucceeded) {
9983
10867
  return;
9984
10868
  }
9985
10869
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
9986
10870
  delayMs: 3e3
9987
10871
  });
9988
- const task = resolveLocalTaskFromSyncContext(ctx);
9989
10872
  if (!task) {
9990
10873
  return true;
9991
10874
  }
9992
10875
  task.registered = true;
10876
+ task.registrationRequested = false;
9993
10877
  emit(
9994
10878
  "meta.sync_controller.task_registered",
9995
10879
  buildMinimalSyncSignalContext(ctx, {
@@ -10000,24 +10884,6 @@ var GraphSyncController = class _GraphSyncController {
10000
10884
  }
10001
10885
  ).then(gatherTaskRegistrationTask);
10002
10886
  wireSyncTaskGraph(this.splitTasksForRegistration, registerTaskGraph, registerTaskTask);
10003
- CadenzaService.createMetaTask(
10004
- "Prepare created task for immediate sync",
10005
- (ctx) => {
10006
- const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
10007
- if (!task || task.hidden || !task.register || task.registered) {
10008
- return false;
10009
- }
10010
- return {
10011
- __syncing: true,
10012
- tasks: [task]
10013
- };
10014
- },
10015
- "Schedules newly created tasks into the graph sync registration flow without waiting for the next periodic tick.",
10016
- {
10017
- register: false,
10018
- isHidden: true
10019
- }
10020
- ).doOn("meta.task.created").then(this.splitTasksForRegistration);
10021
10887
  this.splitActorsForRegistration = CadenzaService.createMetaTask(
10022
10888
  "Split actors for registration",
10023
10889
  function* (ctx) {
@@ -10156,13 +11022,14 @@ var GraphSyncController = class _GraphSyncController {
10156
11022
  const registerSignalTask = CadenzaService.createMetaTask(
10157
11023
  "Record signal registration",
10158
11024
  (ctx) => {
11025
+ const task = resolveLocalTaskFromSyncContext(ctx);
11026
+ const serviceName2 = resolveSyncServiceName(task);
10159
11027
  if (!didSyncInsertSucceed(ctx)) {
10160
11028
  return;
10161
11029
  }
10162
11030
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
10163
11031
  delayMs: 3e3
10164
11032
  });
10165
- const task = resolveLocalTaskFromSyncContext(ctx);
10166
11033
  const signalName = resolveSignalNameFromSyncContext(ctx);
10167
11034
  if (!task || !signalName) {
10168
11035
  return true;
@@ -10174,7 +11041,8 @@ var GraphSyncController = class _GraphSyncController {
10174
11041
  "Split observed signals of task",
10175
11042
  function* (ctx) {
10176
11043
  const task = ctx.task;
10177
- if (task.hidden || !task.register || !task.registered) return false;
11044
+ if (task.hidden || !task.register || task.isDeputy || !task.registered)
11045
+ return false;
10178
11046
  const serviceName2 = resolveSyncServiceName(task);
10179
11047
  if (!serviceName2) {
10180
11048
  return false;
@@ -10193,11 +11061,11 @@ var GraphSyncController = class _GraphSyncController {
10193
11061
  yield {
10194
11062
  __syncing: ctx.__syncing,
10195
11063
  data: {
10196
- signalName: _signal,
10197
- isGlobal,
10198
- taskName: task.name,
10199
- taskVersion: task.version,
10200
- serviceName: serviceName2
11064
+ signal_name: _signal,
11065
+ is_global: isGlobal,
11066
+ task_name: task.name,
11067
+ task_version: task.version,
11068
+ service_name: serviceName2
10201
11069
  },
10202
11070
  __taskName: task.name,
10203
11071
  __signal: signal
@@ -10238,6 +11106,9 @@ var GraphSyncController = class _GraphSyncController {
10238
11106
  });
10239
11107
  const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
10240
11108
  for (const intent of intents) {
11109
+ if (!isRegistrableLocalIntentDefinition(intent)) {
11110
+ continue;
11111
+ }
10241
11112
  const intentData = buildIntentRegistryData(intent);
10242
11113
  if (!intentData) {
10243
11114
  continue;
@@ -10256,7 +11127,7 @@ var GraphSyncController = class _GraphSyncController {
10256
11127
  );
10257
11128
  const recordIntentDefinitionRegistrationTask = CadenzaService.createMetaTask(
10258
11129
  "Record intent definition registration",
10259
- (ctx) => {
11130
+ (ctx, emit) => {
10260
11131
  if (!didSyncInsertSucceed(ctx)) {
10261
11132
  return;
10262
11133
  }
@@ -10264,6 +11135,12 @@ var GraphSyncController = class _GraphSyncController {
10264
11135
  delayMs: 3e3
10265
11136
  });
10266
11137
  this.registeredIntentDefinitions.add(ctx.__intentName);
11138
+ emit(
11139
+ "meta.sync_controller.intent_registered",
11140
+ buildMinimalSyncSignalContext(ctx, {
11141
+ __intentName: ctx.__intentName
11142
+ })
11143
+ );
10267
11144
  return true;
10268
11145
  }
10269
11146
  ).then(gatherIntentRegistrationTask);
@@ -10275,13 +11152,13 @@ var GraphSyncController = class _GraphSyncController {
10275
11152
  const registerIntentTask = CadenzaService.createMetaTask(
10276
11153
  "Record intent registration",
10277
11154
  (ctx) => {
11155
+ const task = resolveLocalTaskFromSyncContext(ctx);
10278
11156
  if (!didSyncInsertSucceed(ctx)) {
10279
11157
  return;
10280
11158
  }
10281
11159
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
10282
11160
  delayMs: 3e3
10283
11161
  });
10284
- const task = resolveLocalTaskFromSyncContext(ctx);
10285
11162
  if (!task) {
10286
11163
  return true;
10287
11164
  }
@@ -10293,7 +11170,8 @@ var GraphSyncController = class _GraphSyncController {
10293
11170
  "Split intents of task",
10294
11171
  function* (ctx) {
10295
11172
  const task = ctx.task;
10296
- if (task.hidden || !task.register || !task.registered) return false;
11173
+ if (task.hidden || !task.register || task.isDeputy || !task.registered)
11174
+ return false;
10297
11175
  const serviceName2 = resolveSyncServiceName(task);
10298
11176
  if (!serviceName2) {
10299
11177
  return false;
@@ -10328,19 +11206,19 @@ var GraphSyncController = class _GraphSyncController {
10328
11206
  yield {
10329
11207
  __syncing: ctx.__syncing,
10330
11208
  data: {
10331
- intentName: intent,
10332
- taskName: task.name,
10333
- taskVersion: task.version,
10334
- serviceName: serviceName2
11209
+ intent_name: intent,
11210
+ task_name: task.name,
11211
+ task_version: task.version,
11212
+ service_name: serviceName2
10335
11213
  },
10336
11214
  __taskName: task.name,
10337
11215
  __intent: intent,
10338
11216
  __intentDefinition: intentDefinition,
10339
11217
  __intentMapData: {
10340
- intentName: intent,
10341
- taskName: task.name,
10342
- taskVersion: task.version,
10343
- serviceName: serviceName2
11218
+ intent_name: intent,
11219
+ task_name: task.name,
11220
+ task_version: task.version,
11221
+ service_name: serviceName2
10344
11222
  }
10345
11223
  };
10346
11224
  emittedCount += 1;
@@ -10348,30 +11226,6 @@ var GraphSyncController = class _GraphSyncController {
10348
11226
  return emittedCount > 0;
10349
11227
  }.bind(this)
10350
11228
  );
10351
- const prepareIntentDefinitionForIntentMapTask = CadenzaService.createMetaTask(
10352
- "Prepare intent definition for intent-to-task map",
10353
- (ctx) => {
10354
- if (!ctx.__intentDefinition || !ctx.__intentMapData) {
10355
- return false;
10356
- }
10357
- return {
10358
- ...ctx,
10359
- data: ctx.__intentDefinition
10360
- };
10361
- }
10362
- );
10363
- const restoreIntentToTaskMapPayloadTask = CadenzaService.createMetaTask(
10364
- "Restore intent-to-task map payload",
10365
- (ctx) => {
10366
- if (!ctx.__intentMapData) {
10367
- return false;
10368
- }
10369
- return {
10370
- ...ctx,
10371
- data: ctx.__intentMapData
10372
- };
10373
- }
10374
- );
10375
11229
  const intentToTaskMapGraph = resolveSyncInsertTask(
10376
11230
  this.isCadenzaDBReady,
10377
11231
  "intent_to_task_map",
@@ -10390,20 +11244,8 @@ var GraphSyncController = class _GraphSyncController {
10390
11244
  },
10391
11245
  { concurrency: 30 }
10392
11246
  );
10393
- this.registerIntentToTaskMapTask.then(prepareIntentDefinitionForIntentMapTask);
10394
- if (ensureIntentRegistryBeforeIntentMapTask) {
10395
- wireSyncTaskGraph(
10396
- prepareIntentDefinitionForIntentMapTask,
10397
- ensureIntentRegistryBeforeIntentMapTask,
10398
- restoreIntentToTaskMapPayloadTask
10399
- );
10400
- } else {
10401
- prepareIntentDefinitionForIntentMapTask.then(
10402
- restoreIntentToTaskMapPayloadTask
10403
- );
10404
- }
10405
11247
  wireSyncTaskGraph(
10406
- restoreIntentToTaskMapPayloadTask,
11248
+ this.registerIntentToTaskMapTask,
10407
11249
  intentToTaskMapGraph,
10408
11250
  registerIntentTask
10409
11251
  );
@@ -10414,7 +11256,9 @@ var GraphSyncController = class _GraphSyncController {
10414
11256
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
10415
11257
  delayMs: 3e3
10416
11258
  });
10417
- if (task.hidden || !task.register) return;
11259
+ if (task.hidden || !task.register || task.isDeputy || !task.registered) {
11260
+ return;
11261
+ }
10418
11262
  const predecessorServiceName = resolveSyncServiceName(task);
10419
11263
  if (!predecessorServiceName) {
10420
11264
  return;
@@ -10429,12 +11273,12 @@ var GraphSyncController = class _GraphSyncController {
10429
11273
  }
10430
11274
  yield {
10431
11275
  data: {
10432
- taskName: t.name,
10433
- taskVersion: t.version,
10434
- predecessorTaskName: task.name,
10435
- predecessorTaskVersion: task.version,
10436
- serviceName: serviceName2,
10437
- predecessorServiceName
11276
+ task_name: t.name,
11277
+ task_version: t.version,
11278
+ predecessor_task_name: task.name,
11279
+ predecessor_task_version: task.version,
11280
+ service_name: serviceName2,
11281
+ predecessor_service_name: predecessorServiceName
10438
11282
  },
10439
11283
  __taskName: task.name,
10440
11284
  __nextTaskName: t.name
@@ -10481,519 +11325,598 @@ var GraphSyncController = class _GraphSyncController {
10481
11325
  taskMapRegistrationGraph,
10482
11326
  recordTaskMapRegistrationTask
10483
11327
  );
10484
- this.registerDeputyRelationshipTask = CadenzaService.createMetaTask(
10485
- "Register deputy relationship",
10486
- (ctx) => {
10487
- const task = ctx.task;
10488
- if (task.hidden || !task.register) return;
10489
- if (task.isDeputy && !task.signalName) {
10490
- if (task.registeredDeputyMap) return;
10491
- const serviceName2 = resolveSyncServiceName(task);
10492
- const predecessorServiceName = resolveSyncServiceName();
10493
- if (!serviceName2 || !predecessorServiceName) {
10494
- return;
10495
- }
10496
- return {
10497
- data: {
10498
- task_name: task.remoteRoutineName,
10499
- task_version: 1,
10500
- service_name: serviceName2,
10501
- predecessor_task_name: task.name,
10502
- predecessor_task_version: task.version,
10503
- predecessor_service_name: predecessorServiceName
10504
- },
10505
- __taskName: task.name
10506
- };
11328
+ const hasPendingDirectionalTaskMaps = () => getRegistrableTasks().some((task) => {
11329
+ if (task.isHidden || !task.register || !task.registered) {
11330
+ return false;
11331
+ }
11332
+ const predecessorServiceName = resolveSyncServiceName(task);
11333
+ if (!predecessorServiceName) {
11334
+ return false;
11335
+ }
11336
+ for (const nextTask of task.nextTasks) {
11337
+ if (task.taskMapRegistration.has(nextTask.name) || nextTask.isHidden || !nextTask.register || !nextTask.registered) {
11338
+ continue;
11339
+ }
11340
+ if (resolveSyncServiceName(nextTask)) {
11341
+ return true;
10507
11342
  }
10508
11343
  }
10509
- );
10510
- const deputyRelationshipRegistrationGraph = resolveSyncInsertTask(
10511
- this.isCadenzaDBReady,
10512
- "directional_task_graph_map",
10513
- {
10514
- onConflict: {
10515
- target: [
10516
- "task_name",
10517
- "predecessor_task_name",
10518
- "task_version",
10519
- "predecessor_task_version",
10520
- "service_name",
10521
- "predecessor_service_name"
10522
- ],
10523
- action: {
10524
- do: "nothing"
10525
- }
11344
+ return false;
11345
+ });
11346
+ const hasPendingSignalTaskMaps = () => getRegistrableTasks().some((task) => {
11347
+ if (task.isHidden || !task.register || !task.registered) {
11348
+ return false;
11349
+ }
11350
+ for (const signal of task.observedSignals) {
11351
+ if (task.registeredSignals.has(signal)) {
11352
+ continue;
10526
11353
  }
10527
- },
10528
- { concurrency: 30 }
10529
- );
10530
- const recordDeputyRelationshipRegistrationTask = CadenzaService.createMetaTask(
10531
- "Record deputy relationship registration",
10532
- (ctx) => {
10533
- if (!didSyncInsertSucceed(ctx)) {
10534
- return;
11354
+ const signalName = signal.split(":")[0];
11355
+ if (!decomposeSignalName(signalName).isGlobal) {
11356
+ continue;
10535
11357
  }
10536
- CadenzaService.debounce("meta.sync_controller.synced_resource", {
10537
- delayMs: 3e3
10538
- });
10539
- const task = resolveLocalTaskFromSyncContext(ctx);
10540
- if (!task) {
10541
- return true;
11358
+ if (!CadenzaService.signalBroker.signalObservers?.get(signalName)?.registered) {
11359
+ continue;
10542
11360
  }
10543
- task.registeredDeputyMap = true;
11361
+ return true;
10544
11362
  }
10545
- );
10546
- wireSyncTaskGraph(
10547
- this.registerDeputyRelationshipTask,
10548
- deputyRelationshipRegistrationGraph,
10549
- recordDeputyRelationshipRegistrationTask
10550
- );
10551
- const reconcileTaskRegistrationFromAuthorityTask = CadenzaService.createMetaTask(
10552
- "Reconcile task registration from authority",
10553
- (ctx, emit) => {
10554
- const authoritativeTasks = resolveSyncQueryRows(ctx, "task");
10555
- let changed = false;
10556
- for (const row of authoritativeTasks) {
10557
- const taskName = typeof row.name === "string" ? row.name : "";
10558
- if (!taskName) {
11363
+ return false;
11364
+ });
11365
+ const hasPendingIntentTaskMaps = () => getRegistrableTasks().some((task) => {
11366
+ if (task.isHidden || !task.register || !task.registered) {
11367
+ return false;
11368
+ }
11369
+ const registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
11370
+ for (const intent of task.handlesIntents) {
11371
+ if (registeredIntents.has(intent) || isLocalOnlySyncIntent(intent)) {
11372
+ continue;
11373
+ }
11374
+ if (isMetaIntentName(intent) && !task.isMeta) {
11375
+ continue;
11376
+ }
11377
+ const intentDefinition = buildIntentRegistryData(CadenzaService.inquiryBroker.intents.get(intent)) ?? buildIntentRegistryData({ name: intent });
11378
+ if (!intentDefinition) {
11379
+ continue;
11380
+ }
11381
+ return true;
11382
+ }
11383
+ return false;
11384
+ });
11385
+ const hasPendingActorTaskMaps = () => getRegistrableTasks().some((task) => {
11386
+ if (task.isHidden || !task.register || !task.registered) {
11387
+ return false;
11388
+ }
11389
+ const metadata = getActorTaskRuntimeMetadata(task.taskFunction);
11390
+ if (!metadata?.actorName) {
11391
+ return false;
11392
+ }
11393
+ const serviceName2 = resolveSyncServiceName(task);
11394
+ if (!serviceName2) {
11395
+ return false;
11396
+ }
11397
+ const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName2}`;
11398
+ return !this.registeredActorTaskMaps.has(registrationKey);
11399
+ });
11400
+ const hasPendingRoutineTaskMaps = () => getRegistrableRoutines().some((routine) => {
11401
+ if (!routine.registered) {
11402
+ return false;
11403
+ }
11404
+ for (const task of routine.tasks) {
11405
+ if (!task) {
11406
+ continue;
11407
+ }
11408
+ const tasks = task.getIterator();
11409
+ while (tasks.hasNext()) {
11410
+ const nextTask = tasks.next();
11411
+ if (!nextTask?.registered) {
10559
11412
  continue;
10560
11413
  }
10561
- const task = CadenzaService.get(taskName);
10562
- if (!task || task.registered) {
10563
- continue;
11414
+ if (!routine.registeredTasks.has(nextTask.name)) {
11415
+ return true;
10564
11416
  }
10565
- task.registered = true;
10566
- changed = true;
10567
- emit("meta.sync_controller.task_registered", {
10568
- ...ctx,
10569
- __taskName: task.name,
10570
- task,
10571
- __authoritativeReconciliation: true
10572
- });
10573
11417
  }
10574
- if (authoritativeTasks.length > 0 || changed) {
10575
- finalizeTaskSync(emit, {
10576
- ...ctx,
10577
- __authoritativeReconciliation: true
10578
- });
11418
+ }
11419
+ return false;
11420
+ });
11421
+ const gatherDirectionalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
11422
+ "Gather directional task map registration",
11423
+ (ctx) => {
11424
+ if (hasPendingDirectionalTaskMaps()) {
11425
+ this.directionalTaskMapsSynced = false;
11426
+ return false;
10579
11427
  }
10580
- return changed;
11428
+ this.directionalTaskMapsSynced = true;
11429
+ return ctx;
10581
11430
  },
10582
- "Marks local tasks as registered when authority rows already exist.",
11431
+ "Completes directional task graph registration when task edges and deputy edges are registered.",
10583
11432
  {
10584
11433
  register: false,
10585
11434
  isHidden: true
10586
11435
  }
10587
11436
  );
10588
- const reconcileRoutineRegistrationFromAuthorityTask = CadenzaService.createMetaTask(
10589
- "Reconcile routine registration from authority",
10590
- (ctx, emit) => {
10591
- const authoritativeRoutines = resolveSyncQueryRows(ctx, "routine");
10592
- let changed = false;
10593
- for (const row of authoritativeRoutines) {
10594
- const routineName = typeof row.name === "string" ? row.name : "";
10595
- if (!routineName) {
10596
- continue;
10597
- }
10598
- const routine = CadenzaService.getRoutine(routineName);
10599
- if (!routine || routine.registered) {
10600
- continue;
10601
- }
10602
- routine.registered = true;
10603
- changed = true;
11437
+ const gatherSignalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
11438
+ "Gather signal task map registration",
11439
+ (ctx) => {
11440
+ if (hasPendingSignalTaskMaps()) {
11441
+ this.signalTaskMapsSynced = false;
11442
+ return false;
10604
11443
  }
10605
- if (authoritativeRoutines.length > 0 || changed) {
10606
- finalizeRoutineSync(emit, {
10607
- ...ctx,
10608
- __authoritativeReconciliation: true
10609
- });
11444
+ this.signalTaskMapsSynced = true;
11445
+ return ctx;
11446
+ },
11447
+ "Completes signal-to-task map registration when all global observed signal edges are registered.",
11448
+ {
11449
+ register: false,
11450
+ isHidden: true
11451
+ }
11452
+ );
11453
+ const gatherIntentTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
11454
+ "Gather intent task map registration",
11455
+ (ctx) => {
11456
+ if (hasPendingIntentTaskMaps()) {
11457
+ this.intentTaskMapsSynced = false;
11458
+ return false;
10610
11459
  }
10611
- return changed;
11460
+ this.intentTaskMapsSynced = true;
11461
+ return ctx;
10612
11462
  },
10613
- "Marks local routines as registered when authority rows already exist.",
11463
+ "Completes intent-to-task map registration when all task responders are registered.",
10614
11464
  {
10615
11465
  register: false,
10616
11466
  isHidden: true
10617
11467
  }
10618
11468
  );
10619
- const reconcileSignalRegistrationFromAuthorityTask = CadenzaService.createMetaTask(
10620
- "Reconcile signal registration from authority",
10621
- (ctx, emit) => {
10622
- const authoritativeSignals = resolveSyncQueryRows(ctx, "signal_registry");
10623
- const signalObservers = CadenzaService.signalBroker.signalObservers;
10624
- let changed = false;
10625
- for (const row of authoritativeSignals) {
10626
- const signalName = typeof row.name === "string" ? row.name : "";
10627
- if (!signalName) {
10628
- continue;
10629
- }
10630
- const observer = signalObservers?.get(signalName);
10631
- if (!observer || observer.registered) {
10632
- continue;
10633
- }
10634
- observer.registered = true;
10635
- changed = true;
11469
+ const gatherActorTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
11470
+ "Gather actor task map registration",
11471
+ (ctx) => {
11472
+ if (hasPendingActorTaskMaps()) {
11473
+ this.actorTaskMapsSynced = false;
11474
+ return false;
10636
11475
  }
10637
- if (authoritativeSignals.length > 0 || changed) {
10638
- finalizeSignalSync(emit, {
10639
- ...ctx,
10640
- __authoritativeReconciliation: true
10641
- });
11476
+ this.actorTaskMapsSynced = true;
11477
+ return ctx;
11478
+ },
11479
+ "Completes actor-to-task map registration when all actor-backed tasks are registered.",
11480
+ {
11481
+ register: false,
11482
+ isHidden: true
11483
+ }
11484
+ );
11485
+ const gatherRoutineTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
11486
+ "Gather routine task map registration",
11487
+ (ctx) => {
11488
+ if (hasPendingRoutineTaskMaps()) {
11489
+ this.routineTaskMapsSynced = false;
11490
+ return false;
10642
11491
  }
10643
- return changed;
11492
+ this.routineTaskMapsSynced = true;
11493
+ return ctx;
10644
11494
  },
10645
- "Marks local signals as registered when authority rows already exist.",
11495
+ "Completes task-to-routine map registration when all routine task memberships are registered.",
10646
11496
  {
10647
11497
  register: false,
10648
11498
  isHidden: true
10649
11499
  }
10650
11500
  );
10651
- const reconcileIntentRegistrationFromAuthorityTask = CadenzaService.createMetaTask(
10652
- "Reconcile intent registration from authority",
11501
+ const finishSyncTask = CadenzaService.createUniqueMetaTask(
11502
+ "Finish sync",
10653
11503
  (ctx, emit) => {
10654
- const authoritativeIntents = resolveSyncQueryRows(ctx, "intent_registry");
10655
- let changed = false;
10656
- for (const row of authoritativeIntents) {
10657
- const intentName = typeof row.name === "string" ? row.name : "";
10658
- if (!intentName || !CadenzaService.inquiryBroker.intents.has(intentName)) {
10659
- continue;
10660
- }
10661
- if (this.registeredIntentDefinitions.has(intentName)) {
10662
- continue;
11504
+ const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
11505
+ if (syncCycleId && this.activeSyncCycleId === syncCycleId) {
11506
+ this.activeSyncCycleId = null;
11507
+ this.activeSyncCycleStartedAt = 0;
11508
+ }
11509
+ if (this.pendingBootstrapSyncRerun) {
11510
+ this.pendingBootstrapSyncRerun = false;
11511
+ CadenzaService.debounce("meta.sync_requested", {
11512
+ delayMs: 100
11513
+ });
11514
+ }
11515
+ emit("global.meta.sync_controller.synced", {
11516
+ data: {
11517
+ is_active: true,
11518
+ is_non_responsive: false,
11519
+ is_blocked: false,
11520
+ last_active: formatTimestamp(Date.now())
11521
+ },
11522
+ filter: {
11523
+ uuid: CadenzaService.serviceRegistry.serviceInstanceId
10663
11524
  }
10664
- this.registeredIntentDefinitions.add(intentName);
10665
- changed = true;
11525
+ });
11526
+ return true;
11527
+ },
11528
+ "Marks the current bootstrap sync cycle as complete.",
11529
+ {
11530
+ register: false,
11531
+ isHidden: true
11532
+ }
11533
+ ).attachSignal("global.meta.sync_controller.synced");
11534
+ const mapPhaseBarrierTask = CadenzaService.createUniqueMetaTask(
11535
+ "Complete map sync phase",
11536
+ (ctx) => {
11537
+ const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
11538
+ if (!syncCycleId) {
11539
+ return false;
10666
11540
  }
10667
- if (authoritativeIntents.length > 0 || changed) {
10668
- finalizeIntentSync(emit, {
10669
- ...ctx,
10670
- __authoritativeReconciliation: true
11541
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
11542
+ if (shouldTraceSyncPhase(serviceName2)) {
11543
+ console.log("[CADENZA_SYNC_PHASE_TRACE] map_barrier_check", {
11544
+ serviceName: serviceName2,
11545
+ syncCycleId,
11546
+ directionalTaskMapsSynced: this.directionalTaskMapsSynced,
11547
+ signalTaskMapsSynced: this.signalTaskMapsSynced,
11548
+ intentTaskMapsSynced: this.intentTaskMapsSynced,
11549
+ actorTaskMapsSynced: this.actorTaskMapsSynced,
11550
+ routineTaskMapsSynced: this.routineTaskMapsSynced
10671
11551
  });
10672
11552
  }
10673
- return changed;
11553
+ if (!this.directionalTaskMapsSynced || !this.signalTaskMapsSynced || !this.intentTaskMapsSynced || !this.actorTaskMapsSynced || !this.routineTaskMapsSynced) {
11554
+ return false;
11555
+ }
11556
+ if (!markCompletedSyncCycle(this.mapPhaseCompletedCycles, syncCycleId)) {
11557
+ return false;
11558
+ }
11559
+ return ctx;
10674
11560
  },
10675
- "Marks local intents as registered when authority rows already exist.",
11561
+ "Fans in map branch completion and ends the current sync cycle once every map branch is complete.",
11562
+ {
11563
+ register: false,
11564
+ isHidden: true
11565
+ }
11566
+ ).then(finishSyncTask);
11567
+ const startDirectionalTaskMapSyncTask = CadenzaService.createMetaTask(
11568
+ "Start directional task map sync",
11569
+ (ctx) => ctx,
11570
+ "Starts the directional task graph map branch for the current sync cycle.",
10676
11571
  {
10677
11572
  register: false,
10678
11573
  isHidden: true
10679
11574
  }
10680
11575
  );
10681
- const skipAuthoritativeTaskReconciliationTask = CadenzaService.createMetaTask(
10682
- "Skip authoritative task reconciliation",
10683
- () => false,
10684
- "Skips task reconciliation when no authority query task is available.",
11576
+ const startSignalTaskMapSyncTask = CadenzaService.createMetaTask(
11577
+ "Start signal task map sync",
11578
+ (ctx) => ctx,
11579
+ "Starts the signal-to-task map branch for the current sync cycle.",
10685
11580
  {
10686
11581
  register: false,
10687
11582
  isHidden: true
10688
11583
  }
10689
11584
  );
10690
- const skipAuthoritativeRoutineReconciliationTask = CadenzaService.createMetaTask(
10691
- "Skip authoritative routine reconciliation",
10692
- () => false,
10693
- "Skips routine reconciliation when no authority query task is available.",
11585
+ const startIntentTaskMapSyncTask = CadenzaService.createMetaTask(
11586
+ "Start intent task map sync",
11587
+ (ctx) => ctx,
11588
+ "Starts the intent-to-task map branch for the current sync cycle.",
10694
11589
  {
10695
11590
  register: false,
10696
11591
  isHidden: true
10697
11592
  }
10698
11593
  );
10699
- const skipAuthoritativeSignalReconciliationTask = CadenzaService.createMetaTask(
10700
- "Skip authoritative signal reconciliation",
10701
- () => false,
10702
- "Skips signal reconciliation when no authority query task is available.",
11594
+ const startActorTaskMapSyncTask = CadenzaService.createMetaTask(
11595
+ "Start actor task map sync",
11596
+ (ctx) => ctx,
11597
+ "Starts the actor-to-task map branch for the current sync cycle.",
10703
11598
  {
10704
11599
  register: false,
10705
11600
  isHidden: true
10706
11601
  }
10707
11602
  );
10708
- const skipAuthoritativeIntentReconciliationTask = CadenzaService.createMetaTask(
10709
- "Skip authoritative intent reconciliation",
10710
- () => false,
10711
- "Skips intent reconciliation when no authority query task is available.",
11603
+ const startRoutineTaskMapSyncTask = CadenzaService.createMetaTask(
11604
+ "Start routine task map sync",
11605
+ (ctx) => ctx,
11606
+ "Starts the task-to-routine map branch for the current sync cycle.",
10712
11607
  {
10713
11608
  register: false,
10714
11609
  isHidden: true
10715
11610
  }
10716
11611
  );
10717
- if (authoritativeTaskQueryGraph) {
10718
- authoritativeTaskQueryGraph.completionTask.then(
10719
- reconcileTaskRegistrationFromAuthorityTask
10720
- );
10721
- }
10722
- if (authoritativeRoutineQueryGraph) {
10723
- authoritativeRoutineQueryGraph.completionTask.then(
10724
- reconcileRoutineRegistrationFromAuthorityTask
10725
- );
10726
- }
10727
- if (authoritativeSignalQueryGraph) {
10728
- authoritativeSignalQueryGraph.completionTask.then(
10729
- reconcileSignalRegistrationFromAuthorityTask
10730
- );
10731
- }
10732
- if (authoritativeIntentQueryGraph) {
10733
- authoritativeIntentQueryGraph.completionTask.then(
10734
- reconcileIntentRegistrationFromAuthorityTask
10735
- );
10736
- }
10737
- const authoritativeRegistrationTriggers = [
10738
- "meta.service_registry.initial_sync_complete",
10739
- "meta.sync_requested",
10740
- "meta.sync_controller.synced_resource",
10741
- "meta.sync_controller.authority_registration_reconciliation_requested"
10742
- ];
10743
- CadenzaService.createMetaTask(
10744
- "Prepare authoritative task registration query",
11612
+ const primitivePhaseBarrierTask = CadenzaService.createUniqueMetaTask(
11613
+ "Complete primitive sync phase",
10745
11614
  (ctx) => {
10746
- if (!this.isCadenzaDBReady) {
11615
+ const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
11616
+ if (!syncCycleId) {
10747
11617
  return false;
10748
11618
  }
10749
- const serviceName2 = resolveSyncServiceName();
10750
- if (!serviceName2) {
11619
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
11620
+ if (shouldTraceSyncPhase(serviceName2)) {
11621
+ console.log("[CADENZA_SYNC_PHASE_TRACE] primitive_barrier_check", {
11622
+ serviceName: serviceName2,
11623
+ syncCycleId,
11624
+ tasksSynced: this.tasksSynced,
11625
+ signalsSynced: this.signalsSynced,
11626
+ intentsSynced: this.intentsSynced,
11627
+ actorsSynced: this.actorsSynced,
11628
+ routinesSynced: this.routinesSynced
11629
+ });
11630
+ }
11631
+ if (!this.tasksSynced || !this.signalsSynced || !this.intentsSynced || !this.actorsSynced || !this.routinesSynced) {
10751
11632
  return false;
10752
11633
  }
10753
- return {
10754
- ...ctx,
10755
- __syncServiceName: serviceName2,
10756
- queryData: {
10757
- filter: {
10758
- service_name: serviceName2
10759
- },
10760
- fields: ["name", "version", "service_name"]
10761
- }
10762
- };
11634
+ if (!markCompletedSyncCycle(this.primitivePhaseCompletedCycles, syncCycleId)) {
11635
+ return false;
11636
+ }
11637
+ this.directionalTaskMapsSynced = false;
11638
+ this.signalTaskMapsSynced = false;
11639
+ this.intentTaskMapsSynced = false;
11640
+ this.actorTaskMapsSynced = false;
11641
+ this.routineTaskMapsSynced = false;
11642
+ return ctx;
10763
11643
  },
10764
- "Builds the authority task query payload for the current service.",
11644
+ "Fans in primitive registration and opens the map registration phase once every primitive branch is complete.",
10765
11645
  {
10766
11646
  register: false,
10767
11647
  isHidden: true
10768
11648
  }
10769
- ).doOn(...authoritativeRegistrationTriggers).then(
10770
- authoritativeTaskQueryGraph?.entryTask ?? skipAuthoritativeTaskReconciliationTask
10771
- );
10772
- CadenzaService.createMetaTask(
10773
- "Prepare authoritative routine registration query",
11649
+ ).then(
11650
+ startDirectionalTaskMapSyncTask,
11651
+ startSignalTaskMapSyncTask,
11652
+ startIntentTaskMapSyncTask,
11653
+ startActorTaskMapSyncTask,
11654
+ startRoutineTaskMapSyncTask
11655
+ );
11656
+ gatherTaskRegistrationTask.then(primitivePhaseBarrierTask);
11657
+ gatherSignalRegistrationTask.then(primitivePhaseBarrierTask);
11658
+ gatherIntentRegistrationTask.then(primitivePhaseBarrierTask);
11659
+ gatherActorRegistrationTask.then(primitivePhaseBarrierTask);
11660
+ gatherRoutineRegistrationTask.then(primitivePhaseBarrierTask);
11661
+ const markLocalServiceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
11662
+ "Mark local service inserted for bootstrap sync",
10774
11663
  (ctx) => {
10775
- if (!this.isCadenzaDBReady) {
10776
- return false;
10777
- }
10778
11664
  const serviceName2 = resolveSyncServiceName();
10779
- if (!serviceName2) {
11665
+ const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
11666
+ if (!serviceName2 || insertedServiceName !== serviceName2) {
10780
11667
  return false;
10781
11668
  }
10782
- return {
10783
- ...ctx,
10784
- __syncServiceName: serviceName2,
10785
- queryData: {
10786
- filter: {
10787
- service_name: serviceName2
10788
- },
10789
- fields: ["name", "version", "service_name"]
10790
- }
10791
- };
11669
+ this.localServiceInserted = true;
11670
+ return true;
10792
11671
  },
10793
- "Builds the authority routine query payload for the current service.",
11672
+ "Marks that the local service row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
10794
11673
  {
10795
11674
  register: false,
10796
11675
  isHidden: true
10797
11676
  }
10798
- ).doOn(...authoritativeRegistrationTriggers).then(
10799
- authoritativeRoutineQueryGraph?.entryTask ?? skipAuthoritativeRoutineReconciliationTask
10800
- );
10801
- CadenzaService.createMetaTask(
10802
- "Prepare authoritative signal registration query",
11677
+ ).doOn("meta.service_registry.service_inserted");
11678
+ const markLocalServiceInstanceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
11679
+ "Mark local service instance inserted for bootstrap sync",
10803
11680
  (ctx) => {
10804
- if (!this.isCadenzaDBReady) {
11681
+ const serviceName2 = resolveSyncServiceName();
11682
+ const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
11683
+ if (!serviceName2 || insertedServiceName !== serviceName2) {
10805
11684
  return false;
10806
11685
  }
10807
- return {
10808
- ...ctx,
10809
- queryData: {
10810
- fields: ["name"]
10811
- }
10812
- };
11686
+ this.localServiceInstanceInserted = true;
11687
+ return true;
10813
11688
  },
10814
- "Builds the authority signal query payload for local reconciliation.",
11689
+ "Marks that the local service instance row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
10815
11690
  {
10816
11691
  register: false,
10817
11692
  isHidden: true
10818
11693
  }
10819
- ).doOn(...authoritativeRegistrationTriggers).then(
10820
- authoritativeSignalQueryGraph?.entryTask ?? skipAuthoritativeSignalReconciliationTask
10821
- );
10822
- CadenzaService.createMetaTask(
10823
- "Prepare authoritative intent registration query",
11694
+ ).doOn("meta.service_registry.instance_inserted");
11695
+ const startBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
11696
+ "Start bootstrap graph sync",
10824
11697
  (ctx) => {
10825
- if (!this.isCadenzaDBReady) {
11698
+ const now = Date.now();
11699
+ const serviceName2 = resolveSyncServiceName();
11700
+ const serviceInstanceId = CadenzaService.serviceRegistry.serviceInstanceId;
11701
+ if (!serviceName2 || !serviceInstanceId) {
11702
+ return false;
11703
+ }
11704
+ if (!this.localServiceInserted) {
11705
+ return false;
11706
+ }
11707
+ if (!this.localServiceInstanceInserted) {
10826
11708
  return false;
10827
11709
  }
11710
+ if (!ServiceRegistry.instance.hasLocalInstanceRegistered()) {
11711
+ return false;
11712
+ }
11713
+ if (this.activeSyncCycleId) {
11714
+ const activeCycleAgeMs = now - this.activeSyncCycleStartedAt;
11715
+ if (activeCycleAgeMs < BOOTSTRAP_SYNC_STALE_CYCLE_MS) {
11716
+ this.pendingBootstrapSyncRerun = true;
11717
+ return false;
11718
+ }
11719
+ }
11720
+ const syncCycleId = `${now}-${++this.syncCycleCounter}`;
11721
+ this.activeSyncCycleId = syncCycleId;
11722
+ this.activeSyncCycleStartedAt = now;
11723
+ this.pendingBootstrapSyncRerun = false;
11724
+ this.tasksSynced = false;
11725
+ this.signalsSynced = false;
11726
+ this.intentsSynced = false;
11727
+ this.actorsSynced = false;
11728
+ this.routinesSynced = false;
10828
11729
  return {
10829
11730
  ...ctx,
10830
- queryData: {
10831
- fields: ["name"]
10832
- }
11731
+ __syncing: true,
11732
+ __syncCycleId: syncCycleId,
11733
+ __serviceName: serviceName2,
11734
+ __serviceInstanceId: serviceInstanceId
10833
11735
  };
10834
11736
  },
10835
- "Builds the authority intent query payload for local reconciliation.",
11737
+ "Starts a deterministic bootstrap sync cycle once the local service instance exists.",
10836
11738
  {
10837
11739
  register: false,
10838
11740
  isHidden: true
10839
11741
  }
10840
- ).doOn(...authoritativeRegistrationTriggers).then(
10841
- authoritativeIntentQueryGraph?.entryTask ?? skipAuthoritativeIntentReconciliationTask
10842
- );
10843
- CadenzaService.signalBroker.getSignalsTask.clone().doOn(
10844
- "meta.sync_controller.sync_tick",
10845
- "meta.service_registry.initial_sync_complete",
10846
- "meta.sync_requested"
10847
- ).then(this.splitSignalsTask);
10848
- CadenzaService.registry.getAllTasks.clone().doOn(
10849
- "meta.sync_controller.sync_tick",
10850
- "meta.sync_controller.synced_signals",
10851
- "meta.sync_requested"
10852
- ).then(this.splitTasksForRegistration);
10853
- CadenzaService.createMetaTask("Get all intents", (ctx) => {
10854
- return {
10855
- ...ctx,
10856
- intents: Array.from(CadenzaService.inquiryBroker.intents.values())
10857
- };
10858
- }).doOn(
10859
- "meta.sync_controller.sync_tick",
10860
- "meta.service_registry.initial_sync_complete",
10861
- "meta.sync_requested"
10862
- ).then(this.splitIntentsTask);
10863
- CadenzaService.registry.getAllRoutines.clone().doOn(
10864
- "meta.sync_controller.sync_tick",
10865
- "meta.service_registry.initial_sync_complete",
10866
- "meta.sync_requested"
10867
- ).then(this.splitRoutinesTask);
10868
- CadenzaService.createMetaTask("Get all actors", (ctx) => {
10869
- return {
10870
- ...ctx,
10871
- actors: CadenzaService.getAllActors()
10872
- };
10873
- }).doOn(
11742
+ ).doOn(
11743
+ "meta.service_registry.service_inserted",
11744
+ "meta.service_registry.instance_inserted",
10874
11745
  "meta.sync_controller.sync_tick",
10875
- "meta.service_registry.initial_sync_complete",
10876
11746
  "meta.sync_requested"
10877
- ).then(this.splitActorsForRegistration);
10878
- CadenzaService.createMetaTask("Get registered task for task graph sync", (ctx) => {
10879
- const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
10880
- if (!task) {
10881
- return false;
11747
+ );
11748
+ const startTaskPrimitiveSyncTask = CadenzaService.createMetaTask(
11749
+ "Start task primitive sync",
11750
+ (ctx) => ctx,
11751
+ "Starts the task registration branch for the current sync cycle.",
11752
+ {
11753
+ register: false,
11754
+ isHidden: true
10882
11755
  }
10883
- return {
10884
- ...ctx,
10885
- task
10886
- };
10887
- }).doOn("meta.sync_controller.task_registered").then(
10888
- this.registerTaskMapTask,
10889
- this.registerDeputyRelationshipTask
10890
11756
  );
10891
- CadenzaService.registry.doForEachTask.clone().doOn(
10892
- "meta.sync_controller.synced_signals",
10893
- "meta.sync_controller.synced_tasks",
10894
- "meta.sync_requested"
10895
- ).then(this.registerSignalToTaskMapTask);
10896
- CadenzaService.createMetaTask("Get registered task for signal sync", (ctx) => {
10897
- const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
10898
- if (!task) {
10899
- return false;
11757
+ const startSignalPrimitiveSyncTask = CadenzaService.createMetaTask(
11758
+ "Start signal primitive sync",
11759
+ (ctx) => ctx,
11760
+ "Starts the signal registration branch for the current sync cycle.",
11761
+ {
11762
+ register: false,
11763
+ isHidden: true
10900
11764
  }
10901
- return {
10902
- ...ctx,
10903
- task
10904
- };
10905
- }).doOn("meta.sync_controller.task_registered").then(this.registerSignalToTaskMapTask);
10906
- CadenzaService.registry.doForEachTask.clone().doOn(
10907
- "meta.sync_controller.synced_intents",
10908
- "meta.sync_controller.synced_tasks",
10909
- "meta.sync_requested"
10910
- ).then(this.registerIntentToTaskMapTask);
10911
- CadenzaService.createMetaTask("Get registered task for intent sync", (ctx) => {
10912
- const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
10913
- if (!task) {
10914
- return false;
11765
+ );
11766
+ const startIntentPrimitiveSyncTask = CadenzaService.createMetaTask(
11767
+ "Start intent primitive sync",
11768
+ (ctx) => ctx,
11769
+ "Starts the intent registration branch for the current sync cycle.",
11770
+ {
11771
+ register: false,
11772
+ isHidden: true
10915
11773
  }
10916
- return {
10917
- ...ctx,
10918
- task
10919
- };
10920
- }).doOn("meta.sync_controller.task_registered").then(this.registerIntentToTaskMapTask);
10921
- CadenzaService.registry.doForEachTask.clone().doOn(
10922
- "meta.sync_controller.synced_actors",
10923
- "meta.sync_controller.synced_tasks",
10924
- "meta.sync_requested"
10925
- ).then(this.registerActorTaskMapTask);
10926
- CadenzaService.createMetaTask("Get registered task for actor sync", (ctx) => {
10927
- const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
10928
- if (!task) {
10929
- return false;
11774
+ );
11775
+ const startActorPrimitiveSyncTask = CadenzaService.createMetaTask(
11776
+ "Start actor primitive sync",
11777
+ (ctx) => ctx,
11778
+ "Starts the actor registration branch for the current sync cycle.",
11779
+ {
11780
+ register: false,
11781
+ isHidden: true
10930
11782
  }
10931
- return {
11783
+ );
11784
+ const startRoutinePrimitiveSyncTask = CadenzaService.createMetaTask(
11785
+ "Start routine primitive sync",
11786
+ (ctx) => ctx,
11787
+ "Starts the routine registration branch for the current sync cycle.",
11788
+ {
11789
+ register: false,
11790
+ isHidden: true
11791
+ }
11792
+ );
11793
+ startBootstrapSyncTask.then(
11794
+ startTaskPrimitiveSyncTask,
11795
+ startSignalPrimitiveSyncTask,
11796
+ startIntentPrimitiveSyncTask,
11797
+ startActorPrimitiveSyncTask,
11798
+ startRoutinePrimitiveSyncTask
11799
+ );
11800
+ const getAllTasksForSyncTask = CadenzaService.registry.getAllTasks.clone();
11801
+ startTaskPrimitiveSyncTask.then(
11802
+ getAllTasksForSyncTask,
11803
+ gatherTaskRegistrationTask
11804
+ );
11805
+ getAllTasksForSyncTask.then(this.splitTasksForRegistration);
11806
+ const getSignalsForSyncTask = CadenzaService.signalBroker.getSignalsTask.clone();
11807
+ startSignalPrimitiveSyncTask.then(
11808
+ getSignalsForSyncTask,
11809
+ gatherSignalRegistrationTask
11810
+ );
11811
+ getSignalsForSyncTask.then(this.splitSignalsTask);
11812
+ const getAllIntentsForSyncTask = CadenzaService.createUniqueMetaTask(
11813
+ "Get all intents for sync",
11814
+ (ctx) => ({
10932
11815
  ...ctx,
10933
- task
10934
- };
10935
- }).doOn("meta.sync_controller.task_registered").then(
10936
- CadenzaService.createMetaTask(
10937
- "Ensure actor and task sync ready from task registration",
10938
- (ctx) => {
10939
- if (!this.tasksSynced || !this.actorsSynced) {
10940
- return false;
10941
- }
10942
- return ctx;
10943
- }
10944
- ).then(this.registerActorTaskMapTask)
11816
+ intents: Array.from(CadenzaService.inquiryBroker.intents.values()).filter(
11817
+ (intent) => isRegistrableLocalIntentDefinition(intent)
11818
+ )
11819
+ }),
11820
+ "Collects local intents for the primitive sync phase.",
11821
+ {
11822
+ register: false,
11823
+ isHidden: true
11824
+ }
10945
11825
  );
10946
- CadenzaService.registry.getAllRoutines.clone().doOn(
10947
- "meta.sync_controller.synced_routines",
10948
- "meta.sync_controller.synced_tasks",
10949
- "meta.sync_requested"
10950
- ).then(
10951
- CadenzaService.createMetaTask(
10952
- "Ensure routine and task sync ready",
10953
- (ctx) => {
10954
- if (!this.tasksSynced || !this.routinesSynced) {
10955
- return false;
10956
- }
10957
- return ctx;
10958
- }
10959
- ).then(this.splitTasksInRoutines)
11826
+ startIntentPrimitiveSyncTask.then(
11827
+ getAllIntentsForSyncTask,
11828
+ gatherIntentRegistrationTask
10960
11829
  );
10961
- CadenzaService.createMetaTask("Finish sync", (ctx, emit) => {
10962
- emit("global.meta.sync_controller.synced", {
10963
- data: {
10964
- is_active: true,
10965
- is_non_responsive: false,
10966
- is_blocked: false,
10967
- last_active: formatTimestamp(Date.now())
10968
- },
10969
- filter: {
10970
- uuid: CadenzaService.serviceRegistry.serviceInstanceId
11830
+ getAllIntentsForSyncTask.then(this.splitIntentsTask);
11831
+ const getAllActorsForSyncTask = CadenzaService.createUniqueMetaTask(
11832
+ "Get all actors for sync",
11833
+ (ctx) => ({
11834
+ ...ctx,
11835
+ actors: CadenzaService.getAllActors()
11836
+ }),
11837
+ "Collects local actors for the primitive sync phase.",
11838
+ {
11839
+ register: false,
11840
+ isHidden: true
11841
+ }
11842
+ );
11843
+ startActorPrimitiveSyncTask.then(
11844
+ getAllActorsForSyncTask,
11845
+ gatherActorRegistrationTask
11846
+ );
11847
+ getAllActorsForSyncTask.then(this.splitActorsForRegistration);
11848
+ const getAllRoutinesForSyncTask = CadenzaService.registry.getAllRoutines.clone();
11849
+ startRoutinePrimitiveSyncTask.then(
11850
+ getAllRoutinesForSyncTask,
11851
+ gatherRoutineRegistrationTask
11852
+ );
11853
+ getAllRoutinesForSyncTask.then(this.splitRoutinesTask);
11854
+ const iterateTasksForDirectionalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
11855
+ startDirectionalTaskMapSyncTask.then(
11856
+ iterateTasksForDirectionalTaskMapSyncTask,
11857
+ gatherDirectionalTaskMapRegistrationTask
11858
+ );
11859
+ iterateTasksForDirectionalTaskMapSyncTask.then(this.registerTaskMapTask);
11860
+ recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);
11861
+ gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11862
+ const iterateTasksForSignalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
11863
+ startSignalTaskMapSyncTask.then(
11864
+ iterateTasksForSignalTaskMapSyncTask,
11865
+ gatherSignalTaskMapRegistrationTask
11866
+ );
11867
+ iterateTasksForSignalTaskMapSyncTask.then(this.registerSignalToTaskMapTask);
11868
+ registerSignalTask.then(gatherSignalTaskMapRegistrationTask);
11869
+ gatherSignalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11870
+ const iterateTasksForIntentTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
11871
+ startIntentTaskMapSyncTask.then(
11872
+ iterateTasksForIntentTaskMapSyncTask,
11873
+ gatherIntentTaskMapRegistrationTask
11874
+ );
11875
+ iterateTasksForIntentTaskMapSyncTask.then(this.registerIntentToTaskMapTask);
11876
+ registerIntentTask.then(gatherIntentTaskMapRegistrationTask);
11877
+ gatherIntentTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11878
+ const iterateTasksForActorTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
11879
+ startActorTaskMapSyncTask.then(
11880
+ iterateTasksForActorTaskMapSyncTask,
11881
+ gatherActorTaskMapRegistrationTask
11882
+ );
11883
+ iterateTasksForActorTaskMapSyncTask.then(this.registerActorTaskMapTask);
11884
+ recordActorTaskMapRegistrationTask.then(gatherActorTaskMapRegistrationTask);
11885
+ gatherActorTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11886
+ const getAllRoutinesForTaskMapSyncTask = CadenzaService.registry.getAllRoutines.clone();
11887
+ startRoutineTaskMapSyncTask.then(
11888
+ getAllRoutinesForTaskMapSyncTask,
11889
+ gatherRoutineTaskMapRegistrationTask
11890
+ );
11891
+ getAllRoutinesForTaskMapSyncTask.then(this.splitTasksInRoutines);
11892
+ registerTaskToRoutineMapTask.then(gatherRoutineTaskMapRegistrationTask);
11893
+ gatherRoutineTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11894
+ CadenzaService.createMetaTask(
11895
+ "Request sync after local service instance registration",
11896
+ (ctx) => {
11897
+ for (const delayMs of EARLY_SYNC_TICK_DELAYS_MS) {
11898
+ CadenzaService.schedule(
11899
+ "meta.sync_controller.sync_tick",
11900
+ {
11901
+ ...buildMinimalSyncSignalContext(ctx),
11902
+ __syncing: true
11903
+ },
11904
+ delayMs
11905
+ );
10971
11906
  }
10972
- });
10973
- CadenzaService.log("Synced resources...");
10974
- }).attachSignal("global.meta.sync_controller.synced").doOn("meta.sync_controller.synced_resource");
10975
- if (!this.isCadenzaDBReady) {
10976
- CadenzaService.interval(
10977
- "meta.sync_controller.sync_tick",
10978
- { __syncing: true },
10979
- 3e5,
10980
- true
10981
- );
10982
- } else {
10983
- CadenzaService.interval(
10984
- "meta.sync_controller.sync_tick",
10985
- { __syncing: true },
10986
- 18e4
10987
- );
10988
- CadenzaService.schedule(
10989
- "meta.sync_controller.sync_tick",
10990
- { __syncing: true },
10991
- 250
10992
- );
10993
- for (const delayMs of EARLY_SYNC_REQUEST_DELAYS_MS) {
10994
- CadenzaService.schedule("meta.sync_requested", { __syncing: true }, delayMs);
11907
+ return true;
11908
+ },
11909
+ "Schedules the early bootstrap sync burst after local instance registration so startup-defined primitives can converge deterministically.",
11910
+ {
11911
+ register: false,
11912
+ isHidden: true
10995
11913
  }
10996
- }
11914
+ ).doOn("meta.service_registry.instance_inserted");
11915
+ CadenzaService.interval(
11916
+ "meta.sync_controller.sync_tick",
11917
+ { __syncing: true },
11918
+ this.isCadenzaDBReady ? 18e4 : 3e5
11919
+ );
10997
11920
  }
10998
11921
  };
10999
11922
 
@@ -11167,7 +12090,53 @@ function resolveBootstrapEndpoint(options) {
11167
12090
  }
11168
12091
 
11169
12092
  // src/Cadenza.ts
12093
+ var POSTGRES_SETUP_DEBUG_ENABLED2 = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
12094
+ var DEFAULT_DEPUTY_TASK_CONCURRENCY = 50;
12095
+ var DEFAULT_DEPUTY_TASK_TIMEOUT_MS = 12e4;
12096
+ var DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY = 50;
12097
+ var DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS = 12e4;
11170
12098
  var CadenzaService = class {
12099
+ static replayRegisteredTaskIntentAssociations() {
12100
+ for (const task of this.registry.tasks.values()) {
12101
+ if (!task.register || task.isHidden || task.handlesIntents.size === 0) {
12102
+ continue;
12103
+ }
12104
+ for (const intentName of task.handlesIntents) {
12105
+ task.emitWithMetadata("meta.task.intent_associated", {
12106
+ data: {
12107
+ intentName,
12108
+ taskName: task.name,
12109
+ taskVersion: task.version
12110
+ },
12111
+ taskInstance: task,
12112
+ __isSubMeta: task.isSubMeta
12113
+ });
12114
+ }
12115
+ }
12116
+ }
12117
+ static replayRegisteredTaskSignalObservations() {
12118
+ for (const task of this.registry.tasks.values()) {
12119
+ if (!task.register || task.isHidden || task.observedSignals.size === 0) {
12120
+ continue;
12121
+ }
12122
+ for (const signalName of task.observedSignals) {
12123
+ task.emitWithMetadata("meta.task.observed_signal", {
12124
+ data: {
12125
+ signalName,
12126
+ taskName: task.name,
12127
+ taskVersion: task.version
12128
+ },
12129
+ taskInstance: task,
12130
+ signalName,
12131
+ __isSubMeta: task.isSubMeta
12132
+ });
12133
+ }
12134
+ }
12135
+ }
12136
+ static replayRegisteredTaskGraphMetadata() {
12137
+ this.replayRegisteredTaskSignalObservations();
12138
+ this.replayRegisteredTaskIntentAssociations();
12139
+ }
11171
12140
  static buildLegacyLocalCadenzaDBTaskName(tableName, operation) {
11172
12141
  const operationPrefix = operation.charAt(0).toUpperCase() + operation.slice(1);
11173
12142
  const helperSuffix = camelCase2(String(tableName ?? "").trim());
@@ -11310,6 +12279,12 @@ var CadenzaService = class {
11310
12279
  static setMode(mode) {
11311
12280
  Cadenza.setMode(mode);
11312
12281
  }
12282
+ static hasCompletedBootstrapSync() {
12283
+ return !this.serviceCreated || this.bootstrapSyncCompleted;
12284
+ }
12285
+ static markBootstrapSyncCompleted() {
12286
+ this.bootstrapSyncCompleted = true;
12287
+ }
11313
12288
  /**
11314
12289
  * Emits a signal with the specified data using the associated broker.
11315
12290
  *
@@ -11397,6 +12372,46 @@ var CadenzaService = class {
11397
12372
  responders: statuses
11398
12373
  };
11399
12374
  }
12375
+ static shouldPersistInquiry(inquiry, _context) {
12376
+ return !isMetaIntentName(inquiry);
12377
+ }
12378
+ static splitInquiryPersistenceContext(context) {
12379
+ const businessContext = {};
12380
+ const metadata = context?.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
12381
+ for (const [key, value] of Object.entries(context ?? {})) {
12382
+ if (key === "__metadata") {
12383
+ continue;
12384
+ }
12385
+ if (key.startsWith("__")) {
12386
+ metadata[key] = value;
12387
+ continue;
12388
+ }
12389
+ businessContext[key] = value;
12390
+ }
12391
+ return {
12392
+ context: businessContext,
12393
+ metadata
12394
+ };
12395
+ }
12396
+ static buildInquiryPersistenceStartData(inquiryId, inquiry, context, startedAt) {
12397
+ const normalizedTaskVersion = Number(context?.__inquirySourceTaskVersion);
12398
+ const { context: inquiryContext, metadata } = this.splitInquiryPersistenceContext(context);
12399
+ return {
12400
+ uuid: inquiryId,
12401
+ name: inquiry,
12402
+ taskName: typeof context?.__inquirySourceTaskName === "string" ? context.__inquirySourceTaskName : null,
12403
+ taskVersion: Number.isFinite(normalizedTaskVersion) && normalizedTaskVersion > 0 ? normalizedTaskVersion : null,
12404
+ taskExecutionId: typeof context?.__inquirySourceTaskExecutionId === "string" ? context.__inquirySourceTaskExecutionId : null,
12405
+ serviceName: this.serviceRegistry.serviceName,
12406
+ serviceInstanceId: this.serviceRegistry.serviceInstanceId,
12407
+ executionTraceId: typeof (context?.__metadata?.__executionTraceId ?? context?.__executionTraceId) === "string" ? context.__metadata?.__executionTraceId ?? context.__executionTraceId : null,
12408
+ routineExecutionId: typeof context?.__inquirySourceRoutineExecutionId === "string" ? context.__inquirySourceRoutineExecutionId : null,
12409
+ context: inquiryContext,
12410
+ metadata,
12411
+ isMeta: false,
12412
+ sentAt: formatTimestamp(startedAt)
12413
+ };
12414
+ }
11400
12415
  static async inquire(inquiry, context, options = {}) {
11401
12416
  this.bootstrap();
11402
12417
  const hydratedResult = this.consumeHydratedInquiryResult(
@@ -11411,6 +12426,20 @@ var CadenzaService = class {
11411
12426
  descriptor: this.getInquiryResponderDescriptor(task)
11412
12427
  })) : [];
11413
12428
  const isMetaInquiry = isMetaIntentName(inquiry);
12429
+ const startedAt = Date.now();
12430
+ const persistInquiry = this.shouldPersistInquiry(inquiry, context);
12431
+ const logicalInquiryId = persistInquiry ? uuid6() : null;
12432
+ const inquiryStartData = logicalInquiryId ? this.buildInquiryPersistenceStartData(
12433
+ logicalInquiryId,
12434
+ inquiry,
12435
+ context,
12436
+ startedAt
12437
+ ) : null;
12438
+ if (inquiryStartData) {
12439
+ this.emit("meta.inquiry_broker.inquiry_started", {
12440
+ data: inquiryStartData
12441
+ });
12442
+ }
11414
12443
  const responders = allResponders.filter(({ task, descriptor }) => {
11415
12444
  const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);
11416
12445
  if (shouldExecute) {
@@ -11445,6 +12474,21 @@ var CadenzaService = class {
11445
12474
  durationMs: 0,
11446
12475
  responders: []
11447
12476
  };
12477
+ if (logicalInquiryId) {
12478
+ this.emit("meta.inquiry_broker.inquiry_completed", {
12479
+ data: {
12480
+ fulfilledAt: formatTimestamp(startedAt),
12481
+ duration: 0,
12482
+ metadata: {
12483
+ ...inquiryStartData?.metadata ?? {},
12484
+ inquiryMeta
12485
+ }
12486
+ },
12487
+ filter: {
12488
+ uuid: logicalInquiryId
12489
+ }
12490
+ });
12491
+ }
11448
12492
  if (options.requireComplete) {
11449
12493
  throw {
11450
12494
  __inquiryMeta: inquiryMeta,
@@ -11460,7 +12504,6 @@ var CadenzaService = class {
11460
12504
  const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;
11461
12505
  const requireComplete = options.requireComplete ?? false;
11462
12506
  const perResponderTimeoutMs = options.perResponderTimeoutMs;
11463
- const startedAt = Date.now();
11464
12507
  const statuses = [];
11465
12508
  const statusByTask = /* @__PURE__ */ new Map();
11466
12509
  for (const responder of responders) {
@@ -11506,10 +12549,26 @@ var CadenzaService = class {
11506
12549
  statuses,
11507
12550
  allResponders.length
11508
12551
  );
12552
+ const finishedAt = Date.now();
11509
12553
  const responseContext = {
11510
12554
  ...mergedContext,
11511
12555
  __inquiryMeta: inquiryMeta
11512
12556
  };
12557
+ if (logicalInquiryId) {
12558
+ this.emit("meta.inquiry_broker.inquiry_completed", {
12559
+ data: {
12560
+ fulfilledAt: formatTimestamp(finishedAt),
12561
+ duration: finishedAt - startedAt,
12562
+ metadata: {
12563
+ ...inquiryStartData?.metadata ?? {},
12564
+ inquiryMeta
12565
+ }
12566
+ },
12567
+ filter: {
12568
+ uuid: logicalInquiryId
12569
+ }
12570
+ });
12571
+ }
11513
12572
  if (requireComplete && (timedOut || inquiryMeta.failed > 0 || inquiryMeta.timedOut > 0 || inquiryMeta.pending > 0)) {
11514
12573
  reject({
11515
12574
  ...responseContext,
@@ -11525,7 +12584,7 @@ var CadenzaService = class {
11525
12584
  }
11526
12585
  for (const responder of responders) {
11527
12586
  const { task, descriptor } = responder;
11528
- const inquiryId = uuid6();
12587
+ const responderInquiryId = uuid6();
11529
12588
  startTimeByTask.set(task, Date.now());
11530
12589
  const resolverTask = this.createEphemeralMetaTask(
11531
12590
  `Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
@@ -11553,11 +12612,12 @@ var CadenzaService = class {
11553
12612
  },
11554
12613
  "Resolves distributed inquiry responder result",
11555
12614
  { register: false }
11556
- ).doOn(`meta.node.graph_completed:${inquiryId}`);
12615
+ ).doOn(`meta.node.graph_completed:${responderInquiryId}`);
11557
12616
  resolverTasks.push(resolverTask);
11558
12617
  const executionContext = {
11559
12618
  ...context,
11560
- __routineExecId: inquiryId,
12619
+ ...logicalInquiryId ? { __inquiryId: logicalInquiryId } : {},
12620
+ __routineExecId: responderInquiryId,
11561
12621
  __isInquiry: true
11562
12622
  };
11563
12623
  if (perResponderTimeoutMs !== void 0) {
@@ -11719,8 +12779,8 @@ var CadenzaService = class {
11719
12779
  this.validateName(routineName);
11720
12780
  const name = `${routineName} (Proxy)`;
11721
12781
  options = {
11722
- concurrency: 100,
11723
- timeout: 0,
12782
+ concurrency: DEFAULT_DEPUTY_TASK_CONCURRENCY,
12783
+ timeout: DEFAULT_DEPUTY_TASK_TIMEOUT_MS,
11724
12784
  register: true,
11725
12785
  isUnique: false,
11726
12786
  isMeta: false,
@@ -11827,8 +12887,8 @@ var CadenzaService = class {
11827
12887
  return;
11828
12888
  }
11829
12889
  options = {
11830
- concurrency: 100,
11831
- timeout: 0,
12890
+ concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
12891
+ timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
11832
12892
  register: true,
11833
12893
  isUnique: false,
11834
12894
  isMeta: true,
@@ -11889,8 +12949,8 @@ var CadenzaService = class {
11889
12949
  const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;
11890
12950
  const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;
11891
12951
  options = {
11892
- concurrency: 100,
11893
- timeout: 0,
12952
+ concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
12953
+ timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
11894
12954
  register: true,
11895
12955
  isUnique: false,
11896
12956
  isMeta: false,
@@ -12034,8 +13094,10 @@ var CadenzaService = class {
12034
13094
  this.validateName(serviceName);
12035
13095
  this.validateServiceName(serviceName);
12036
13096
  const serviceId = options.customServiceId ?? uuid6();
13097
+ this.bootstrapSyncCompleted = false;
12037
13098
  this.serviceRegistry.serviceName = serviceName;
12038
13099
  this.serviceRegistry.serviceInstanceId = serviceId;
13100
+ this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;
12039
13101
  this.setHydrationResults(options.hydration);
12040
13102
  const explicitFrontendMode = options.isFrontend;
12041
13103
  options = {
@@ -12064,6 +13126,23 @@ var CadenzaService = class {
12064
13126
  this.serviceRegistry.useSocket = !!options.useSocket;
12065
13127
  this.serviceRegistry.retryCount = options.retryCount ?? 3;
12066
13128
  this.ensureTransportControllers(isFrontend);
13129
+ if (!isFrontend) {
13130
+ this.createMetaTask(
13131
+ "Initialize graph metadata controller after initial sync",
13132
+ () => {
13133
+ this.markBootstrapSyncCompleted();
13134
+ GraphMetadataController.instance;
13135
+ return true;
13136
+ },
13137
+ "Delays direct graph-metadata registration until the bootstrap sync has completed.",
13138
+ {
13139
+ register: false,
13140
+ isHidden: true
13141
+ }
13142
+ ).doOn("meta.service_registry.initial_sync_complete");
13143
+ GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB";
13144
+ GraphSyncController.instance.init();
13145
+ }
12067
13146
  const resolvedBootstrapEndpoint = options.cadenzaDB?.connect ? resolveBootstrapEndpoint({
12068
13147
  runtime: isFrontend ? "browser" : "server",
12069
13148
  bootstrap: options.bootstrap,
@@ -12137,14 +13216,14 @@ var CadenzaService = class {
12137
13216
  data: {
12138
13217
  name: serviceName,
12139
13218
  description,
12140
- displayName: options.displayName ?? "",
12141
- isMeta: options.isMeta
13219
+ display_name: options.displayName ?? "",
13220
+ is_meta: options.isMeta
12142
13221
  },
12143
13222
  __registrationData: {
12144
13223
  name: serviceName,
12145
13224
  description,
12146
- displayName: options.displayName ?? "",
12147
- isMeta: options.isMeta
13225
+ display_name: options.displayName ?? "",
13226
+ is_meta: options.isMeta
12148
13227
  },
12149
13228
  __serviceName: serviceName,
12150
13229
  __serviceInstanceId: serviceId,
@@ -12175,14 +13254,13 @@ var CadenzaService = class {
12175
13254
  );
12176
13255
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
12177
13256
  }
12178
- this.createMetaTask("Handle service setup completion", () => {
13257
+ this.createMetaTask("Handle service setup completion", (ctx, emit) => {
13258
+ if (options.cadenzaDB?.connect) {
13259
+ this.serviceRegistry.bootstrapFullSync(emit, ctx, "service_setup_completed");
13260
+ }
12179
13261
  if (isFrontend) {
12180
13262
  registerActorSessionPersistenceTasks();
12181
13263
  this.ensureFrontendSyncLoop();
12182
- } else {
12183
- GraphMetadataController.instance;
12184
- GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB" || !!options.cadenzaDB?.connect;
12185
- GraphSyncController.instance.init();
12186
13264
  }
12187
13265
  this.log("Service created.");
12188
13266
  return true;
@@ -12211,7 +13289,15 @@ var CadenzaService = class {
12211
13289
  is_blocked: false,
12212
13290
  health: {}
12213
13291
  },
12214
- __transportData: [],
13292
+ __transportData: declaredTransports.map((transport) => ({
13293
+ uuid: transport.uuid,
13294
+ service_instance_id: serviceId,
13295
+ role: transport.role,
13296
+ origin: transport.origin,
13297
+ protocols: transport.protocols ?? ["rest", "socket"],
13298
+ ...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
13299
+ ...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
13300
+ })),
12215
13301
  __serviceName: serviceName,
12216
13302
  __serviceInstanceId: serviceId,
12217
13303
  __useSocket: options.useSocket,
@@ -12328,10 +13414,35 @@ var CadenzaService = class {
12328
13414
  registration.actorName
12329
13415
  );
12330
13416
  const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;
13417
+ const traceSetupDoneTaskName = `Trace database service ${name} setup done`;
13418
+ if (POSTGRES_SETUP_DEBUG_ENABLED2 && !this.get(traceSetupDoneTaskName)) {
13419
+ this.createMetaTask(
13420
+ traceSetupDoneTaskName,
13421
+ (ctx) => {
13422
+ console.log("[CADENZA_POSTGRES_SETUP_DEBUG] setup_done_signal_observed", {
13423
+ serviceName: name,
13424
+ actorName: registration.actorName,
13425
+ payloadKeys: Object.keys(ctx ?? {})
13426
+ });
13427
+ return true;
13428
+ },
13429
+ "Debug trace for PostgresActor setup-done signal delivery.",
13430
+ { isHidden: true, register: false }
13431
+ ).doOn(registration.setupDoneSignal);
13432
+ }
12331
13433
  if (!this.get(createServiceTaskName)) {
12332
13434
  this.createMetaTask(
12333
13435
  createServiceTaskName,
12334
13436
  () => {
13437
+ if (POSTGRES_SETUP_DEBUG_ENABLED2) {
13438
+ console.log(
13439
+ "[CADENZA_POSTGRES_SETUP_DEBUG] create_database_service_task_fired",
13440
+ {
13441
+ serviceName: name,
13442
+ actorName: registration.actorName
13443
+ }
13444
+ );
13445
+ }
12335
13446
  this.createCadenzaService(name, description, serviceOptions);
12336
13447
  return true;
12337
13448
  },
@@ -12863,6 +13974,7 @@ var CadenzaService = class {
12863
13974
  this.serviceRegistry?.reset();
12864
13975
  this.isBootstrapped = false;
12865
13976
  this.serviceCreated = false;
13977
+ this.bootstrapSyncCompleted = false;
12866
13978
  this.defaultDatabaseServiceName = null;
12867
13979
  this.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
12868
13980
  this.hydratedInquiryResults = /* @__PURE__ */ new Map();
@@ -12871,6 +13983,7 @@ var CadenzaService = class {
12871
13983
  };
12872
13984
  CadenzaService.isBootstrapped = false;
12873
13985
  CadenzaService.serviceCreated = false;
13986
+ CadenzaService.bootstrapSyncCompleted = false;
12874
13987
  CadenzaService.defaultDatabaseServiceName = null;
12875
13988
  CadenzaService.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
12876
13989
  CadenzaService.hydratedInquiryResults = /* @__PURE__ */ new Map();