fix(install): require kernel 3.10, not 5.1, for the bundled runtime - #778
Merged
Ishaan Gangwani (ishaan1124) merged 3 commits intoSep 29, 2026
Conversation
ANIRUDDHA ADAK (aniruddhaadak80)
requested review from
Aayam Bansal (aayambansal) and
Ishaan Gangwani (ishaan1124)
as code owners
September 28, 2026 07:49
|
ANIRUDDHA ADAK (@aniruddhaadak80) is attempting to deploy a commit to the InkVell Team on Vercel. A member of the Team first needs to authorize it. |
The native-platform diagnostic added in 74ddda7 hardcoded a 5.1 floor in two places and shipped in v1.3.5. That blocks any host below 5.1, so CentOS 8 (4.18) and CentOS 7 (3.10) cannot install the package at all: postinstall.mjs throws before the CLI is ever reached, and the bin wrapper exits 1 on launch. 5.1 matched neither number this project documents. docs/notes/ linux-compatibility.md records kernel 3.10 as the runtime floor for the pinned Bun release with 5.6 recommended, and upstream's installation guide for that same tag states Bun runs on kernels as old as 3.10 with graceful degradation. The shell installer has never gated on the kernel at all, so the npm path and the install script disagreed. Lower both copies to the documented 3.10 floor and drop the follow-up line telling users that CentOS 7's 3.10 kernel is unsupported, which contradicts the floor it is printed under. 3.10 to 5.5 now reports reduced syscall support rather than refusing to start. bin-wrapper.test.ts asserted that 3.10 was rejected, so it locked the regression in. It now covers the floor, the reported 4.18 host, the old 5.1 boundary, 6.8, sub-floor kernels, unparseable releases and non-Linux platforms against both copies of the gate. Refs synthetic-sciences#772
Ishaan Gangwani (ishaan1124)
force-pushed
the
fix/linux-kernel-floor-3-10
branch
from
September 29, 2026 01:24
a212aac to
7bb369b
Compare
Co-authored-by: Cursor <cursoragent@cursor.com>
Ishaan Gangwani (ishaan1124)
merged commit Sep 29, 2026
0bdca31
into
synthetic-sciences:main
8 of 9 checks passed
This was referenced Sep 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #772.
Summary
openscienceexits 1 on CentOS 8 (kernel 4.18)npm install -g @synsci/opensciencefails first, insidepostinstall5.1in two independent copies74ddda7, first shipped inv1.3.53.10(with5.6recommended)3.10The bug
Any Linux kernel below
5.1is refused by two gates that were never meant to agree with each other:backend/cli/script/postinstall.mjs:94, which throws during install, so the package fails to install at all.backend/cli/bin/openscience:8holds the constant, and is enforced at lines 130-137 withprocess.exit(1).It shipped silently. The
v1.3.5changelog entry only says "Hardened native packaging", and theverify-native-clijob added at the same time runs onubuntu-24.04only, so a modern-kernel matrix structurally cannot catch this.v1.3.4had no gate at all.Why 5.1 is simply wrong
5.1matches neither number this project documents:docs/notes/linux-compatibility.md:8-12records kernel3.10as the runtime floor,5.6or newer recommended, for the pinned Bun release, and links to upstream's guide for that same tag.5.6, not5.1.installhas never gated on the kernel at all. It only checksuname -s/uname -magainst an OS and arch whitelist, so the npm path and the shell path already disagreed about what the product supports.In other words the code was stricter than the project's own documentation, and the documentation was right.
What changed
Both gates now use the documented
3.10floor, so the two copies agree with each other and withdocs/notes/linux-compatibility.md.The follow-up line
CentOS 7's stock 3.10 kernel is not supported.is removed, because it directly contradicted the floor it was printed under. Kernels from 3.10 through 5.5 now report reduced syscall support instead of refusing to start:backend/cli/README.md:15and the landing page's system-requirements line (Download.tsx:122) were reconciled with the same numbers.The test was pinning the bug
bin-wrapper.test.ts:27and:30asserted that3.10was rejected:So the regression could not be fixed without failing CI. That test is rewritten to assert that
3.10is accepted, and it now covers:3.10floor, and the reported4.18host5.1boundary, and a current6.82.6and3.9Verification
All 8 CI checks pass, and the rewritten test ran and passed:
Beyond CI, I executed both gate functions taken from the committed files over HTTP and diffed old against new behaviour across a kernel matrix. 20 out of 20 assertions pass:
2.6.32(CentOS 6)3.9.03.10.0(CentOS 7)4.18.0(issue #772)5.0.05.1.0,6.8.0darwin/win32linuxKernelProblem("linux", "4.18.0-348.7.1.el8_5.x86_64")now returnsundefined, so the reporter's host starts normally instead of printing the error.Non-goals
Deliberately not in this change:
OPENSCIENCE_SKIP_*escape hatch. The gate was made a hard block on purpose, so an env-var bypass would undercut that.Follow-up worth its own PR
verify-native-cliruns only onubuntu-24.04, which is precisely why this shipped unnoticed. An old-kernel leg in that matrix would catch this class of break at review time instead of after release.