Skip to content

Release: timeout queue fix, pnpm and rman - #23

Merged
erayhanoglu merged 22 commits into
mainfrom
dev
Nov 9, 2026
Merged

erayhanoglu merged 22 commits into
mainfrom
dev

Conversation

@erayhanoglu

Copy link
Copy Markdown
Member

Release: a timed-out acquire() request now leaves the queue at once, so pool.pending drops immediately; the repository moves to pnpm and rman under the Panates standards.
Effect: pending no longer counts timed-out requests; Node.js >=22 is required; npm publishing uses Trusted Publishing (OIDC).
Review: src/pool.ts, src/pool-request.ts; permission changes in .github/workflows/test.yml, release.yml (contents: write, id-token: write), main-from-dev.yml; qc.yml removed; NPM_TOKEN no longer passed.
Tests: 70 passed before, 72 passed after; lint, circular check, tsc and build clean; CI green on Node.js 22, 24 and 26.

🤖 Generated with Claude Code

erayhanoglu and others added 22 commits September 9, 2026 08:07
doc/API.md now carries a doc-sync-marker HTML comment recording the
version/commit/source-paths it was last verified against, so a future
session can cheaply check whether it has drifted (git log <marker
commit>..HEAD -- <source_paths>) instead of re-diffing the whole doc
against the whole source every time. CLAUDE.md documents the convention
and the update procedure for future hand-written docs.
Public API surface (PoolFactory/PoolConfiguration in types.ts, PoolOptions'
11 get/set pairs, Pool's methods/constructor/emit override, AbortError's
retry-bypass behavior, the PoolState/ResourceState enums, createPool()) had
little to no TSDoc - most of it only existed separately in doc/API.md.
Every public member now has an inline doc comment (@param/@returns/@throws/
@DefaultValue where relevant); private Pool methods get a short one-liner
each for maintainers.

Also fixes close()'s zero-argument overload type from `void` to the
`Promise<void>` it actually returns at runtime (matches what doc/API.md
already documented) - a type-only correction, no behavior change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Every job now declares contents: read; the shared workflows act through
PERSONAL_ACCESS_TOKEN, so GITHUB_TOKEN needs nothing more. main-from-dev.yml
fails any pull request into main whose head is not this repository's dev.
SECURITY.md points reporters to GitHub private vulnerability reporting.
.claude/settings.json enables the panates plugin from panates/ai-harness,
turns off the commit attribution trailer and keeps the graphify hooks.
.gitignore now ignores .claude/ except settings.json.
The release action publishes from build/, where support/postbuild.cjs drops
private; publishConfig keeps the package detected as an npm package.
Updates the links in README.md, CLAUDE.md and benchmark/README.md, and the
output path of the benchmark report renderer.
pnpm installs from pnpm-lock.yaml; pnpm-workspace.yaml sets
minimumReleaseAge: 0 and allowBuilds. .rmanrc.yml extends
@panates/rman-preset, so rman builds, lints, checks for circular imports,
cleans, versions and writes the changelog. The root scripts follow the
standard set and engines.node is >=22.

rman build output matches the old tsc + postbuild output, except that
build/ no longer carries CHANGELOG.md. Removed: support/, .auto-changelog,
changelog-template, .madgerc, qc.yml (test.yml lints every branch) and the
auto-changelog, madge, prettier, rimraf and ts-cleanup dev dependencies.
eslint uses mocha globals instead of jest; tsconfig-build.json sets rootDir
and takes module and declaration settings from @panates/tsconfig. The
ignore files follow the templates and keep /benchmark/results ignored.
The build output is unchanged.
test.yml sets up Node.js and pnpm with panates/gh-setup-node@v2, runs
rman lint, rman check and the tests on Node.js 22, 24 and 26, and runs on
every push except to main. release.yml uses pr-source.yaml@v3 and
node-release.yaml@v3; npm publishing moves to Trusted Publishing (OIDC),
so NPM_TOKEN is no longer passed.
rman deps -u: TypeScript 6 and dotenv 18 (majors), the rest minor and
patch. TypeScript 7 is held back: @panates/eslint-config-ts needs <7.
test/ and benchmark/ tsconfig files drop baseUrl, which TypeScript 6
deprecates; test/tsconfig.json now holds the template exactly. The emitted
build output is unchanged.
pnpm run hands a literal -- to the script, and yargs then ignores the
flags after it, so the example ran the full matrix.
test/tsconfig.json sets rootDir to the repository root, since it inherits
rootDir: src from tsconfig-base.json and the specs live outside src/.
TestFactory imports PoolFactory as a type, as verbatimModuleSyntax needs.
tsc --noEmit now passes for src/, test/ and benchmark/.
README's compatibility note now matches engines.node (>=22), and
package.json lists the current contributors.
A request whose acquireTimeoutMillis elapsed was rejected but stayed in
the request queue, so pool.pending kept counting it until a resource
freed up, and the dispatcher then served the abandoned request.
PoolRequest now calls an onTimeout hook before emitting request-timeout;
the pool uses it to drop the request from the queue. A request that times
out while its idle resource fails validation is no longer put back in
the queue either.
panates/gh-setup-node@v2 installs the pnpm named in package.json's
packageManager field and fails without it. pnpm records the pinned
version in pnpm-lock.yaml.
@erayhanoglu
erayhanoglu merged commit 40f7e7d into main Nov 9, 2026
5 checks passed
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