René's URL Explorer Experiment


Title: fix(nodejs): `--test-force-exit` silently drops unit tests (fewer tests reported, exit 0 when the rest pass) · Issue #18045 · cheaper-inference/OmniRoute · GitHub

Open Graph Title: fix(nodejs): `--test-force-exit` silently drops unit tests (fewer tests reported, exit 0 when the rest pass) · Issue #18045 · cheaper-inference/OmniRoute

X Title: fix(nodejs): `--test-force-exit` silently drops unit tests (fewer tests reported, exit 0 when the rest pass) · Issue #18045 · cheaper-inference/OmniRoute

Description: Summary Every unit-test script in package.json, plus the TIA step in quality.yml, runs node --test --test-force-exit. On Node 24 (the version CI uses; upstream reports the same on 22 and 26) this drops tests from the results without any ...

Open Graph Description: Summary Every unit-test script in package.json, plus the TIA step in quality.yml, runs node --test --test-force-exit. On Node 24 (the version CI uses; upstream reports the same on 22 and 26) this d...

X Description: Summary Every unit-test script in package.json, plus the TIA step in quality.yml, runs node --test --test-force-exit. On Node 24 (the version CI uses; upstream reports the same on 22 and 26) this d...

Opengraph URL: https://github.com/cheaper-inference/OmniRoute/issues/18045

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"fix(nodejs): `--test-force-exit` silently drops unit tests (fewer tests reported, exit 0 when the rest pass)","articleBody":"## Summary\n\nEvery unit-test script in `package.json`, plus the TIA step in `quality.yml`, runs `node --test --test-force-exit`. On Node 24 (the version CI uses; upstream reports the same on 22 and 26) this drops tests from the results without any warning. There are two separate mechanisms:\n\n1. The child's report stream gets cut off (random). Each test file runs in a child process that streams its results to the runner over a stdout pipe. When the child finishes, `--test-force-exit` calls `process.exit()` while some of that pipe output is still queued. (On POSIX, pipe writes from `process.stdout` are asynchronous; on Windows they are synchronous, so this is a Linux/macOS problem.) The tail of the file's results is lost. The runner prints a smaller `ℹ tests` total and exits 0. This is a Node bug (https://github.com/nodejs/node/issues/64833, fix proposed in https://github.com/nodejs/node/pull/64875, both still open). It reproduces on Node v24.22.0 without tsx or any repo code.\n2. Tests registered after a top-level `await` never run (deterministic for the affected files). If a file registers a `test()`, then hits a top-level `await` (for example `await createChatPipelineHarness(...)`), and registers more tests after it, the first test can finish while the module is still suspended. At that point \"all known tests have finished\", so the force-exit path exits the child before the remaining tests exist. That matches the documented behaviour of `--test-force-exit`, but the result is that those tests never run and nothing reports it.\n\nIn mechanism 1, a failure in the dropped tail still makes the child exit non-zero, so the run goes red but the failure detail can be missing. In mechanism 2 the dropped tests never execute, so their failures can't turn CI red.\n\n## Environment\n\n- Base commit `5b3be70ba8` (release/v3.8.53 line), clean checkout\n- Node v24.22.0, Linux x64\n- tsx 4.23.13\n- CI: Node 24 (`.nvmrc`, `CI_NODE_VERSION`), ubuntu-latest; `engines` also allows `>=22.22.2 \u003c23`\n\n## Reproduction\n\n### A. Repo files (mechanism 1)\n\n```bash\nF=\"tests/unit/i18n-kilo-pass-keys-12561.test.ts tests/unit/i18n-missing-keys-12272.test.ts\"\nfor i in $(seq 1 40); do\n  DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm \\\n    --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts \\\n    --test --test-force-exit --test-concurrency=4 $F 2>&1 | grep '^ℹ tests'\ndone | sort | uniq -c\n```\n\nExpected: 137 every time (69 + 68). Observed:\n\n| Mode | Runs | `ℹ tests` | Exit code |\n|---|---|---|---|\n| `--test-force-exit` | 40 | 137 in 31 runs; 78, 101, 103, 103, 111, 114, 118, 122, 135 in the other 9 | 0 in all 40, with 0 fail and 0 cancelled |\n| without `--test-force-exit` | 40 | 137 in all 40 | 0 |\n| `--test-force-exit` + child stdout set to blocking (see below) | 40 | 137 in all 40 | 0 |\n\nIn a short run, the spec output stops partway through the `locale:` subtests, for example after `locale: mt`. The parent test shows `▶` with no `✔`, and then the summary prints. A `process.exit` tracer preloaded into the children showed that each child exits through the runner's own force-exit path (`Test.run` → `process.exit()`). It also showed whether `process.stdout.writableLength` was non-zero at that moment. In 4 of 30 traced runs a child exited with bytes still queued on stdout (472, 13906, 23159 and 60597). The three with 13 KB or more queued were the runs that came up short (128, 122 and 98 tests); the 472-byte run still reported 137. Every run with nothing queued reported 137.\n\n### B. Minimal repro, no tsx and no repo code (mechanism 1)\n\n```bash\nmkdir fe-repro && cd fe-repro\ncat > f1.test.mjs \u003c\u003c'JS'\nimport test from 'node:test';\nimport assert from 'node:assert/strict';\ntest('parent with many awaited subtests', async (t) => {\n  for (let i = 0; i \u003c 400; i++) {\n    await t.test(`subtest ${i} ${'x'.repeat(200)}`, () => assert.ok(true, 'y'.repeat(500)));\n  }\n});\nJS\nfor k in 2 3 4; do cp f1.test.mjs f$k.test.mjs; done\nfor i in $(seq 1 15); do node --test --test-force-exit --test-concurrency=4 f*.test.mjs 2>&1 | grep '^ℹ tests'; done | sort | uniq -c\n```\n\nExpected: 1604. Observed with `--test-force-exit`: 14 of 15 runs were short (1524–1593), all with exit 0. Without the flag: 1604 in 15 of 15 runs. With `--test-isolation=none` (no pipe): 1604 in 6 of 6 runs.\n\n### C. Tests after a top-level `await` (mechanism 2)\n\n```bash\nnode --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts \\\n  --test --test-force-exit tests/unit/embed-ws-host-empty-messages-5110.test.ts   # ℹ tests 1\nnode --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts \\\n  --test tests/unit/embed-ws-host-empty-messages-5110.test.ts                     # ℹ tests 3\n```\n\n`#5110-1` is registered at line 20. Line 51 is `const harness = await createChatPipelineHarness(...)`, and both `#5110-4` tests come after it. With force-exit they never run. Base has 7 affected files that lose 22 tests every time. This was measured with mechanism 1 neutralised, comparing force-exit against no force-exit:\n\n| File | Tests with force-exit | Tests without force-exit |\n|---|---|---|\n| tests/unit/cli-tools-crush.test.ts | 3 | 11 |\n| tests/unit/resolve-proxy-family.test.ts | 2 | 6 |\n| tests/unit/bai-provider.test.ts | 6 | 8 |\n| tests/unit/dgrid-provider.test.ts | 5 | 7 |\n| tests/unit/qiniu-provider.test.ts | 5 | 7 |\n| tests/unit/responses-case-insensitive-combo-guard.test.ts | 4 | 6 |\n| tests/unit/embed-ws-host-empty-messages-5110.test.ts | 1 | 3 |\n\nThe dropped tests pass when they do run. An AST scan of the 7,694 files under `tests/unit` finds 49 with the same shape: a top-level test, then a top-level `await`, then more top-level tests. Only the 7 above lost tests in our runs; the other 42 lost none, because the `await` settled before the first test finished. Whether they drop tests depends on that timing.\n\n### D. Larger sample\n\nOn the 103-file i18n/translator batch from the same base, 3 runs per mode:\n\n| Mode | `ℹ tests` | Wall time |\n|---|---|---|\n| `--test-force-exit` | 1248 / 1213 / 1262 | 62–68 s |\n| `--test-force-exit` + blocking child stdout | 1262 / 1262 / 1262 | 61–62 s |\n| without `--test-force-exit` | 1264 / 1264 / 1264 | 90–100 s |\n\nThe remaining 2 tests are the `#5110-4` pair (mechanism 2). The extra ~30 s without force-exit is explained under \"Why the flag is there\" below.\n\n## Affected configuration\n\n- `package.json:140-150` and `:313`: `test`, `test:unit` (which also chains `test:unit:serial`), `test:unit:ci`, `test:unit:ci:shard` (used by the 8-shard unit job in `ci.yml`, the 4-shard `fast-unit` job in `quality.yml`, and `nightly-release-green.yml` / `nightly-compat.yml`), `test:unit:fast`, `test:unit:shard:1/2`, `test:unit:serial`. Each script has 2–3 `node --test --test-force-exit` invocations.\n- `package.json:155, 272-281, 288, 312`: property, integration, combo-matrix, services, boundary, heap, chaos, system and coverage-runner scripts. (`test:property` does not load `tests/_setup/isolateDataDir.ts`.)\n- `.github/workflows/quality.yml:381` and `:384`: the TIA impacted-tests step (REST and DASH invocations).\n\n## Why the flag is there\n\nWithout force-exit, some test children stay alive after their last test:\n\n- The call-log artifact worker: `src/lib/usage/callLogArtifactWriter.ts` keeps its `worker_threads` Worker ref'd while idle and terminates it only after a 30 s idle timer (`IDLE_TIMEOUT_MS = 30_000`, line 11; the timer itself is unref'd at line 127, so it is the idle Worker that holds the event loop). Shortening that timer to 100 ms alone cut `embed-ws-host-empty-messages-5110` from 35.8 s to 3.8 s without force-exit. Any file that writes a call log stays alive for about 30 s after it finishes, unless it calls `closeCallLogSaves()` or `closeCallLogArtifactWriter()`. `tests/integration/_chatPipelineHarness.ts`'s `cleanup()` only awaits `waitForCallLogSaves()`. In the 103-file batch, 4 files took about 30 s longer each without force-exit, and apart from stdout/stderr, the only ref'd handle left was that worker's MessagePort. 41 unit files use this harness.\n- tsx disk cache writes: tsx's disk cache stores each transform with an un-awaited `fs.promises.writeFile` and ignores errors. If force-exit calls `process.exit()` while those writes are still in flight, they are cut off and can leave 0-byte entries in `os.tmpdir()/tsx-\u003cuid>`. A development machine had 20,830 of them among 133,963 entries; a full disk is another possible cause. Under force-exit, a test child has occasionally hung during exit (`modality-bridge-video-i18n.test.ts`). The stuck child had a defunct esbuild child and open write fds on 0-byte tsx cache files. This was seen while the disk was full; with free disk it did not reproduce (0/20 runs with force-exit, 0/20 without).\n\n## Proposed fix direction\n\n1. Short term, keep force-exit but stop losing data:\n   - In the shared test preload `tests/_setup/isolateDataDir.ts`, which every affected script already imports, make the child's stdout pipe blocking. Only do this inside test-runner children (`NODE_TEST_CONTEXT` set): `process.stdout._handle?.setBlocking?.(true)`. This is the same approach as the proposed upstream fix. Locally it removed mechanism 1 completely: 40/40 and 25/25 full counts, and no measurable change in wall time.\n   - Move the top-level `await` in the 7 files above so it comes before the first `test()`, or into a `before()` hook. Add a cheap static check so new files don't reintroduce this pattern.\n2. Follow-up, remove `--test-force-exit`. Unref the call-log worker while it is idle (ref it while a write is in flight), and have the chat pipeline harness close the writer in `cleanup()`. Then run the suite without force-exit to find any remaining handles before dropping the flag. A naive full unref breaks tests that are still waiting for a worker reply, so ref-while-active is required.\n3. Remove the stdout workaround once a Node 24.x release ships the upstream fix.\n","author":{"url":"https://github.com/HouMinXi","@type":"Person","name":"HouMinXi"},"datePublished":"2026-10-24T12:31:52Z","url":"https://github.com/cheaper-inference/OmniRoute/issues/18045"}

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:33882f80-6e99-c817-4846-77b263025463
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idD7CE:18DD88:B2932:ED198:6AEDA6D9
html-safe-nonce226b73d4c69cb9b062a2e6f2950bf449bbeff6b73bd8546f68420d13ba9c45c4
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEN0NFOjE4REQ4ODpCMjkzMjpFRDE5ODo2QUVEQTZEOSIsInZpc2l0b3JfaWQiOiIxOTgwNjYxMDY4NDA4Mzk5NTc3IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac63486324ae47533f971764720a525be6afa78f985e7642a6e3e094330b7f6c19
hovercard-subject-tagissue:6012952161
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/cheaper-inference/OmniRoute/18045/issue_layout
twitter:imagehttps://opengraph.githubassets.com/c1d8bea729760076e6ad6e2dc318c6f3b0ac558bcb006b82bcef0209bd1b32a8/cheaper-inference/OmniRoute/issues/18045
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/c1d8bea729760076e6ad6e2dc318c6f3b0ac558bcb006b82bcef0209bd1b32a8/cheaper-inference/OmniRoute/issues/18045
og:image:altSummary Every unit-test script in package.json, plus the TIA step in quality.yml, runs node --test --test-force-exit. On Node 24 (the version CI uses; upstream reports the same on 22 and 26) this d...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameHouMinXi
hostnamegithub.com
expected-hostnamegithub.com
None9f51e3b6c7a190e426e641ae15acbc58dd1ac2003e96b58879bbc298e213dbf3
turbo-cache-controlno-preview
go-importgithub.com/cheaper-inference/OmniRoute git https://github.com/cheaper-inference/OmniRoute.git
octolytics-dimension-user_id320819803
octolytics-dimension-user_logincheaper-inference
octolytics-dimension-repository_id1157102282
octolytics-dimension-repository_nwocheaper-inference/OmniRoute
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1157102282
octolytics-dimension-repository_network_root_nwocheaper-inference/OmniRoute
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release7060660810b587033ea861b8aa67beb72c8e6542
ui-targetfull
theme-color#1e2327
color-schemelight dark
react-app-nameissues

