Skip to content

chore(deps): bump bullmq, ioredis and eslint to their next majors - #26

Merged
FullFran merged 2 commits into
mainfrom
chore/dependency-majors
Aug 10, 2026
Merged

chore(deps): bump bullmq, ioredis and eslint to their next majors#26
FullFran merged 2 commits into
mainfrom
chore/dependency-majors

Conversation

@FullFran

Copy link
Copy Markdown
Owner

Supersedes #9, #12, #13 and #14 by landing them together.

Why one PR instead of four

The two ESLint PRs could never have passed on their own. @eslint/js@10 requires eslint@^10, so #14 (bumping @eslint/js) and #9 (bumping eslint) each fail to resolve against the other half still pinned at 9. That is exactly what the 2 red checks on each were.

BullMQ and ioredis are the same stack — BullMQ runs on ioredis. Merging them separately would produce a combination nobody tested.

The real blocker behind the ESLint upgrade

eslint-plugin-import@2.32.0 is its latest release and its peer range stops at ^9. It does not support ESLint 10 and there is no newer version. Replaced with eslint-plugin-import-x@4.17.1, the maintained fork, which accepts ^10 and exposes the same rules under the import-x/ prefix. All five rules in use were migrated; no-extraneous-dependencies — the one that keeps an undeclared import from crashing the production image — is unchanged in behaviour.

What ESLint 10 caught

Its recommended set adds preserve-caught-error, which found two scripts rethrowing without attaching the original error. Fixed with { cause: error }, not disabled — the rule was right.

The KEDA coupling, now guarded

k8s/keda/scaledobject.yaml reads the BullMQ backlog directly at bull:<queue>:wait. That coupling is invisible to TypeScript: a queue rename, or a BullMQ upgrade that changed its key layout, would leave KEDA reporting Ready=True and silently never scaling.

Verified empirically against BullMQ 6.0.9 — enqueuing two jobs on fetch-feed produces bull:fetch-feed:wait with LLEN 2, so the layout is unchanged. test/keda-scaledobject.spec.ts now asserts it, along with the Redis FQDN that the KEDA operator needs from its own namespace.

Verified locally

  • lint clean, typecheck clean, build clean
  • 585 tests passing across 35 suites
  • format:check clean

Note: package-lock.json is regenerated. npm could not resolve the ESLint pair incrementally against the existing tree.

Closes #9, closes #12, closes #13, closes #14

Lands PRs #9, #12, #13 and #14 as one change, because they cannot land
separately: @eslint/js@10 requires eslint@^10, so each Dependabot PR bumping
one half of the pair fails to resolve against the other.

eslint-plugin-import is replaced by eslint-plugin-import-x. The former stopped
at eslint ^9 -- 2.32.0 is its latest release and it does not support 10 -- so
it was the real blocker behind both eslint PRs. The maintained fork accepts
^10 and provides the same rules under the import-x/ prefix.

ESLint 10's recommended set adds preserve-caught-error, which found two places
rethrowing without attaching the original error. Fixed rather than disabled.

Adds test/keda-scaledobject.spec.ts. The KEDA ScaledObject reads the BullMQ
backlog at bull:<queue>:wait, a coupling invisible to TypeScript: a queue
rename or a BullMQ key-layout change would leave KEDA reporting Ready=True
while never scaling. Verified empirically against BullMQ 6.0.9 that the layout
is unchanged; the test now guards it.

Closes #9, closes #12, closes #13, closes #14
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

The KEDA trigger reads BullMQ's Redis keys directly, so a queue-library bump
can break autoscaling without touching anything under k8s/.
@FullFran
FullFran merged commit e4cfcea into main Aug 10, 2026
8 checks passed
@FullFran
FullFran deleted the chore/dependency-majors branch August 10, 2026 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant