All checks were successful
check / check (push) Successful in 29s
DEBUG was hardcoded to true in src/shared/constants.js, so every wallet created from a build of main received the publicly committed test recovery phrase and was instantly drainable. There was no way to produce a non-debug build at all: the real entropy path in generateMnemonic() was dead code in every artifact. DEBUG is now a build-time constant injected by esbuild's define in build.js, alongside the existing __BUILD_* defines, and read by constants.js with the same typeof guard buildInfo.js uses. It is false unless the build was run with AUTISTMASK_DEBUG=1 — an exact match, so an unset, empty or mistyped value fails safe towards a release build. The build prints which mode it used, and make build-debug is a shim for the debug case. What DEBUG does when enabled is unchanged: the red banner plus the hardcoded test phrase, no new conditionals. Mnemonic generation deliberately keeps reading the compile-time constant rather than isDebug() from log.js, which also ORs in the runtime debugMode flag the settings toggle drives; routing it through isDebug() would let a user of a release build re-enable the known test phrase for real wallets. That is now recorded at the call site, in the README DEBUG Mode Policy, and covered by a regression test. New tests/wallet.test.js covers both build modes: with the flag off, two successive generateMnemonic() calls differ, both validate as BIP-39 phrases, both are 12 words, neither is DEBUG_MNEMONIC, and the result still derives a usable HD wallet — including with the runtime toggle forced on. With the flag on, DEBUG is true and the test phrase is returned, so the debug path stays proven rather than silently removed. Verified with make check (55 tests, lint, fmt-check all green), and with make build and make build-debug: all four bundles across dist/chrome and dist/firefox export DEBUG:!1 in a release build and DEBUG:!0 in a debug build, and AUTISTMASK_DEBUG=true likewise yields DEBUG:!1.
5.3 KiB
5.3 KiB