Links:

Skip to contenthttps://github.com/cheaper-inference/OmniRoute/issues/18045#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fcheaper-inference%2FOmniRoute%2Fissues%2F18045
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fcheaper-inference%2FOmniRoute%2Fissues%2F18045
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=cheaper-inference%2FOmniRoute
Reloadhttps://github.com/cheaper-inference/OmniRoute/issues/18045
Reloadhttps://github.com/cheaper-inference/OmniRoute/issues/18045
Reloadhttps://github.com/cheaper-inference/OmniRoute/issues/18045
cheaper-inferencehttps://github.com/cheaper-inference
OmniRoutehttps://github.com/cheaper-inference/OmniRoute
Codehttps://github.com/cheaper-inference/OmniRoute
Issues226 (226)https://github.com/cheaper-inference/OmniRoute/issues
Pull requests360 (360)https://github.com/cheaper-inference/OmniRoute/pulls
Discussionshttps://github.com/cheaper-inference/OmniRoute/discussions
Actionshttps://github.com/cheaper-inference/OmniRoute/actions
Projectshttps://github.com/cheaper-inference/OmniRoute/projects
Wikihttps://github.com/cheaper-inference/OmniRoute/wiki
Security and quality1 (1)https://github.com/cheaper-inference/OmniRoute/security
Insightshttps://github.com/cheaper-inference/OmniRoute/pulse
https://github.com/cheaper-inference/OmniRoute
New issuehttps://github.com/login?return_to=https://github.com/cheaper-inference/OmniRoute/issues/18045
New issuehttps://github.com/login?return_to=https://github.com/cheaper-inference/OmniRoute/issues/18045
fix(nodejs): --test-force-exit silently drops unit tests (fewer tests reported, exit 0 when the rest pass)https://github.com/cheaper-inference/OmniRoute/issues/18045#top
bugSomething isn't workinghttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22bug%22
nodejshttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22nodejs%22
https://github.com/HouMinXi
HouMinXihttps://github.com/HouMinXi
on Oct 24, 2026https://github.com/cheaper-inference/OmniRoute/issues/18045#issue-6012952161
test_runner: --test-force-exit with concurrency silently loses test verdicts (parent reports fewer tests than ran, exit 0) nodejs/node#64833https://github.com/nodejs/node/issues/64833
test_runner: flush report stream before force exit nodejs/node#64875https://github.com/nodejs/node/pull/64875
diegosouzapwhttps://github.com/diegosouzapw
on Oct 24, 2026https://github.com/cheaper-inference/OmniRoute/issues/18045#event-34149553547
diegosouzapwhttps://github.com/diegosouzapw
bugSomething isn't workinghttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22bug%22
nodejshttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22nodejs%22
on Oct 24, 2026https://github.com/cheaper-inference/OmniRoute/issues/18045#event-34149553561
HouMinXihttps://github.com/HouMinXi
on Oct 26, 2026https://github.com/cheaper-inference/OmniRoute/issues/18045#event-34250035128
chore(changelog): add the cheaper-inference#18136 fragmenthttps://github.com/HouMinXi/OmniRoute/commit/1d504f068b5272c39c1815b65a26c97fcc6f334a
cheaper-inference#18136https://github.com/cheaper-inference/OmniRoute/pull/18136
1d504f0https://github.com/HouMinXi/OmniRoute/commit/1d504f068b5272c39c1815b65a26c97fcc6f334a
test(combo): hoist the expiry-first dispatch imports above the first …https://github.com/HouMinXi/OmniRoute/commit/190855e75496f4b96c8e3544875c82c91b9d4564
190855ehttps://github.com/HouMinXi/OmniRoute/commit/190855e75496f4b96c8e3544875c82c91b9d4564
RaviTharumahttps://github.com/RaviTharuma
on Oct 27, 2026https://github.com/cheaper-inference/OmniRoute/issues/18045#event-34420742017
test(lint): move top-level awaits above first testshttps://github.com/RaviTharuma/OmniRoute/commit/82497ae5f955e21c9affe77095d901c7b6cc9548
82497aehttps://github.com/RaviTharuma/OmniRoute/commit/82497ae5f955e21c9affe77095d901c7b6cc9548
test(lint): move top-level awaits above first testshttps://github.com/RaviTharuma/OmniRoute/commit/19aa75e3a6088fd18d6fb3b8eeb9e513c9fe734d
19aa75ehttps://github.com/RaviTharuma/OmniRoute/commit/19aa75e3a6088fd18d6fb3b8eeb9e513c9fe734d
test(lint): move top-level awaits above first testshttps://github.com/RaviTharuma/OmniRoute/commit/a5522490c08a4c425242a7404acecd0d40f59fca
a552249https://github.com/RaviTharuma/OmniRoute/commit/a5522490c08a4c425242a7404acecd0d40f59fca
Sign up for freehttps://github.com/signup?return_to=https://github.com/cheaper-inference/OmniRoute/issues/18045
Sign in to commenthttps://github.com/login?return_to=https://github.com/cheaper-inference/OmniRoute/issues/18045
bugSomething isn't workinghttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22bug%22
nodejshttps://github.com/cheaper-inference/OmniRoute/issues?q=state%3Aopen%20label%3A%22nodejs%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.