From f6eb80141c001402ce41033ba49ec5eb6c167bb3 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Thu, 23 Apr 2026 14:57:50 +0100 Subject: [PATCH 01/10] create a horrible test that reproduces the issue! --- .../ws-worker/test/api/process-event.test.ts | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/packages/ws-worker/test/api/process-event.test.ts b/packages/ws-worker/test/api/process-event.test.ts index d554063f4..8f7203eff 100644 --- a/packages/ws-worker/test/api/process-event.test.ts +++ b/packages/ws-worker/test/api/process-event.test.ts @@ -378,6 +378,103 @@ test('should send a batch on interrupt with an async queue', async (t) => { }); }); +// debugging +/** + * this test sort of works now + * + * it send 100 events (maybe more) and expects them all to be received + * But it fails because sometimes events are dropped + * sometimes it just doesn't exit either + * + * I'd like to tidy this somehow + */ +test.only('!!!', async (t) => { + t.timeout(1000 * 30) + return new Promise((resolve) => { + let count = 0; + let didStart; + let done = false; + const events = []; + + const maybeFinish = (evt) => { + if (done && evt.id === count) { + console.log('>>> finishing', evt.id) + console.log(count, events.length) + console.log(events) + + let prevId= 0; + for(const e of events) { + if (e.id == prevId + 1) { + prevId++ + } else { + console.log('fail on ', e) + + t.fail() + resolve() + break; + } + } + resolve() + } + } + + const callbacks = createCallbacks({ + start: (c, e) => { + events.push(e) + console.log('start') + maybeFinish(e) + }, + end: (c, e) => { + events.push(e) + console.log('end') + maybeFinish(e) + }, + test: (_context: any, evt: any) => { + events.push(...evt) + console.log('test', evt.length) + console.log(evt.at(-1)) + maybeFinish(evt.pop()) // send the last one + }, + }); + + const engine = createFakeEngine(); + const context: any = { + logger, + }; + + eventProcessor(engine, context, callbacks, { + events: ['test', 'start', 'end'], + batch: { test: true }, + batchLimit: 6, + batchInterval: 100, + }); + + // randomly send events at high volume + // every start should be paired with an end + while(count < 100 || !didStart) { + count++; + + if (Math.random() < 0.8) { + engine.emit('test', {id: count }) + } else { + if (didStart) { + engine.emit('end', {id: count }) + didStart = false; + } else { + engine.emit('start', {id: count }) + didStart = true; + } + } + } + done = true; + + // // TODO assert event order is correct + // t.pass() + // resolve() + + }); +}); + test('should continue processing if a callback throws', async (t) => { const result: number[] = []; const callbacks = createCallbacks({ From f48848e9a4cf17b5d5efbf99f4ee70aebd6571ff Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Thu, 23 Apr 2026 15:27:37 +0100 Subject: [PATCH 02/10] nicer tests --- .../ws-worker/test/api/process-event.test.ts | 113 +++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/packages/ws-worker/test/api/process-event.test.ts b/packages/ws-worker/test/api/process-event.test.ts index 8f7203eff..436d0e375 100644 --- a/packages/ws-worker/test/api/process-event.test.ts +++ b/packages/ws-worker/test/api/process-event.test.ts @@ -378,6 +378,117 @@ test('should send a batch on interrupt with an async queue', async (t) => { }); }); +test('should not drop an event', async (t) => { + // const total = 1e5; // this works! + // t.timeout(1000 * 30) + + const total = 100; // this should suffice for unit tests + + t.plan(total) + return new Promise((resolve) => { + const events: any[] = []; + + const handler = (evt: any) => { + events.push(evt) + if (evt.id === total) { + let prevId= 0; + for(const e of events) { + t.is(e.id, prevId + 1) + prevId++ + } + resolve() + } + } + + const callbacks = createCallbacks({ + a: (_c: any, e: any) => { + handler(e) + }, + b: (_c: any, e: any) => { + handler(e) + }, + }); + + const engine = createFakeEngine(); + const context: any = { + logger, + }; + + eventProcessor(engine, context, callbacks, { + events: ['a', 'b'], + batchLimit: 6, + batchInterval: 100, + }); + + let count = 0; + // randomly send events at high volume + while(count < total) { + count++; + + if (Math.random() < 0.6) { + engine.emit('b', {id: count }) + } else { + engine.emit('a', {id: count }) + } + } + }); +}); + +test.only('should not drop an event in batch mode', async (t) => { + t.timeout(1000 * 30) + + const total = 100; // this should suffice for unit tests + return new Promise((resolve) => { + const events: any[] = []; + + const handler = (evt) => { + if (evt.id === total) { + let prevId= 0; + for(const e of events) { + t.is(e.id, prevId + 1) + prevId++ + } + resolve() + } + } + + const callbacks = createCallbacks({ + a: (c, e) => { + events.push(e) + handler(e) + }, + b: (_context: any, evt: any) => { + events.push(...evt) + handler(evt.pop()) + }, + }); + + const engine = createFakeEngine(); + const context: any = { + logger, + }; + + eventProcessor(engine, context, callbacks, { + events: ['a', 'b'], + batch: { b: true }, + batchLimit: 6, + batchInterval: 100, + }); + + let count = 0; + // randomly send events at high volume + while(count < total) { + count++; + + if (Math.random() < 0.8) { + engine.emit('b', {id: count }) + } else { + engine.emit('a', {id: count }) + } + } + }); +}); + // debugging /** * this test sort of works now @@ -388,7 +499,7 @@ test('should send a batch on interrupt with an async queue', async (t) => { * * I'd like to tidy this somehow */ -test.only('!!!', async (t) => { +test.skip('!!!', async (t) => { t.timeout(1000 * 30) return new Promise((resolve) => { let count = 0; From e82854efaca9ddecb8e0bd4fc6ba9bebbc0de768 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Thu, 23 Apr 2026 15:57:22 +0100 Subject: [PATCH 03/10] possible fix --- packages/ws-worker/src/api/process-events.ts | 10 +++++----- packages/ws-worker/test/api/process-event.test.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/ws-worker/src/api/process-events.ts b/packages/ws-worker/src/api/process-events.ts index 20718c32d..e84c0ca1a 100644 --- a/packages/ws-worker/src/api/process-events.ts +++ b/packages/ws-worker/src/api/process-events.ts @@ -183,12 +183,12 @@ export function eventProcessor( } }; - const addToBatch = async (event: any) => { + const addToBatch = async (event: any, triggerNext = false) => { batch.push(event); if (batch.length >= batchLimit) { // If we're at the batch limit, return right away - return sendBatch(true); + return sendBatch(triggerNext); } }; @@ -225,13 +225,13 @@ export function eventProcessor( if (batch.length >= batchLimit) { // If we're at the batch limit, return right away - return sendBatch(true); + return sendBatch(false); } } else { // If there's another pending item not a part of this batch, // just send the batch now // send the batch early - return sendBatch(true); + return sendBatch(false); } } @@ -265,7 +265,7 @@ export function eventProcessor( trace(`[${name}] executing immediately`); setImmediate(next); } else if (activeBatch === name) { - addToBatch(event); + addToBatch(event, true); queue.pop(); } else if (queue.length == 2 && batchTimeout) { trace('Sending batch early'); diff --git a/packages/ws-worker/test/api/process-event.test.ts b/packages/ws-worker/test/api/process-event.test.ts index 436d0e375..22fdcd7aa 100644 --- a/packages/ws-worker/test/api/process-event.test.ts +++ b/packages/ws-worker/test/api/process-event.test.ts @@ -434,7 +434,7 @@ test('should not drop an event', async (t) => { }); }); -test.only('should not drop an event in batch mode', async (t) => { +test('should not drop an event in batch mode', async (t) => { t.timeout(1000 * 30) const total = 100; // this should suffice for unit tests From 8695e19128e419ccd379f2db70143caf275e57c8 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Thu, 23 Apr 2026 16:22:42 +0100 Subject: [PATCH 04/10] types and remove old test --- .../ws-worker/test/api/process-event.test.ts | 101 +----------------- 1 file changed, 2 insertions(+), 99 deletions(-) diff --git a/packages/ws-worker/test/api/process-event.test.ts b/packages/ws-worker/test/api/process-event.test.ts index 22fdcd7aa..b7199caad 100644 --- a/packages/ws-worker/test/api/process-event.test.ts +++ b/packages/ws-worker/test/api/process-event.test.ts @@ -441,7 +441,7 @@ test('should not drop an event in batch mode', async (t) => { return new Promise((resolve) => { const events: any[] = []; - const handler = (evt) => { + const handler = (evt: any) => { if (evt.id === total) { let prevId= 0; for(const e of events) { @@ -453,7 +453,7 @@ test('should not drop an event in batch mode', async (t) => { } const callbacks = createCallbacks({ - a: (c, e) => { + a: (_c: any, e: any) => { events.push(e) handler(e) }, @@ -489,103 +489,6 @@ test('should not drop an event in batch mode', async (t) => { }); }); -// debugging -/** - * this test sort of works now - * - * it send 100 events (maybe more) and expects them all to be received - * But it fails because sometimes events are dropped - * sometimes it just doesn't exit either - * - * I'd like to tidy this somehow - */ -test.skip('!!!', async (t) => { - t.timeout(1000 * 30) - return new Promise((resolve) => { - let count = 0; - let didStart; - let done = false; - const events = []; - - const maybeFinish = (evt) => { - if (done && evt.id === count) { - console.log('>>> finishing', evt.id) - console.log(count, events.length) - console.log(events) - - let prevId= 0; - for(const e of events) { - if (e.id == prevId + 1) { - prevId++ - } else { - console.log('fail on ', e) - - t.fail() - resolve() - break; - } - } - resolve() - } - } - - const callbacks = createCallbacks({ - start: (c, e) => { - events.push(e) - console.log('start') - maybeFinish(e) - }, - end: (c, e) => { - events.push(e) - console.log('end') - maybeFinish(e) - }, - test: (_context: any, evt: any) => { - events.push(...evt) - console.log('test', evt.length) - console.log(evt.at(-1)) - maybeFinish(evt.pop()) // send the last one - }, - }); - - const engine = createFakeEngine(); - const context: any = { - logger, - }; - - eventProcessor(engine, context, callbacks, { - events: ['test', 'start', 'end'], - batch: { test: true }, - batchLimit: 6, - batchInterval: 100, - }); - - // randomly send events at high volume - // every start should be paired with an end - while(count < 100 || !didStart) { - count++; - - if (Math.random() < 0.8) { - engine.emit('test', {id: count }) - } else { - if (didStart) { - engine.emit('end', {id: count }) - didStart = false; - } else { - engine.emit('start', {id: count }) - didStart = true; - } - } - } - done = true; - - // // TODO assert event order is correct - // t.pass() - // resolve() - - }); -}); - test('should continue processing if a callback throws', async (t) => { const result: number[] = []; const callbacks = createCallbacks({ From 944ed19097af17fca7ad5fc324f6f10ec131f4a8 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 24 Apr 2026 11:34:58 +0100 Subject: [PATCH 05/10] runtime: ensure notify calls are awaited We added an async await to ensurePayloadSize a little while ago, but the runtime doens't actually wait for this. It's plausble that while waiting for a payload to be calculated, a step could finish and trigger the complete event early --- .changeset/hungry-bees-call.md | 5 +++++ packages/runtime/src/execute/step.ts | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/hungry-bees-call.md diff --git a/.changeset/hungry-bees-call.md b/.changeset/hungry-bees-call.md new file mode 100644 index 000000000..9db59de19 --- /dev/null +++ b/.changeset/hungry-bees-call.md @@ -0,0 +1,5 @@ +--- +'@openfn/runtime': patch +--- + +make sure that notify are properly awaited diff --git a/packages/runtime/src/execute/step.ts b/packages/runtime/src/execute/step.ts index 819c35ade..a9d1e26e8 100644 --- a/packages/runtime/src/execute/step.ts +++ b/packages/runtime/src/execute/step.ts @@ -147,7 +147,7 @@ const executeStep = async ( const jobName = job.name || job.id; // The notify events only apply to jobs - not steps - so names don't need to be changed here - notify(NOTIFY_INIT_START, { jobId }); + await notify(NOTIFY_INIT_START, { jobId }); // lazy load config and state const configuration = await loadCredentials( @@ -166,7 +166,7 @@ const executeStep = async ( plan.workflow?.credentials ); - notify(NOTIFY_INIT_COMPLETE, { + await notify(NOTIFY_INIT_COMPLETE, { jobId, duration: Date.now() - duration, }); @@ -182,7 +182,7 @@ const executeStep = async ( const startTime = Date.now(); try { // TODO include the upstream job? - notify(NOTIFY_JOB_START, { jobId }); + await notify(NOTIFY_JOB_START, { jobId }); result = await executeExpression( ctx, job.expression!, @@ -212,7 +212,7 @@ const executeStep = async ( report(state, jobId, error); next = calculateNext(step, result, logger); - notify(NOTIFY_JOB_ERROR, { + await notify(NOTIFY_JOB_ERROR, { duration: Date.now() - startTime, error, state, @@ -267,7 +267,7 @@ const executeStep = async ( } next = calculateNext(step, result, logger); - notify(NOTIFY_JOB_COMPLETE, { + await notify(NOTIFY_JOB_COMPLETE, { duration: Date.now() - duration, state: result, jobId, From 8d2954d4e79490fba140e7c51d3ea1dba65c0a89 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 24 Apr 2026 11:35:53 +0100 Subject: [PATCH 06/10] engine: return result of publish --- .changeset/strict-windows-think.md | 5 +++++ packages/engine-multi/src/worker/thread/run.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/strict-windows-think.md diff --git a/.changeset/strict-windows-think.md b/.changeset/strict-windows-think.md new file mode 100644 index 000000000..4d42790cf --- /dev/null +++ b/.changeset/strict-windows-think.md @@ -0,0 +1,5 @@ +--- +'@openfn/engine-multi': patch +--- + +Make publish() async diff --git a/packages/engine-multi/src/worker/thread/run.ts b/packages/engine-multi/src/worker/thread/run.ts index a388faf0f..483753ee1 100644 --- a/packages/engine-multi/src/worker/thread/run.ts +++ b/packages/engine-multi/src/worker/thread/run.ts @@ -81,7 +81,7 @@ register({ notify: (name: NotifyEvents, payload: any) => { // @ts-ignore const mappedPayload = eventMap[name]?.(payload) ?? payload; - publish(`worker:${name}`, { + return publish(`worker:${name}`, { workflowId: plan.id, ...mappedPayload, }); From 4a254737eb88f6f34df20c6de0e5ecac74cd80d8 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 24 Apr 2026 11:59:04 +0100 Subject: [PATCH 07/10] add debug logging --- .changeset/pretty-lines-shout.md | 5 +++++ packages/engine-multi/src/api/lifecycle.ts | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changeset/pretty-lines-shout.md diff --git a/.changeset/pretty-lines-shout.md b/.changeset/pretty-lines-shout.md new file mode 100644 index 000000000..3ef3c0df6 --- /dev/null +++ b/.changeset/pretty-lines-shout.md @@ -0,0 +1,5 @@ +--- +'@openfn/engine-multi': patch +--- + +Add debugging to for step start/complete diff --git a/packages/engine-multi/src/api/lifecycle.ts b/packages/engine-multi/src/api/lifecycle.ts index 3de02cfcd..6bbf7bc96 100644 --- a/packages/engine-multi/src/api/lifecycle.ts +++ b/packages/engine-multi/src/api/lifecycle.ts @@ -14,7 +14,6 @@ export const workflowStart = ( ) => { const { state, logger } = context; const { workflowId, threadId } = event; - logger.info('starting workflow ', workflowId); // where would this throw get caught? @@ -68,7 +67,9 @@ export const jobStart = ( context: ExecutionContext, event: internalEvents.JobStartEvent ) => { + const { logger,state} = context; const { threadId, jobId } = event; + logger.debug(`${state.id}: sending job start (step start): ${event.jobId}`) context.emit(externalEvents.JOB_START, { jobId, @@ -81,7 +82,9 @@ export const jobComplete = ( context: ExecutionContext, event: internalEvents.JobCompleteEvent ) => { + const { logger, state: runState } = context; const { threadId, state, duration, jobId, next, mem, redacted } = event; + logger.debug(`${runState.id}: sending job complete (step complete): ${event.jobId}`) context.emit(externalEvents.JOB_COMPLETE, { threadId, From 7f93ddb49320f24e3368b785be9009c54c74191c Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 24 Apr 2026 12:04:12 +0100 Subject: [PATCH 08/10] changeset --- .changeset/stale-lights-occur.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/stale-lights-occur.md diff --git a/.changeset/stale-lights-occur.md b/.changeset/stale-lights-occur.md new file mode 100644 index 000000000..24cee7694 --- /dev/null +++ b/.changeset/stale-lights-occur.md @@ -0,0 +1,5 @@ +--- +'@openfn/ws-worker': patch +--- + +Fix an issue in batch events From 49f73dc5a77b963cd76b6d9553d402512f085abe Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Mon, 27 Apr 2026 10:23:05 +0100 Subject: [PATCH 09/10] format --- packages/engine-multi/src/api/lifecycle.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/engine-multi/src/api/lifecycle.ts b/packages/engine-multi/src/api/lifecycle.ts index 6bbf7bc96..817140899 100644 --- a/packages/engine-multi/src/api/lifecycle.ts +++ b/packages/engine-multi/src/api/lifecycle.ts @@ -67,9 +67,9 @@ export const jobStart = ( context: ExecutionContext, event: internalEvents.JobStartEvent ) => { - const { logger,state} = context; + const { logger, state } = context; const { threadId, jobId } = event; - logger.debug(`${state.id}: sending job start (step start): ${event.jobId}`) + logger.debug(`${state.id}: sending job start (step start): ${event.jobId}`); context.emit(externalEvents.JOB_START, { jobId, @@ -84,7 +84,9 @@ export const jobComplete = ( ) => { const { logger, state: runState } = context; const { threadId, state, duration, jobId, next, mem, redacted } = event; - logger.debug(`${runState.id}: sending job complete (step complete): ${event.jobId}`) + logger.debug( + `${runState.id}: sending job complete (step complete): ${event.jobId}` + ); context.emit(externalEvents.JOB_COMPLETE, { threadId, From 77b89e3c00efd4d59b377d6dcd41f9fbf348b03b Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Mon, 27 Apr 2026 10:23:26 +0100 Subject: [PATCH 10/10] versions --- .changeset/hungry-bees-call.md | 5 ----- .changeset/pretty-lines-shout.md | 5 ----- .changeset/stale-lights-occur.md | 5 ----- .changeset/strict-windows-think.md | 5 ----- packages/cli/CHANGELOG.md | 8 +++++++- packages/cli/package.json | 2 +- packages/engine-multi/CHANGELOG.md | 9 +++++++++ packages/engine-multi/package.json | 2 +- packages/lightning-mock/CHANGELOG.md | 10 ++++++++++ packages/lightning-mock/package.json | 2 +- packages/runtime/CHANGELOG.md | 6 ++++++ packages/runtime/package.json | 2 +- packages/ws-worker/CHANGELOG.md | 11 +++++++++++ packages/ws-worker/package.json | 2 +- 14 files changed, 48 insertions(+), 26 deletions(-) delete mode 100644 .changeset/hungry-bees-call.md delete mode 100644 .changeset/pretty-lines-shout.md delete mode 100644 .changeset/stale-lights-occur.md delete mode 100644 .changeset/strict-windows-think.md diff --git a/.changeset/hungry-bees-call.md b/.changeset/hungry-bees-call.md deleted file mode 100644 index 9db59de19..000000000 --- a/.changeset/hungry-bees-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@openfn/runtime': patch ---- - -make sure that notify are properly awaited diff --git a/.changeset/pretty-lines-shout.md b/.changeset/pretty-lines-shout.md deleted file mode 100644 index 3ef3c0df6..000000000 --- a/.changeset/pretty-lines-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@openfn/engine-multi': patch ---- - -Add debugging to for step start/complete diff --git a/.changeset/stale-lights-occur.md b/.changeset/stale-lights-occur.md deleted file mode 100644 index 24cee7694..000000000 --- a/.changeset/stale-lights-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@openfn/ws-worker': patch ---- - -Fix an issue in batch events diff --git a/.changeset/strict-windows-think.md b/.changeset/strict-windows-think.md deleted file mode 100644 index 4d42790cf..000000000 --- a/.changeset/strict-windows-think.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@openfn/engine-multi': patch ---- - -Make publish() async diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 9bcba0386..72a7275d7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @openfn/cli +## 1.35.1 + +### Patch Changes + +- Updated dependencies [944ed19] + - @openfn/runtime@1.9.2 + ## 1.35.0 ### Minor Changes @@ -17,7 +24,6 @@ - 3918358: Override config.endpoint with one from openfn.yaml - ## 1.34.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 9ad265111..56d359232 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/cli", - "version": "1.35.0", + "version": "1.35.1", "description": "CLI devtools for the OpenFn toolchain", "engines": { "node": ">=18", diff --git a/packages/engine-multi/CHANGELOG.md b/packages/engine-multi/CHANGELOG.md index ec951f209..7cdd7b4c2 100644 --- a/packages/engine-multi/CHANGELOG.md +++ b/packages/engine-multi/CHANGELOG.md @@ -1,5 +1,14 @@ # engine-multi +## 1.11.3 + +### Patch Changes + +- 4a25473: Add debugging to for step start/complete +- 8d2954d: Make publish() async +- Updated dependencies [944ed19] + - @openfn/runtime@1.9.2 + ## 1.11.2 ### Patch Changes diff --git a/packages/engine-multi/package.json b/packages/engine-multi/package.json index 9e0ee8af5..228d90823 100644 --- a/packages/engine-multi/package.json +++ b/packages/engine-multi/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/engine-multi", - "version": "1.11.2", + "version": "1.11.3", "description": "Multi-process runtime engine", "main": "dist/index.js", "type": "module", diff --git a/packages/lightning-mock/CHANGELOG.md b/packages/lightning-mock/CHANGELOG.md index ae53dab7d..a045e37d4 100644 --- a/packages/lightning-mock/CHANGELOG.md +++ b/packages/lightning-mock/CHANGELOG.md @@ -1,5 +1,15 @@ # @openfn/lightning-mock +## 2.4.15 + +### Patch Changes + +- Updated dependencies [944ed19] +- Updated dependencies [4a25473] +- Updated dependencies [8d2954d] + - @openfn/runtime@1.9.2 + - @openfn/engine-multi@1.11.3 + ## 2.4.14 ### Patch Changes diff --git a/packages/lightning-mock/package.json b/packages/lightning-mock/package.json index b50b91962..744725e68 100644 --- a/packages/lightning-mock/package.json +++ b/packages/lightning-mock/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/lightning-mock", - "version": "2.4.14", + "version": "2.4.15", "private": true, "description": "A mock Lightning server", "main": "dist/index.js", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 0dba2afd4..fd1106b96 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # @openfn/runtime +## 1.9.2 + +### Patch Changes + +- 944ed19: make sure that notify are properly awaited + ## 1.9.1 ### Patch Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 3568d958a..4cd8172f5 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/runtime", - "version": "1.9.1", + "version": "1.9.2", "description": "Job processing runtime.", "type": "module", "exports": { diff --git a/packages/ws-worker/CHANGELOG.md b/packages/ws-worker/CHANGELOG.md index 8fef29b2e..acaf667d6 100644 --- a/packages/ws-worker/CHANGELOG.md +++ b/packages/ws-worker/CHANGELOG.md @@ -1,5 +1,16 @@ # ws-worker +## 1.24.1 + +### Patch Changes + +- 7f93ddb: Fix an issue in batch events +- Updated dependencies [944ed19] +- Updated dependencies [4a25473] +- Updated dependencies [8d2954d] + - @openfn/runtime@1.9.2 + - @openfn/engine-multi@1.11.3 + ## 1.24.0 ### Minor Changes diff --git a/packages/ws-worker/package.json b/packages/ws-worker/package.json index a70221a16..18ce60881 100644 --- a/packages/ws-worker/package.json +++ b/packages/ws-worker/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/ws-worker", - "version": "1.24.0", + "version": "1.24.1", "description": "A Websocket Worker to connect Lightning to a Runtime Engine", "main": "dist/index.js", "type": "module",