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
+29 -1
View File
@@ -115,9 +115,37 @@ export function parseLogLevel(raw: unknown): LogLevel | null {
return normalised in LEVEL_RANK ? (normalised as LogLevel) : null;
}
/**
* Injected by vite (see `vite.config.js`) from Tauri's `TAURI_ENV_DEBUG`, which
* the CLI sets while running `beforeBuildCommand`. Undefined outside a Tauri
* build — a bare `vite build`, or vitest — hence the `typeof` guard.
*/
declare const __JT_DEBUG_BUILD__: boolean | undefined;
/** Is this bundle inside a *debug* Tauri package (a debug APK, say)? */
function isDebugBuild(): boolean {
return typeof __JT_DEBUG_BUILD__ !== "undefined" && __JT_DEBUG_BUILD__ === true;
}
/**
* The default level, as a pure function of the two build facts it depends on.
*
* Split out from {@link defaultLogLevel} so it can be tested — neither
* `import.meta.env.DEV` nor a vite `define` can be varied from inside a test.
*
* 🔴 `isDevServer` alone is not enough. `import.meta.env.DEV` is true only under
* the vite dev server, and `scripts/build-android.sh` produces the debug APK
* with a plain `bun run build` — so gating on it silences the debug package as
* thoroughly as the release one, and `bun run android:logs` stops showing
* anything from the frontend.
*/
export function resolveDefaultLogLevel(isDevServer: boolean, isDebugBuild: boolean): LogLevel {
return isDevServer || isDebugBuild ? "debug" : "warn";
}
/** The level a build defaults to with no override present. */
export function defaultLogLevel(): LogLevel {
return import.meta.env?.DEV ? "debug" : "warn";
return resolveDefaultLogLevel(Boolean(import.meta.env?.DEV), isDebugBuild());
}
/**