Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/development_plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
24 changes: 12 additions & 12 deletions docs/tasks/phase-01-foundation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`).
Expand All @@ -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 |

---

Expand Down Expand Up @@ -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/" }
}
Expand Down
2 changes: 1 addition & 1 deletion docs/technical_specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
"prettier --write"
]
},
"packageManager": "pnpm@11.0.0",
"packageManager": "pnpm@11.20.0",
Comment thread
msalvatti marked this conversation as resolved.
"engines": {
"node": ">=24.0.0"
},
Expand Down
11 changes: 5 additions & 6 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Loading