Fixed
npm install -g devforgekitfollowed by a plaindevforgekitcould
fail permanently on Linux/WSL2 when installed withsudo(the
common case on a system Node.js install where the global prefix is
root-owned, e.g. Ubuntu/Debian'saptnodejspackage). Root cause,
confirmed live in a clean Ubuntu 22.04 + npm 11.18 container (full
writeup indocs/NpmGlobalInstallRootCause.md):- npm 11.16+'s
allow-scriptssecurity gate silently skips global
installs' lifecycle scripts by default, soscripts/npm-postinstall.sh
never ran andcli/node_moduleswas never populated at install time. - The
devforgekitdispatcher's own self-heal fallback
(self_heal_cli_deps, added specifically for case 1) then tried to
npm installintocli/on first run - but asudo-installed
package leaves that directory root-owned, so the unprivileged user
hitEACCES: permission denied, mkdir '.../cli/node_modules'. The
printed recovery command (cd ... && npm install, nosudo) failed
with the identical error, leaving no working path forward.
self_heal_cli_depsnow falls back a second time to a user-writable
mirror of the repo under~/.cache/devforgekit/cli-fallback/(real
copies ofcli/bin+cli/srcso Node's module resolver can't walk
symlinks back to the still-unwritable original; every other top-level
entry -registry/,docs/,profiles/,scripts/,VERSION, etc.
- is symlinked instead), auto-invalidated after
npm update -g devforgekitships newcli/src. Reproduced on a clean Ubuntu 22.04 +
npm 11.18 container, and confirmed the identicalEACCESalso
reproduces on macOS given the same root-owned-directory condition - not
WSL- or Linux-specific. Four new regression tests in
cli/test/index.test.jscover the fallback mirror,registry/
resolution through it, cache reuse, and stale-mirror invalidation.
- npm 11.16+'s
Otherwise a documentation and messaging patch. No packaging changes -
the os: ["darwin", "linux"] restriction in package.json is
correct and stays as-is; it prevents a native Windows npm install that
would not run anyway, since the devforgekit dispatcher and
scripts/npm-postinstall.sh are both bash scripts requiring a POSIX
shell that stock Windows (cmd.exe/PowerShell) doesn't provide.
bootstrap.shprinted a misleading "Bootstrap aborted unexpectedly"
message for its deliberate, by-design non-macOS rejection. A generic
EXITtrap (meant for genuinely unexpected failures) fired on this
expected early exit too, making a first-time Linux user'sdevforgekit installlook like something broke rather than "this is expected, run
devforgekit <command>directly instead." Found and fixed during real
Ubuntu/Debian certification (see below); one-line fix (trap - EXIT
before the exit), verified live on both distros.
Certified this release (real evidence, see docs/PlatformSupport.md)
Part of the v3.0.2 Platform Stabilization Program
(docs/PlatformStabilizationProgram.md) - systematic, evidence-only
platform validation with no new features. Every claim below has a real
command run behind it; nothing is assumed.
- macOS Apple Silicon - certified. Full real-hardware lifecycle: the
release gate (scripts/rc-validate.sh), the complete CLI regression
suite,uninstall/services/backup/preferencesexercised safely
(test-mode or an isolated clone/$HOME, never mutating the real
machine),check/doctor/report/inventoryfor real. - Ubuntu 22.04 and Debian 12 - certified. Real fresh-container
first-time-user lifecycle: no Homebrew, Node.js via NodeSource, npm
11.18'sallow-scriptsgate, non-sudo and sudo (root-owned) global
installs, the full command surface (profile,component,plugin,
recipe,graph,benchmark,repair,completionfor bash and
zsh), uninstall/reinstall, and source-install-vs-npm-install parity.
Debian run side-by-side with Ubuntu specifically to surface any
Ubuntu-specific (rather thanapt-family-generic) assumptions - none
found. - Fedora, Arch, macOS Intel - not yet certified. Expected to
work (thednf/pacmancode paths incli/src/core/platform/linux.js
are architecturally identical to the certifiedaptpath; Intel Mac
support is the samecommon.shlogic as Apple Silicon, just a
different Homebrew prefix), but genuinely not verified on real
hardware/environment yet - Fedora/Arch were blocked by a local Docker
Desktop environment issue unrelated to DevForgeKit (see
docs/PlatformStabilizationProgram.md's Phase 3 report), Intel Mac by
lack of hardware access. Recorded honestly as NOT TESTED rather than
assumed. - Windows + WSL2 - a supported installation path with real
installation bugs found and fixed (the root-owned npm install fix
above reproduces identically under WSL2's Ubuntu userspace). Full
platform certification on real Windows/WSL2 hardware is still pending- what's verified so far is the Ubuntu-container equivalent, which
cannot check genuinely WSL-specific concerns (Windows PATH leakage,
/mnt/cinterop). Native Windows (no WSL) remains unsupported by
design - see below.
- what's verified so far is the Ubuntu-container equivalent, which
Changed
- README.md - every Windows-related claim now consistently states
that native Windows is unsupported and explains why (bash dispatcher,
not a packaging bug), with a prominent callout in Installation, a
corrected FAQ, and updated badges/tables that previously implied
Windows parity with macOS/Linux. Also brought in line with the
certification results above - no platform claim overstates what's
actually been verified (seedocs/PlatformSupport.md). - Website (
devforgekit.dev) - installation page's Windows journey,
platform-recommendation cards, FAQ, feature copy, roadmap copy, and
lib/seo.ts's structured-dataoperatingSystemfield brought in line
with the same Windows-via-WSL messaging and the certification results. - Added a Planned: v3.1 Native Windows Support roadmap entry -
replacing the bash entry point and postinstall script, adding a real
Windows-native provisioning path fordevforgekit install, then
removing theosrestriction once verified on real hardware. - New
docker/platform-certification/- reusable Dockerfiles (Ubuntu,
Debian, Fedora, Arch) for reproducing a real first-time-user lifecycle
per distro, kept for reuse in future certification work rather than
left as throwaway scripts.
Known limitations carried into this release
See docs/PlatformSupport.md's "Known limitations" section for the full
list with root causes. Two new ones found during Ubuntu/Debian
certification, both investigated and deliberately not papered over with
a workaround: npm uninstall -g devforgekit after a root-owned install
leaves a harmless orphaned cache directory behind (allow-scripts would
block a preuninstall cleanup hook the same way it blocks postinstall,
so a real fix needs a different mechanism than a one-line patch); and
commander@15's conservative engines.node: >=22.12.0 prints a cosmetic
npm warn EBADENGINE on Node <22.12 that does not reflect an actual
incompatibility (DevForgeKit's CLI is pure ESM, not the CommonJS
require(esm) case that floor exists for).