fix(logging): keep debug logging in a packaged debug build

import.meta.env.DEV is true only under the vite dev server, but
scripts/build-android.sh produces the debug APK with a plain `bun run build` —
so the logger defaulted to warn there too and the debug package lost every
frontend message from logcat. `bun run android:logs` is a documented workflow
that depends on them.

vite now defines __JT_DEBUG_BUILD__ from Tauri's TAURI_ENV_DEBUG, which the CLI
sets while running beforeBuildCommand. The decision is split into a pure
resolveDefaultLogLevel(isDevServer, isDebugBuild) because neither
import.meta.env.DEV nor a vite define can be varied from inside a test.

Also replaces the pinned requirement counts in extract-traces.test.ts with
invariants. The pins guarded nothing the computeCoverage fixtures don't already
cover, while forcing every branch that adds a requirement to edit the numbers —
the comment above them had become a ledger of which branch contributed which row.

TRACES: | DR-204 | UT-201
This commit is contained in:
2026-08-20 20:06:51 +02:00
parent aeb29f916b
commit 34026d22b4
4 changed files with 89 additions and 24 deletions
+26
View File
@@ -8,6 +8,7 @@ import {
parseLogLevel,
readStoredLogLevel,
resetLogLevel,
resolveDefaultLogLevel,
setLogLevel,
type LogLevel,
} from "./logger";
@@ -316,3 +317,28 @@ describe("localStorage override", () => {
expect(spies.error).toHaveBeenCalledWith("[Boot] still reaches the console");
});
});
/**
* A packaged *debug* build must still log at debug level.
*
* `import.meta.env.DEV` is true only under the vite dev server. Both the debug
* and the release APK are produced by a plain `vite build`
* (scripts/build-android.sh runs `bun run build`), so gating on DEV alone
* silences the debug APK too — and `bun run android:logs` is a documented
* workflow that depends on those messages reaching logcat.
*
* TRACES: | DR-204 | UT-201
*/
describe("resolveDefaultLogLevel", () => {
it("logs at debug under the dev server", () => {
expect(resolveDefaultLogLevel(true, false)).toBe("debug");
});
it("logs at debug in a packaged debug build", () => {
expect(resolveDefaultLogLevel(false, true)).toBe("debug");
});
it("stays quiet in a packaged release build", () => {
expect(resolveDefaultLogLevel(false, false)).toBe("warn");
});
});