@teamscala/service-boot 0.23.287 → 0.23.288

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/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "name": "@teamscala/service-boot",
8
8
  "type": "module",
9
- "version": "0.23.287",
9
+ "version": "0.23.288",
10
10
  "sideEffects": false,
11
11
  "files": [
12
12
  "src"
@@ -225,6 +225,28 @@ export async function mountPgBoss(
225
225
  handlerSlug: config.handler_slug,
226
226
  });
227
227
  }
228
+
229
+ // A SUCCESSFUL mount emitted nothing until now, while every failure
230
+ // path above recorded an event — so the one state you most need to
231
+ // confirm ("is this job actually scheduled on this service?") was the
232
+ // only one with no evidence. Combined with resolveHandler THROWING
233
+ // into boss.work() rather than warning, that made "never scheduled"
234
+ // and "fired and threw" externally identical, and cost a
235
+ // scheduled_job relocation that had to be reverted undiagnosed on
236
+ // 2026-07-30. Emitting on success makes the mount set queryable
237
+ // (event-log-is-the-only-durable-event-log).
238
+ const mounted = jobs[jobs.length - 1];
239
+ recordEvent({
240
+ kind: "pgboss.job.mounted",
241
+ payload: {
242
+ service: ctx.serviceSlug,
243
+ slug: entry.slug,
244
+ queue: queueName,
245
+ handler: config.handler_slug,
246
+ cron: mounted?.cron ?? null,
247
+ interval_seconds: mounted?.intervalSeconds ?? null,
248
+ },
249
+ });
228
250
  } catch (err) {
229
251
  // crash-isolation for the mount path: a work()/schedule() failure
230
252
  // (e.g. DB not open, queue conflict) degrades to "this job unavailable"