v2.2.1
v2.2.1 — maintenance release
No consumer source changes. Resolves the v2.2.0 release-notes "known issue" on the c.basic-crud compound-primary-key route test, plus a round of test-suite reliability hardening, dev-tree advisory closures, and a brand refresh for GitHub dark-mode readers.
Fixed
cursor.speccell 9 (soft-delete still applies in cursor mode) was selectingtargetIdas the last id of the first cursor page. The/users-cursorcontroller is configured withlimit: 5, so under?sort=id,ASCthe first page returned ids[1..5]andtargetIdlanded on user 5 — the row exercised byc.basic-crud'sGET /users4/1/5compound-key route test. The cell now POSTs a throwaway user, captures the returned id, and DELETEs that id; the seed range is no longer touched and execution order no longer matters. Test-fixture-only — no consumer code is affected.
Changed
test:typeorm:mysqlscript now passes--runInBandto jest. Single-worker execution avoids parallel-worker contention against the shared MySQL container that v2.2.0 hit.- The supertest
done(callback)pattern is migrated to directawaitacrossb.query-params.spec.ts,c.basic-crud.spec.ts, and the threereal-db-smoke.spec.tsfiles (drizzle, mikro-orm, prisma). Failures now surface as Promise rejections with a clean stack instead of hanging to jest's 30s timeout.
Removed
- The orphan
mrepo.jsonfile at the repo root is removed (the v2.2.0 mrepo→lerna swap left the config file behind; nothing reads it any more).
Internal
tmp 0.0.33 → ^0.2.4(closes GHSA-52f5-9888-hmc6, low) and@conventional-changelog/git-client 1.0.1 → ^2.0.0(closes GHSA-vh25-5764-9wcr, medium) force-pinned via rootresolutions.uuid 11 → 14(GHSA-w5hq-g745-h8pq, medium) intentionally NOT resolved — uuid 14 ships as"type": "module", breaks ts-jest CJS preset across all five jest configs. Carried concern; no consumer impact.knip.jsonreduced to the entries knip 5 cannot auto-detect (16 hints → 0).[Unreleased]sections promoted to[2.2.0] — 2026-05-03across the 8 CHANGELOGs (the v2.2.0 publish itself missed the rename — process gap closed for next cycle).img/logo.svgsplit intoimg/logo-{light,dark}.svg+ matching icon pair;README.mdhero now uses<picture>withprefers-color-scheme: darkso the wordmark is visible in either GitHub theme.
Verified locally
yarn build→ exit 0yarn test:typeorm:postgres→ 15/15 suitesyarn test:typeorm:mysql→ 15/15 suites (compound-key un-skipped, all 276 tests green)yarn test:drizzle:postgres→ 10/10 suitesyarn test:mikro-orm:postgres→ 12/12 suitesyarn test:prisma:postgres→ 13/13 suitesyarn test:parity→ 1/1 suite (72 tests)yarn knip→ exit 0