From 54f8a36c95e53de85cdb770da549933a175651ac Mon Sep 17 00:00:00 2001 From: Maximiliano Salvatti <40447063+msalvatti@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:06:16 -0300 Subject: [PATCH 1/3] chore(pnpm): move to pnpm 11.20.0 and drop the setting v11 removed The pin was 11.0.0 while the 11.x line is at 11.20.0. `onlyBuiltDependencies` is gone from the workspace file: it was removed in pnpm 11 and replaced by `allowBuilds`, which this repository already declares, so the list was carrying no effect while reading as though it did. The comment above the overrides also claimed pnpm ignores the `pnpm` field of package.json "with no warning". It warns, by name and by key. Corrected rather than repeated. Nothing about the artifact changes: the lockfile is unchanged and `dist/` built under 11.20.0 is byte-identical to what 1.0.8 published. --- package.json | 4 ++-- pnpm-workspace.yaml | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index dc1c261..701b667 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@bymax-one/nest-queue", "version": "1.0.8", - "description": "NestJS dynamic module wrapping BullMQ — typed jobs, flows, job schedulers, deduplication, OpenTelemetry, graceful shutdown", + "description": "NestJS dynamic module wrapping BullMQ \u2014 typed jobs, flows, job schedulers, deduplication, OpenTelemetry, graceful shutdown", "author": "Bymax One ", "license": "MIT", "homepage": "https://github.com/bymaxone/nest-queue#readme", @@ -146,7 +146,7 @@ "prettier --write" ] }, - "packageManager": "pnpm@11.0.0", + "packageManager": "pnpm@11.20.0", "engines": { "node": ">=24.0.0" }, diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 440f974..6530bf0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,10 +3,9 @@ packages: - 'test/consumer-app' verifyDepsBeforeRun: false -onlyBuiltDependencies: - - esbuild - - msgpackr-extract - - unrs-resolver +# `allowBuilds` is the only spelling pnpm 11 reads: onlyBuiltDependencies, +# neverBuiltDependencies and their siblings were removed in v11 and replaced by +# this map. An unlisted package counts as unreviewed and its scripts are denied. allowBuilds: esbuild: true msgpackr-extract: true @@ -16,8 +15,8 @@ allowBuilds: ssh2: false # Forced versions, for two distinct reasons. These live here and NOT in -# package.json: since pnpm 11 the `pnpm` field of package.json is ignored outright, -# with no warning, so an override placed there silently does nothing. +# package.json: pnpm 11 no longer reads the `pnpm` field of package.json, so an +# override placed there does nothing — it warns, but it does nothing. # # 1. `bullmq` and `ioredis` are collapsed to ONE copy across the workspace. BullMQ's # `ConnectionOptions` accepts an ioredis `Redis`, and that assignment typechecks From a2441b0e5bea16ef8097e1e28c1f096b68db7f67 Mon Sep 17 00:00:00 2001 From: Maximiliano Salvatti <40447063+msalvatti@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:26:49 -0300 Subject: [PATCH 2/3] fix: restore the literal characters in the package description The migration script serialized package.json without `ensure_ascii=False`, so the em dash in the description came back as `\u2014`. The parsed value is identical and npm was never going to show anything different, but the file got harder to read for no reason connected to this change. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 701b667..49de2b8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@bymax-one/nest-queue", "version": "1.0.8", - "description": "NestJS dynamic module wrapping BullMQ \u2014 typed jobs, flows, job schedulers, deduplication, OpenTelemetry, graceful shutdown", + "description": "NestJS dynamic module wrapping BullMQ — typed jobs, flows, job schedulers, deduplication, OpenTelemetry, graceful shutdown", "author": "Bymax One ", "license": "MIT", "homepage": "https://github.com/bymaxone/nest-queue#readme", From cc6e86ba7047458590e0e6e602f7f18918e38b6d Mon Sep 17 00:00:00 2001 From: Maximiliano Salvatti <40447063+msalvatti@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:30:47 -0300 Subject: [PATCH 3/3] docs: align the pnpm version stated in the planning docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These documents named the old pin, and one of them named it as a requirement — "pnpm@10.8.1 is required; using a different version may break lockfile resolution". After the migration that instruction sends a reader to the wrong toolchain and contradicts what the repository declares. Only the version string changes. --- docs/development_plan.md | 2 +- docs/tasks/phase-01-foundation.md | 24 ++++++++++++------------ docs/technical_specification.md | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/development_plan.md b/docs/development_plan.md index c6a7836..ade5e17 100644 --- a/docs/development_plan.md +++ b/docs/development_plan.md @@ -277,7 +277,7 @@ Copy from `nest-auth/` / `nest-logger/` and adapt (`nest-auth` → `nest-queue`, "peerDependenciesMeta": { "bullmq-otel": { "optional": true } }, - "packageManager": "pnpm@11.0.0", + "packageManager": "pnpm@11.20.0", "engines": { "node": ">=24.0.0" }, "publishConfig": { "access": "public", diff --git a/docs/tasks/phase-01-foundation.md b/docs/tasks/phase-01-foundation.md index e5468f2..9973bdc 100644 --- a/docs/tasks/phase-01-foundation.md +++ b/docs/tasks/phase-01-foundation.md @@ -20,7 +20,7 @@ Phase 1 produces the **first end-to-end usable slice**: a fully-gated project sc 2. **Clean Code sizing.** Functions ≤ 50 lines; files ≤ 800 lines (200–400 typical). Split by responsibility when over the limit. 3. **One responsibility per file/function (SRP); SOLID throughout.** Explicit DI (no implicit metadata wiring beyond NestJS providers); DI tokens are `Symbol`. 4. **JSDoc on every exported symbol** (class, function, interface, type, constant), with `@example` where it clarifies usage. -5. **English-only and timeless comments** — no `Phase N`/`Task`/roadmap-stage references inside any committed file (code, config, or docs-as-config). Explain *what* and *why*, never *which roadmap stage*. +5. **English-only and timeless comments** — no `Phase N`/`Task`/roadmap-stage references inside any committed file (code, config, or docs-as-config). Explain _what_ and _why_, never _which roadmap stage_. 6. **100% line/branch coverage** on every implemented file (`jest.coverage.config.ts` thresholds `100/100/100/100`). No `eslint-disable`, no `@ts-ignore`, no `@ts-expect-error` to dodge a gate. 7. **Never create `.gitkeep`/`.keep` or empty-directory placeholders** — directories emerge from real files only (the `index.ts` placeholders in §2.1 are real files). 8. **Current BullMQ API only.** Built on `ConfigurableModuleBuilder` + `isGlobal`/`setExtras` (no `@Global`, no `forFeature`); recurring jobs use `upsertJobScheduler`/`removeJobScheduler`/`getJobSchedulers` (never `addRepeatable`); `cleanQueue(name, grace, limit, status?)` mirrors BullMQ argument order; per-role `maxRetriesPerRequest` (Queue/FlowProducer keep ioredis default; only duplicated Worker/QueueEvents connections are forced to `null`). @@ -39,16 +39,16 @@ Phase 1 produces the **first end-to-end usable slice**: a fully-gated project sc ## Task index -| ID | Task | Status | Priority | Size | Depends on | -|---|---|---|---|---|---| -| 1.1 | Project scaffold (build chain, configs, budgets) | ✅ Done | P0 | M | — | -| 1.2 | Shared types & constants (`src/shared/`) | ✅ Done | P0 | S | 1.1 | -| 1.3 | Public server interfaces & contracts | ✅ Done | P0 | M | 1.1 | -| 1.4 | DI tokens, default options & error messages | ✅ Done | P0 | S | 1.1, 1.2 | -| 1.5 | `ConnectionResolver`, `QueueException` & connection utils | ✅ Done | P0 | L | 1.3, 1.4 | -| 1.6 | Resolved options + bootstrap validation | ✅ Done | P0 | M | 1.3, 1.4 | -| 1.7 | Base `QueueService` (cache, enqueue, metrics, control) | ✅ Done | P0 | M | 1.3, 1.5, 1.6 | -| 1.8 | `BymaxQueueModule.forRoot()`, barrel & unit tests | ✅ Done | P0 | L | 1.1–1.7 | +| ID | Task | Status | Priority | Size | Depends on | +| --- | --------------------------------------------------------- | ------- | -------- | ---- | ------------- | +| 1.1 | Project scaffold (build chain, configs, budgets) | ✅ Done | P0 | M | — | +| 1.2 | Shared types & constants (`src/shared/`) | ✅ Done | P0 | S | 1.1 | +| 1.3 | Public server interfaces & contracts | ✅ Done | P0 | M | 1.1 | +| 1.4 | DI tokens, default options & error messages | ✅ Done | P0 | S | 1.1, 1.2 | +| 1.5 | `ConnectionResolver`, `QueueException` & connection utils | ✅ Done | P0 | L | 1.3, 1.4 | +| 1.6 | Resolved options + bootstrap validation | ✅ Done | P0 | M | 1.3, 1.4 | +| 1.7 | Base `QueueService` (cache, enqueue, metrics, control) | ✅ Done | P0 | M | 1.3, 1.5, 1.6 | +| 1.8 | `BymaxQueueModule.forRoot()`, barrel & unit tests | ✅ Done | P0 | L | 1.1–1.7 | --- @@ -138,7 +138,7 @@ DELIVERABLES "reflect-metadata": "^0.2.0", "bullmq-otel": "^1.0.0" }, "peerDependenciesMeta": { "bullmq-otel": { "optional": true } }, - "packageManager": "pnpm@11.0.0", + "packageManager": "pnpm@11.20.0", "engines": { "node": ">=24.0.0" }, "publishConfig": { "access": "public", "provenance": true, "registry": "https://registry.npmjs.org/" } } diff --git a/docs/technical_specification.md b/docs/technical_specification.md index 78e8adf..7c80207 100644 --- a/docs/technical_specification.md +++ b/docs/technical_specification.md @@ -1939,7 +1939,7 @@ This decision is reviewed in every minor release of the lib. "graceful-shutdown", "job" ], - "packageManager": "pnpm@11.0.0", + "packageManager": "pnpm@11.20.0", "engines": { "node": ">=24.0.0" }, "publishConfig": { "access": "public",