From a4804e62c9d7e702524496019febacf0862154a8 Mon Sep 17 00:00:00 2001 From: pmaxhogan Date: Mon, 17 Aug 2026 14:20:55 -0500 Subject: [PATCH 1/5] feat(app): opt-in debug logging mode and safer, richer diagnostic bundles Closes #309, closes #204. instead of cloning GlobalSettings and patching one field, so a future secret-bearing field fails to compile here rather than leaking silently. Fixes three concrete leaks: pre/post_backup_hook command lines (a classic home for embedded secrets) are now redacted wholesale, custom_root_ca_path is hashed like every other path in the bundle, and proxy_url in PAC mode (a local file path, not a URL) is now hashed instead of passing the userinfo-strip-only path through untouched. The ProxyError Display leak the issue also flagged was already fixed by #208 - verified, not touched. always-visible amber warning, backed by a real runtime-reloadable tracing filter (logging.rs) that raises Driven's own crates to trace level while on. The toggle persists an epoch-ms expiry and auto-turns-off 24h after being enabled, enforced by a boot-time reconcile plus a periodic watchdog (debug_mode.rs) so the window is honoured even across a restart. The rolling log cap widens from 25 MB to 250 MB while debug mode is on. The diagnostic bundle gains a DEBUG_MODE.txt notice and an unredacted debug/engine_state.txt when debug mode is on - the one deliberate exception to the #204 redaction rules, gated on the user's explicit opt-in. Every bundle now also ships manifest.txt (entry name + size). Activity's export button shows an amber "Debug data included" chip while debug mode is on. Also closes the long-documented gap where global.log_level only exported RUST_LOG for the next launch - it now reloads the live filter too. Testing: 18 Rust redaction tests (leak-shaped fixtures for hooks, CA path, PAC-mode path, PAC-mode URL, and one full end-to-end fixture asserting the serialized bundle JSON), 5 debug_mode watchdog/expiry tests, 5 settings-persistence round-trip tests. cargo test -p driven-app --lib: 458 passed. cargo clippy --workspace --all-targets -- -D warnings: clean. cargo fmt --all -- --check: clean. pnpm vitest run: 793 passed across 60 files (new: activity-debug-chip.test.ts, plus PrivacyPage toggle tests in settings-pages.test.ts). vue-tsc --noEmit: clean. Linux visual baselines regenerated via `just visual-update` (privacy.png light+dark) and pass. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_019xKUm9vH4ifb5LHR5szy1v --- README.md | 9 +- src-tauri/src/app_state.rs | 61 ++ src-tauri/src/commands/dtos.rs | 22 + src-tauri/src/commands/settings.rs | 802 +++++++++++++++++- src-tauri/src/debug_mode.rs | 271 ++++++ src-tauri/src/lib.rs | 21 + src-tauri/src/logging.rs | 130 ++- .../linux/dark/settings.spec.ts/privacy.png | Bin 40506 -> 60644 bytes .../linux/light/settings.spec.ts/privacy.png | Bin 40332 -> 60219 bytes ui/src/__tests__/activity-debug-chip.test.ts | 134 +++ ui/src/__tests__/settings-components.test.ts | 2 + ui/src/__tests__/settings-nav.test.ts | 2 + ui/src/__tests__/settings-pages.test.ts | 63 ++ ui/src/__tests__/settings-stores.test.ts | 2 + ui/src/ipc/types.ts | 13 + ui/src/locales/en-US.json | 8 + ui/src/views/Activity.vue | 37 +- ui/src/views/settings/PrivacyPage.vue | 63 +- ui/test-support/fixtures.ts | 2 + 19 files changed, 1595 insertions(+), 47 deletions(-) create mode 100644 src-tauri/src/debug_mode.rs create mode 100644 ui/src/__tests__/activity-debug-chip.test.ts diff --git a/README.md b/README.md index e2b3c9f8..27783df4 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Notes: - ³¹ rclone and restic are command-line tools; their GUIs are separate third-party projects (for example RcloneView, Backrest). - ³² Duplicati runs as a background service with a local web UI plus a tray helper, not a native desktop app. - ³³ restic search and selective restore are driven from the CLI (or a mounted snapshot), not an in-app browser. -- ³⁴ Driven writes daily rolling logs (pruned at 14 days / 25 MB) that interleave backend tracing with the webview's own console output, and the in-app diagnostics export bundles them. +- ³⁴ Driven writes daily rolling logs (pruned at 14 days / 25 MB, widened to 250 MB while the opt-in Debug logging toggle is on) that interleave backend tracing with the webview's own console output, and the in-app diagnostics export bundles them. - ³⁵ rclone logs to a file only when you pass `--log-file` (rotation via `--log-file-max-size` and friends), and has no bundle export; its bug template asks you to attach a log you produced by hand. - ³⁶ Duplicati's "Create bug report" export is a genuine one-click bundle (system info plus an obfuscated copy of the local database), and its web UI has a live log view; file logging is opt-in via `--log-file`, defaults to warnings only, and does not rotate. - ³⁷ restic has no log-file option at all - output goes to stdout, and the only file logging is an unrotated `DEBUG_LOG` env var that its contributing guide asks you to redact yourself. @@ -189,7 +189,12 @@ These move: check each project's current docs before relying on a cell. - Rolling local log files covering both the backend and the webview console, collected into a one-click diagnostics bundle alongside a redacted summary of in-flight upload recovery state and a trailing window of process-memory - samples. + samples. An opt-in Debug logging toggle (Settings > Privacy & Data) raises + logs to per-file / IPC-trace / engine-state detail and widens the bundle + with an unredacted engine-state snapshot for the hardest bugs - it warns you + up front that this logs file names, full paths, and timing data, can slow + backups down, and turns itself off automatically after 24 hours; every other + part of the bundle stays redacted regardless. - In-app auto-update with signed update manifests and a stable / dev channel selector. - Anonymous, opt-out telemetry (coarse counts only; never file names, paths, or diff --git a/src-tauri/src/app_state.rs b/src-tauri/src/app_state.rs index a08e3564..4a3b445d 100644 --- a/src-tauri/src/app_state.rs +++ b/src-tauri/src/app_state.rs @@ -308,6 +308,12 @@ pub struct AppState { /// issue #308 (2026-08-17 follow-up): live bottleneck-classification /// sampling runtime (the Activity dashboard's Bottleneck stat tile). bottleneck: BottleneckRuntime, + /// issue #309: the debug-logging-mode 24h auto-off watchdog's task handle + /// + shutdown signal, so the app-quit drain joins it with no orphan + /// (mirrors [`UpdaterRuntime`]/[`IostatRuntime`]). No shared "hub" field + /// like those two - the watchdog only reads/writes the persisted settings + /// KV directly, nothing else on `AppState` needs to observe it. + debug_mode: DebugModeRuntime, /// The ONE in-flight streaming exclusion preview /// ([`crate::commands::exclusion_stream`]). The exclusion editor re-previews /// on every rule edit, so without a single-slot registry a user tweaking @@ -440,6 +446,22 @@ pub struct BottleneckRuntime { shutdown: std::sync::Mutex>>, } +/// issue #309: the debug-logging-mode 24h auto-off watchdog's runtime state +/// held on [`AppState`] - just the task's lifecycle slots (mirrors +/// [`UpdaterRuntime`]/[`TelemetryRuntime`]'s task+shutdown pair). No "hub" +/// field like [`BottleneckRuntime`]/[`IostatRuntime`]: the watchdog reads and +/// writes the persisted `global.debug_logging_*` settings directly via its +/// `StateRepo` handle, so there is nothing else on `AppState` for another +/// caller to read. +#[derive(Default)] +pub struct DebugModeRuntime { + /// The spawned watchdog task, behind `Option` so the shutdown drain can + /// TAKE + await it by value; `None` once drained / never spawned. + task: std::sync::Mutex>>, + /// The shutdown signal the watchdog `select!`s on. + shutdown: std::sync::Mutex>>, +} + /// M9b (SPEC s16): the anonymous-telemetry runtime state held on [`AppState`]. /// /// `task` + `shutdown` track the single app-wide periodic-ping task so the quit @@ -702,6 +724,7 @@ impl AppState { updater: UpdaterRuntime::default(), iostat: IostatRuntime::default(), bottleneck: BottleneckRuntime::default(), + debug_mode: DebugModeRuntime::default(), exclusion_previews: Arc::default(), preview_tree_cache: Arc::default(), telemetry: TelemetryRuntime::default(), @@ -1104,6 +1127,44 @@ impl AppState { .take() } + // --- issue #309: debug-logging-mode watchdog runtime ---------------------- + + /// Register the spawned watchdog task + its shutdown sender so the + /// app-quit drain can stop + join it with no orphan (mirrors + /// [`Self::set_bottleneck_task`]). + pub fn set_debug_mode_task(&self, task: JoinHandle<()>, shutdown: watch::Sender) { + *self + .debug_mode + .task + .lock() + .unwrap_or_else(|e| e.into_inner()) = Some(task); + *self + .debug_mode + .shutdown + .lock() + .unwrap_or_else(|e| e.into_inner()) = Some(shutdown); + } + + /// Signal the watchdog to stop and TAKE its handle so the quit drain can + /// await it. Mirrors [`Self::shutdown_bottleneck_task`]. + #[must_use] + pub fn shutdown_debug_mode_task(&self) -> Option> { + if let Some(tx) = self + .debug_mode + .shutdown + .lock() + .unwrap_or_else(|e| e.into_inner()) + .take() + { + let _ = tx.send(true); + } + self.debug_mode + .task + .lock() + .unwrap_or_else(|e| e.into_inner()) + .take() + } + // --- M9b telemetry runtime (SPEC s16) ---------------------------------- /// M9b: register the spawned periodic-ping task + its shutdown sender so the diff --git a/src-tauri/src/commands/dtos.rs b/src-tauri/src/commands/dtos.rs index ac980701..67604c05 100644 --- a/src-tauri/src/commands/dtos.rs +++ b/src-tauri/src/commands/dtos.rs @@ -968,6 +968,23 @@ pub struct GlobalSettings { /// the unchanged V1 behaviour; `false` exempts EXACTLY the reachability /// pause-reason family from the gate (a captive portal still pauses). pub pause_when_offline: bool, + /// Issue #309: debug logging mode. When `true` the live `tracing` filter + /// is raised to a verbose directive (per-file activity, IPC traces, state + /// transitions, reconcile/queue decisions) and the diagnostic bundle + /// gains a debug section; both cost noticeable performance and log + /// verbose paths/timings, so this defaults `false` and auto-clears itself + /// (see [`Self::debug_logging_expires_at_ms`]). `serde(default)` so a + /// `global` blob persisted before this field still deserialises as off. + #[serde(default)] + pub debug_logging_enabled: bool, + /// Issue #309: the epoch-ms deadline [`Self::debug_logging_enabled`] + /// auto-turns-off at (set to `now + 24h` whenever the toggle is switched + /// on). Persisted (not just an in-memory timer) so a restart mid-window + /// still honours the original deadline rather than granting a fresh 24h. + /// `None` when debug logging is off. `serde(default)` for the same + /// pre-#309 backward-compat reason as the toggle itself. + #[serde(default)] + pub debug_logging_expires_at_ms: Option, } /// V2 schedule-window settings (DESIGN s17). Mirrors @@ -1288,6 +1305,11 @@ pub struct GlobalSettingsPatch { pub proxy_url: Option>, /// See [`GlobalSettings::pause_when_offline`]. Absent = unchanged. pub pause_when_offline: Option, + /// See [`GlobalSettings::debug_logging_enabled`]. Absent = unchanged; + /// present = set it (the backend computes/clears + /// `debug_logging_expires_at_ms` itself - that field is not directly + /// patchable from the webview). + pub debug_logging_enabled: Option, } /// Partial SPEC s22 `telemetry` settings. diff --git a/src-tauri/src/commands/settings.rs b/src-tauri/src/commands/settings.rs index c6a7404c..a0d7df0a 100644 --- a/src-tauri/src/commands/settings.rs +++ b/src-tauri/src/commands/settings.rs @@ -34,6 +34,7 @@ use tauri::{AppHandle, State}; use driven_core::orchestrator::{MeteredMode, OrchestratorConfig}; use driven_core::priority::WorkPriority; use driven_core::state::StateRepo; +use driven_core::time::{Clock, SystemClock}; use driven_core::types::ErrorCode; use driven_vss::VssMode; @@ -410,6 +411,17 @@ pub async fn update_settings( // it actually changed), applied after persistence to (dis)arm + eagerly // launch the APFS snapshot broker. let mut apfs_snapshot_target: Option = None; + // Issue #309: the `global.debug_logging_enabled` transition (Some(new) iff + // it actually changed), applied after persistence to reload the live + // tracing filter + rolling-log cap. + let mut debug_logging_target: Option = None; + // The FINAL (post-patch) debug-logging state, so a same-request + // `log_level` change knows whether to reload the live filter directly or + // defer to the (more verbose) debug-mode filter that stays authoritative + // until debug logging turns off. Only meaningful when `new_log_level` is + // `Some` (which implies `patch.global` was present, the only place this + // is written). + let mut debug_logging_now_enabled = false; // spec 2026-07-31 s2: whether this patch touched `macos.menu_bar` at all, // so the menubar engine (Task 5) can redraw immediately after persistence // instead of waiting for its next poll tick. @@ -612,6 +624,19 @@ pub async fn update_settings( cur.pause_when_offline = v; orchestrator_affecting = true; } + // Issue #309: debug logging mode. `double_option` is deliberately NOT + // used here (unlike `pre_backup_hook`/`proxy_url`) - the toggle is a + // plain on/off, and the backend (not the webview) owns + // `debug_logging_expires_at_ms`. + if let Some(v) = g.debug_logging_enabled { + if v != cur.debug_logging_enabled { + debug_logging_target = Some(v); + } + let (enabled, expires_at_ms) = compute_debug_logging_state(v, SystemClock.now_ms()); + cur.debug_logging_enabled = enabled; + cur.debug_logging_expires_at_ms = expires_at_ms; + } + debug_logging_now_enabled = cur.debug_logging_enabled; store_group(repo, KEY_GLOBAL, &storage::Global::from(cur)).await?; } @@ -886,7 +911,14 @@ pub async fn update_settings( // Live log-level change (SPEC s22 `global.log_level`). if let Some(level) = &new_log_level { - apply_log_level(level); + apply_log_level(level, debug_logging_now_enabled); + } + + // Issue #309: debug logging mode toggle. Reload the live tracing filter + + // rolling-log cap immediately, so the change is visible without a + // restart (and without waiting for the watchdog's next tick). + if let Some(enabled) = debug_logging_target { + crate::debug_mode::apply(enabled); } // Locale change: re-render the tray (Rust-side i18n) + notify the frontend @@ -1182,6 +1214,12 @@ mod storage { // unchanged behaviour). #[serde(default = "default_pause_when_offline")] pub pause_when_offline: bool, + // Issue #309 (debug logging mode). `serde(default)` so a `global` blob + // persisted before this field still deserialises as off / unset. + #[serde(default)] + pub debug_logging_enabled: bool, + #[serde(default)] + pub debug_logging_expires_at_ms: Option, } /// Default hook timeout (seconds) for a pre-V2 `global` blob missing it. @@ -1237,6 +1275,8 @@ mod storage { proxy_mode: s.proxy_mode, proxy_url: s.proxy_url, pause_when_offline: s.pause_when_offline, + debug_logging_enabled: s.debug_logging_enabled, + debug_logging_expires_at_ms: s.debug_logging_expires_at_ms, } } } @@ -1264,6 +1304,8 @@ mod storage { proxy_mode: d.proxy_mode, proxy_url: d.proxy_url, pause_when_offline: d.pause_when_offline, + debug_logging_enabled: d.debug_logging_enabled, + debug_logging_expires_at_ms: d.debug_logging_expires_at_ms, } } } @@ -1563,18 +1605,39 @@ pub async fn reconcile_autostart_on_boot(app: &AppHandle, state: &dyn StateRepo) /// Apply a `tracing` max-level change at runtime (SPEC s22 `global.log_level`). /// -/// The process installs its layered subscriber once at boot (`logging::init`) -/// with no runtime-reloadable filter handle, so this cannot mutate the -/// LIVE subscriber's level in-process; what it CAN do honestly is export the -/// chosen level to `RUST_LOG` so it is the effective level on the next launch and -/// for any subsystem that reads the env. The persisted `global.log_level` is the -/// source of truth a future reload-handle wires to (it is recorded here so the -/// behaviour is not a silent no-op). -fn apply_log_level(level: &str) { +/// Issue #309 gave `logging.rs` a runtime-reloadable filter handle (it needed +/// one anyway, to switch debug logging mode on/off with no restart), so this +/// now ALSO reloads the LIVE subscriber via [`crate::logging::set_filter`] - +/// no longer just exporting to `RUST_LOG` for the next launch. The one +/// exception: while debug logging mode is on, the live filter is +/// [`crate::logging::DEBUG_MODE_FILTER`], which is deliberately MORE verbose +/// than any user-chosen `log_level`; reloading to `level` here would silently +/// undo that (and the auto-off watchdog would then have nothing to restore +/// to). So a `log_level` change while debug mode is active is recorded +/// (`RUST_LOG` + the persisted setting) but the live reload is deferred until +/// debug mode turns off, at which point `debug_mode::apply(false)` restores +/// [`crate::logging::DEFAULT_FILTER`] - which itself no longer reflects a +/// just-changed `log_level`. That residual gap (log_level changed while debug +/// mode was on restores to the OLD default filter, not the new level, once +/// debug mode turns off) is narrow enough to accept for now: re-saving Rules +/// after debug mode clears reloads the intended level. +fn apply_log_level(level: &str, debug_logging_enabled: bool) { // SAFETY note: `set_var` is process-global; we only ever write a validated // tracing level string, never untrusted bytes, and only from this command. std::env::set_var("RUST_LOG", level); - tracing::info!(target: TARGET, level, "log level setting updated (effective for new launches / env-reading subsystems)"); + if debug_logging_enabled { + tracing::info!( + target: TARGET, + level, + "log level setting updated (debug logging mode is active; the live filter stays at debug-mode verbosity until it turns off)" + ); + return; + } + if crate::logging::set_filter(level) { + tracing::info!(target: TARGET, level, "log level applied to the live process"); + } else { + tracing::info!(target: TARGET, level, "log level setting updated (effective for new launches / env-reading subsystems)"); + } } /// Apply a locale change: set the Rust-side i18n locale + re-render the tray, and @@ -1736,6 +1799,88 @@ fn schedule_settings_to_config(s: &ScheduleSettings) -> driven_core::types::Sche } } +// --------------------------------------------------------------------------- +// Debug logging mode (issue #309): shared read/write used by both +// `update_settings` (the toggle IPC) and `debug_mode::spawn_watchdog`'s +// 24h auto-off reconciler. +// --------------------------------------------------------------------------- + +/// Read the persisted `(global.debug_logging_enabled, +/// global.debug_logging_expires_at_ms)` pair. `None` on a state-DB read/parse +/// failure (the watchdog logs and retries next tick rather than treating a +/// transient DB error as "debug mode is off"). +pub(crate) async fn load_debug_logging_state(state: &dyn StateRepo) -> Option<(bool, Option)> { + let global: GlobalSettings = load_group::(state, KEY_GLOBAL) + .await + .ok()? + .map(Into::into) + .unwrap_or_else(default_global); + Some(( + global.debug_logging_enabled, + global.debug_logging_expires_at_ms, + )) +} + +/// Persist `debug_logging_enabled = false` + clear the expiry (issue #309's +/// 24h auto-off), preserving every other `global` field. Used by the +/// watchdog when the persisted window has elapsed; `update_settings` handles +/// the user-initiated off path inline (see the `global` group block) since it +/// already has the freshly-loaded `cur: GlobalSettings` in scope. +pub(crate) async fn persist_debug_logging_off(state: &dyn StateRepo) -> CommandResult<()> { + let mut global: GlobalSettings = load_group::(state, KEY_GLOBAL) + .await? + .map(Into::into) + .unwrap_or_else(default_global); + global.debug_logging_enabled = false; + global.debug_logging_expires_at_ms = None; + store_group(state, KEY_GLOBAL, &storage::Global::from(global)).await +} + +/// Test-only: persist an ARBITRARY `(enabled, expires_at_ms)` pair, bypassing +/// [`compute_debug_logging_state`]'s "switching on always extends from now" +/// rule. `debug_mode::reconcile`'s tests (in `debug_mode.rs`) need to +/// simulate an expiry already in the PAST - as if the 24h window elapsed +/// while the app was closed - which the production write path +/// (`update_settings`) can never produce for a live save. +#[cfg(test)] +pub(crate) async fn set_debug_logging_state_for_test( + state: &dyn StateRepo, + enabled: bool, + expires_at_ms: Option, +) { + let mut global: GlobalSettings = load_group::(state, KEY_GLOBAL) + .await + .expect("load global group") + .map(Into::into) + .unwrap_or_else(default_global); + global.debug_logging_enabled = enabled; + global.debug_logging_expires_at_ms = expires_at_ms; + store_group(state, KEY_GLOBAL, &storage::Global::from(global)) + .await + .expect("store global group"); +} + +/// Issue #309: compute the new `(debug_logging_enabled, +/// debug_logging_expires_at_ms)` pair for a patched `enabled` value at +/// `now_ms`. Extracted as a PURE function (no state-DB access, no +/// `AppHandle`) so the 24h-window arithmetic is unit-testable directly - +/// `update_settings` needs a live `AppHandle` for its side effects, which +/// would otherwise drag every caller of this arithmetic into an +/// integration-style test. +/// +/// Switching ON (re-)starts the window from `now_ms`, including the +/// "already on, save fires true again" case: an explicit toggle is a fresh +/// "keep this on" signal, so extending the window is correct rather than +/// letting a coincidental re-save silently shorten it to whatever was left. +/// Switching off always clears the expiry. +fn compute_debug_logging_state(enabled: bool, now_ms: i64) -> (bool, Option) { + if enabled { + (true, Some(now_ms + crate::debug_mode::AUTO_OFF_WINDOW_MS)) + } else { + (false, None) + } +} + // --------------------------------------------------------------------------- // export_diagnostic_bundle (SPEC s11.6, s18) // --------------------------------------------------------------------------- @@ -1754,10 +1899,15 @@ fn schedule_settings_to_config(s: &ScheduleSettings) -> driven_core::types::Sche /// /// The bundle (SPEC s18) carries `version.txt`, `os.txt`, a REDACTED /// `settings_redacted.json`, `schema.txt` (real PRAGMA user_version + table -/// counts), `activity_last_30d.csv`, `logs/`, `crashes/`, and -/// `redaction-policy.txt`. Every secret-bearing field (refresh tokens, recovery +/// counts), `pending_ops.txt`, `memory.txt`, `activity_last_30d.csv`, `logs/`, +/// `crashes/`, `redaction-policy.txt`, and `manifest.txt` (issue #309: every +/// entry's name + size). Every secret-bearing field (refresh tokens, recovery /// phrases, keys, master key, account emails, drive folder names, local paths, -/// Drive file ids) is redacted or hashed before it enters the ZIP. +/// Drive file ids) is redacted or hashed before it enters the ZIP. Issue #309: +/// while debug logging mode is on, the bundle ALSO gets `DEBUG_MODE.txt` and a +/// deliberately UNREDACTED `debug/engine_state.txt` - the one exception to the +/// paragraph above, gated on the user's explicit opt-in (see +/// [`DEBUG_MODE_BUNDLE_NOTICE`]). #[tauri::command] pub async fn export_diagnostic_bundle( app: AppHandle, @@ -1860,13 +2010,151 @@ async fn build_diagnostic_zip(app: &AppHandle, state: &dyn StateRepo) -> Command tokio::time::sleep(std::time::Duration::from_millis(150)).await; add_logs_and_crashes(&mut zip, &redactor); + // Issue #309: while debug logging mode is ON, add a clearly-labelled, + // DELIBERATELY UNREDACTED engine-state snapshot. This is the one place + // the issue #204 redaction rules do not apply (by explicit user opt-in - + // the whole point of debug mode, and the amber Settings warning tells the + // user exactly this before they turn it on). Every OTHER section above + // stays redacted regardless of debug mode: the toggle means "log/bundle + // MORE", not "stop redacting what was already safe to redact". + if settings.global.debug_logging_enabled { + zip.add_file("DEBUG_MODE.txt", DEBUG_MODE_BUNDLE_NOTICE.as_bytes()); + let engine_state = build_debug_engine_state(state).await; + zip.add_file("debug/engine_state.txt", engine_state.as_bytes()); + tracing::info!(target: TARGET, "diagnostic bundle: debug logging mode was on; included unredacted engine_state.txt"); + } + // redaction-policy.txt (SPEC s18): tell the recipient the bundle's threat // model + exactly what was redacted. zip.add_file("redaction-policy.txt", REDACTION_POLICY.as_bytes()); + // manifest.txt (issue #309 bundle-usefulness follow-up): every entry + // added above, with its size, so a recipient can see the bundle's shape + // without unzipping it. Added LAST (after every other entry) so it is + // complete; it cannot list itself. + let manifest = zip.manifest_so_far(); + zip.add_file("manifest.txt", manifest.as_bytes()); + Ok(zip.finish()) } +/// Issue #309: the notice at the top of a bundle captured while debug logging +/// mode was on, explaining why `debug/` and the rolling `logs/` in this +/// bundle are more detailed (and less redacted) than usual. +const DEBUG_MODE_BUNDLE_NOTICE: &str = "\ +Debug logging mode was ON when this bundle was captured. +========================================================= + +The user explicitly opted into this (Settings > Debug logging), after an +on-screen warning that it would record file names, full paths, timing data, +and other personal information into logs and diagnostic bundles. + +What that means for THIS bundle: +- logs/ contains TRACE-level output for Driven's own code: per-file activity, + IPC command traces, state transitions, and reconcile/queue decisions - far + more detailed than the default INFO-level logs. +- debug/engine_state.txt is a RAW, UNREDACTED snapshot of engine state + (backup source local paths, pending-op relative paths, ...). Every OTHER + file in this bundle (settings_redacted.json, activity_last_30d.csv, + pending_ops.txt, the rest of logs/) is STILL redacted exactly as documented + in redaction-policy.txt - debug mode does not weaken that. This file is the + one deliberate exception. + +Debug logging mode turns itself off automatically 24 hours after it was +enabled, so this state is not persistent. +"; + +/// Issue #309: a RAW (unredacted) snapshot of engine state for the diagnostic +/// bundle's `debug/engine_state.txt`, included only while debug logging mode +/// is on (see [`build_diagnostic_zip`]). Deliberately mirrors +/// [`build_pending_ops_summary`]'s pending-ops section but WITHOUT the +/// redactor - support gets the real paths, which is the entire point of +/// opting into debug mode. Best-effort per section: one query failing does +/// not blank the rest. +async fn build_debug_engine_state(state: &dyn StateRepo) -> String { + use driven_core::time::{Clock, SystemClock}; + let now = SystemClock.now_ms(); + + let mut out = String::from( + "# Engine state snapshot (issue #309 debug logging mode).\n\ + # UNREDACTED - see DEBUG_MODE.txt for why.\n\ + # Secrets (OAuth tokens, encryption keys, upload-session URLs) are\n\ + # STILL never included: they never enter this process's readable\n\ + # settings/state, so there is nothing here to redact away.\n\n", + ); + + out.push_str("## backup_sources\n"); + let sources = match state.list_sources().await { + Ok(s) => s, + Err(e) => { + out.push_str(&format!("(list_sources failed: {e})\n\n")); + Vec::new() + } + }; + if sources.is_empty() { + out.push_str("(none)\n"); + } + for s in &sources { + out.push_str(&format!( + "- id={} name={:?} enabled={} local_path={} drive_folder={} deep_verify_interval_secs={} last_full_scan_at={:?} last_deep_verify_at={:?} exclude_patterns={:?}\n", + s.id, + s.display_name, + s.enabled, + s.local_path, + s.drive_folder_path, + s.deep_verify_interval_secs, + s.last_full_scan_at, + s.last_deep_verify_at, + s.exclude_patterns, + )); + } + + out.push_str("\n## pending_ops (unredacted)\n"); + let mut any_pending = false; + for s in &sources { + let ops = match state.get_pending_ops_for_source(s.id).await { + Ok(o) => o, + Err(e) => { + out.push_str(&format!( + "(get_pending_ops_for_source failed for source id={}: {e})\n", + s.id + )); + continue; + } + }; + if ops.is_empty() { + continue; + } + any_pending = true; + out.push_str(&format!( + "source id={} local_path={}: {} pending op(s)\n", + s.id, + s.local_path, + ops.len() + )); + for op in ops { + out.push_str(&format!( + " - type={} attempts={} age_ms={} relative_path={}\n", + op.op_type, + op.attempts, + now.saturating_sub(op.created_at), + op.relative_path, + )); + } + } + if !any_pending { + out.push_str("(no pending ops)\n"); + } + + out.push_str("\n## memory_trend (unix_ms rss_bytes)\n"); + for (ts_ms, rss) in crate::memlog::recent_samples() { + out.push_str(&format!("{ts_ms} {rss}\n")); + } + + out.push_str(&format!("\ncaptured_at_ms={now}\n")); + out +} + /// SPEC s18: the maximum bytes of log content the bundle carries (the spec's /// "last 50 MB of tracing output"). A per-file cap is applied so one huge log /// cannot dominate; the newest files are preferred. @@ -2676,7 +2964,7 @@ fn os_descriptor() -> String { /// redaction here is the install id). #[derive(serde::Serialize)] struct RedactedSettings { - global: GlobalSettings, + global: RedactedGlobalSettings, telemetry: RedactedTelemetry, updater: UpdaterSettings, ui: UiSettings, @@ -2684,6 +2972,13 @@ struct RedactedSettings { windows: Option, #[serde(skip_serializing_if = "Option::is_none")] macos: Option, + /// R2-P2-4 bundle-completeness follow-up: these three standalone toggles + /// (SPEC s22) were silently OMITTED from every prior bundle (not leaked - + /// just missing), which made a bundle less useful for diagnosing a + /// bundling / scrub / drill issue. None are secret-bearing. + bundle_small_files: bool, + scrub: crate::commands::dtos::ScrubSettings, + drill: crate::commands::dtos::DrillSettings, } /// Telemetry settings with the stable `install_id` replaced by a per-bundle @@ -2695,18 +2990,69 @@ struct RedactedTelemetry { endpoint: String, } +/// Issue #204: the redacted `global` group. Mirrors [`GlobalSettings`] +/// FIELD-FOR-FIELD (deliberately, not a `.clone()` + patch) so a NEW +/// secret-bearing field added to [`GlobalSettings`] in the future fails to +/// COMPILE here until someone decides how it is redacted - the failure mode +/// for a forgotten field is a build error, not a silent leak into a bundle +/// handed to a stranger. This is the structural fix for issue #204: the +/// pre-fix `redact_settings` cloned `GlobalSettings` wholesale and patched +/// only `proxy_url`, so `pre_backup_hook` / `post_backup_hook` (command lines, +/// a classic home for embedded secrets) and `custom_root_ca_path` (a path +/// that routinely embeds the OS username) rode along raw. +#[derive(serde::Serialize)] +#[serde(rename_all = "camelCase")] +struct RedactedGlobalSettings { + auto_start_on_login: bool, + default_concurrent_uploads: Option, + adaptive_parallelism_enabled: bool, + bandwidth_cap_mbps: Option, + skip_on_battery: bool, + skip_on_metered: bool, + scan_interval_secs: u32, + deep_verify_interval_secs: u32, + io_priority: String, + log_level: String, + schedule: ScheduleSettings, + /// Issue #204: presence is diagnostically useful (whether a hook is + /// configured at all, and roughly how long the command is); the CONTENTS + /// are not, and are a classic home for an embedded secret + /// (`curl -H "Authorization: ..."`, an rclone flag, a password passed as + /// a bare CLI arg) - so the command text itself never leaves the machine. + pre_backup_hook: Option, + post_backup_hook: Option, + hook_timeout_secs: u32, + metered_mode: String, + metered_bandwidth_cap_mbps: Option, + /// Issue #204: an absolute path routinely embeds the OS username. The + /// rest of the bundle already hashes paths to `` (the + /// [`Redactor`] used for logs/activity/pending-ops); this field is routed + /// through the SAME `stable_hash` so occurrences correlate consistently. + custom_root_ca_path: Option, + proxy_mode: String, + /// Issue #204: PAC mode makes this a local FILE PATH rather than a URL, + /// so the issue #34 userinfo-strip alone does not cover it - the path + /// (username and all) went out verbatim. [`redact_proxy_url_field`] + /// applies BOTH the userinfo strip (manual-mode URL) and the absolute- + /// path-run hash (PAC-mode local path); each is a no-op on the shape the + /// other targets, so one function is correct for both modes. + proxy_url: Option, + pause_when_offline: bool, + /// Issue #309: not secret-bearing (a bool + an epoch-ms deadline), so it + /// passes through unchanged - useful context for "was debug mode on when + /// this bundle was captured". + debug_logging_enabled: bool, + debug_logging_expires_at_ms: Option, +} + /// Redact the secret-bearing fields of a [`SettingsDto`] for the bundle -/// (SPEC s18): the telemetry install id becomes `installid_`, and the -/// issue #34 proxy URL has any `user:password@` userinfo stripped. +/// (SPEC s18 / issue #204): the telemetry install id becomes +/// `installid_`; the proxy URL / PAC path has userinfo stripped and any +/// local-path shape hashed; the custom root CA path is hashed; the pre/post +/// backup hook commands are redacted wholesale (presence + length only). fn redact_settings(s: &SettingsDto) -> RedactedSettings { - let mut global = s.global.clone(); - // Issue #34 follow-up: a `manual`-mode proxy URL may embed basic-auth - // credentials (`http://user:password@proxy.corp:8080`). The bundle is meant - // to be shareable with support, so the userinfo must never ride along - the - // host:port survives because that is the diagnostically useful part. - global.proxy_url = global.proxy_url.as_deref().map(redact_proxy_userinfo); RedactedSettings { - global, + global: redact_global_settings(&s.global), telemetry: RedactedTelemetry { enabled: s.telemetry.enabled, install_id: format!("installid_{}", stable_hash(&s.telemetry.install_id)), @@ -2716,9 +3062,79 @@ fn redact_settings(s: &SettingsDto) -> RedactedSettings { ui: s.ui.clone(), windows: s.windows.clone(), macos: s.macos.clone(), + bundle_small_files: s.bundle_small_files, + scrub: s.scrub, + drill: s.drill, + } +} + +/// See [`RedactedGlobalSettings`] doc: the field-for-field redaction issue +/// #204 asks for, so a future new secret-bearing field cannot ride along raw +/// by accident (it would fail to compile here first). +fn redact_global_settings(g: &GlobalSettings) -> RedactedGlobalSettings { + RedactedGlobalSettings { + auto_start_on_login: g.auto_start_on_login, + default_concurrent_uploads: g.default_concurrent_uploads, + adaptive_parallelism_enabled: g.adaptive_parallelism_enabled, + bandwidth_cap_mbps: g.bandwidth_cap_mbps, + skip_on_battery: g.skip_on_battery, + skip_on_metered: g.skip_on_metered, + scan_interval_secs: g.scan_interval_secs, + deep_verify_interval_secs: g.deep_verify_interval_secs, + io_priority: g.io_priority.clone(), + log_level: g.log_level.clone(), + schedule: g.schedule.clone(), + pre_backup_hook: redact_hook_command(g.pre_backup_hook.as_deref()), + post_backup_hook: redact_hook_command(g.post_backup_hook.as_deref()), + hook_timeout_secs: g.hook_timeout_secs, + metered_mode: g.metered_mode.clone(), + metered_bandwidth_cap_mbps: g.metered_bandwidth_cap_mbps, + custom_root_ca_path: g + .custom_root_ca_path + .as_ref() + .map(|p| format!("", stable_hash(&p.to_string_lossy()))), + proxy_mode: g.proxy_mode.clone(), + proxy_url: g.proxy_url.as_deref().map(redact_proxy_url_field), + pause_when_offline: g.pause_when_offline, + debug_logging_enabled: g.debug_logging_enabled, + debug_logging_expires_at_ms: g.debug_logging_expires_at_ms, } } +/// Issue #204: redact a pre/post-backup hook command WHOLESALE. A hook +/// command line is a classic home for an embedded secret +/// (`curl -H "Authorization: Bearer ..."`, an rclone `--password` flag, a +/// token passed as a bare CLI arg) that no shape-based scrub (email / token +/// prefix / path pattern) can be trusted to catch, so unlike every other +/// field here this is not a hash - the exact command text must never leave +/// the machine. What survives is purely diagnostic: THAT a hook is +/// configured, and its rough length (a `pre_backup_hook` that's 4000 +/// characters long is itself a useful clue; the empty-vs-set case is the +/// most common one support needs to distinguish). +fn redact_hook_command(cmd: Option<&str>) -> Option { + cmd.map(|c| format!("", c.chars().count())) +} + +/// Issue #204: redact a `global.proxy_url` value for BOTH shapes it can take +/// (see [`GlobalSettings::proxy_url`] doc) without needing to branch on +/// `proxy_mode`: +/// - `manual` mode: a URL that may carry `user:password@` userinfo - +/// [`redact_proxy_userinfo`] strips it, keeping `scheme://host:port`. +/// - `pac` mode: a URL (same userinfo risk) OR a local FILE PATH (which +/// [`redact_proxy_userinfo`] does NOT touch - it has no `://` scheme +/// separator to key off - so the path, username and all, would otherwise +/// ride along verbatim). [`redact_absolute_path_runs`] catches that shape. +/// +/// Each pass is a no-op on the shape the other targets (a bare local path has +/// no `://` for the userinfo strip to find; a remote URL never matches the +/// absolute-path-run start patterns), so applying both unconditionally is +/// correct regardless of mode and needs no `proxy_mode` branch to drift out +/// of sync with this function. +fn redact_proxy_url_field(raw: &str) -> String { + let stripped = redact_proxy_userinfo(raw); + redact_absolute_path_runs(&stripped) +} + /// Strip any `user:password@` userinfo from a proxy URL, keeping the scheme and /// `host:port` (issue #34 follow-up; see [`redact_settings`]). /// @@ -2816,6 +3232,13 @@ What is redacted / never included: Caveat: despite this policy, free-text you supplied (e.g. a display name) is not guaranteed to be scrubbed if it appears in a field this policy did not anticipate. Review the bundle before sharing if that concerns you. + +Debug logging mode exception (issue #309): if `DEBUG_MODE.txt` is present in +this bundle, `debug/engine_state.txt` is DELIBERATELY UNREDACTED (real local +paths and pending-op relative paths). This happens only when you explicitly +turned on Settings > Debug logging, which warns you before you do it. Every +file listed above this note stays redacted exactly as described, debug mode +or not. "; // --------------------------------------------------------------------------- @@ -3155,6 +3578,10 @@ fn default_global() -> GlobalSettings { // spec 2026-08-01: pause on lost network reachability by default // (unchanged V1 behaviour). pause_when_offline: true, + // Issue #309: debug logging mode ships off by default (it costs + // performance and logs paths/timings, so it is opt-in only). + debug_logging_enabled: false, + debug_logging_expires_at_ms: None, } } @@ -3279,6 +3706,28 @@ impl ZipWriter { }); } + /// Issue #309 bundle-usefulness follow-up: a plain-text manifest (name + + /// uncompressed bytes) of every entry added SO FAR, so a recipient can see + /// at a glance how big each bundle section is without unzipping. Must be + /// called - and its output added via [`Self::add_file`] - BEFORE + /// [`Self::finish`]; it necessarily cannot list itself. + fn manifest_so_far(&self) -> String { + let mut out = String::from( + "# Diagnostic bundle manifest: nameuncompressed bytes.\n\ + # (this file is not itself listed)\n", + ); + let mut total: u64 = 0; + for e in &self.entries { + out.push_str(&format!("{}\t{}\n", e.name, e.size)); + total += u64::from(e.size); + } + out.push_str(&format!( + "# total: {total} bytes across {} entries\n", + self.entries.len() + )); + out + } + /// Emit the central directory + end-of-central-directory record and return /// the finished archive bytes. fn finish(mut self) -> Vec { @@ -3545,6 +3994,97 @@ mod tests { cleanup(dir); } + // ------------------------------------------------------------------- + // Issue #309: debug logging mode - 24h auto-off expiry arithmetic + + // persistence round-trip. + // ------------------------------------------------------------------- + + #[test] + fn compute_debug_logging_state_switching_on_sets_a_24h_expiry() { + let (enabled, expires_at_ms) = compute_debug_logging_state(true, 1_000); + assert!(enabled); + assert_eq!( + expires_at_ms, + Some(1_000 + crate::debug_mode::AUTO_OFF_WINDOW_MS) + ); + } + + #[test] + fn compute_debug_logging_state_switching_off_clears_the_expiry() { + let (enabled, expires_at_ms) = compute_debug_logging_state(false, 1_000); + assert!(!enabled); + assert_eq!(expires_at_ms, None); + } + + #[test] + fn compute_debug_logging_state_re_enabling_extends_from_now_not_from_the_old_deadline() { + // A user who re-saves Settings while debug mode is already on gets a + // FRESH 24h window from now, not whatever was left of the old one - + // the explicit toggle is a "keep this on" signal. + let later_now = 50_000; + let (enabled, expires_at_ms) = compute_debug_logging_state(true, later_now); + assert!(enabled); + assert_eq!( + expires_at_ms, + Some(later_now + crate::debug_mode::AUTO_OFF_WINDOW_MS) + ); + } + + #[tokio::test] + async fn debug_logging_defaults_off_with_no_expiry() { + let (repo, dir) = seeded_repo().await; + let (enabled, expires_at_ms) = load_debug_logging_state(&repo) + .await + .expect("read debug logging state"); + assert!(!enabled, "debug logging mode defaults off"); + assert_eq!(expires_at_ms, None); + cleanup(dir); + } + + #[tokio::test] + async fn debug_logging_enable_then_disable_round_trips_through_persistence() { + let (repo, dir) = seeded_repo().await; + + // Turn it on with a computed expiry (mirrors what `update_settings` + // does), persist, and read it back. + let mut cur: GlobalSettings = load_group::(&repo, KEY_GLOBAL) + .await + .unwrap() + .map(Into::into) + .unwrap(); + let (enabled, expires_at_ms) = compute_debug_logging_state(true, 12_345); + cur.debug_logging_enabled = enabled; + cur.debug_logging_expires_at_ms = expires_at_ms; + store_group(&repo, KEY_GLOBAL, &storage::Global::from(cur)) + .await + .unwrap(); + + let (loaded_enabled, loaded_expires_at_ms) = + load_debug_logging_state(&repo).await.expect("read state"); + assert!(loaded_enabled); + assert_eq!( + loaded_expires_at_ms, + Some(12_345 + crate::debug_mode::AUTO_OFF_WINDOW_MS) + ); + + // The watchdog's auto-off path: `persist_debug_logging_off` clears + // BOTH fields and leaves the rest of the group untouched. + persist_debug_logging_off(&repo) + .await + .expect("persist auto-off"); + let (off_enabled, off_expires_at_ms) = + load_debug_logging_state(&repo).await.expect("read state"); + assert!(!off_enabled, "auto-off must clear the enabled flag"); + assert_eq!(off_expires_at_ms, None, "auto-off must clear the expiry"); + + let dto = load_settings_dto(&repo).await.unwrap(); + assert_eq!( + dto.global.scan_interval_secs, 600, + "auto-off must not disturb unrelated global fields" + ); + cleanup(dir); + } + #[test] fn vss_helper_status_degrades_only_on_windows_when_unelevated() { // Off Windows: never supported, never degraded. @@ -4085,6 +4625,222 @@ mod tests { ); } + /// Build a minimal [`SettingsDto`] for the issue #204 redaction tests below, + /// with the caller's `global` and everything else defaulted. + fn dto_with_global(global: GlobalSettings) -> SettingsDto { + SettingsDto { + global, + telemetry: TelemetrySettings { + enabled: false, + install_id: "id".to_string(), + endpoint: "https://e".to_string(), + }, + updater: default_updater(), + ui: default_ui(), + windows: None, + macos: None, + bundle_small_files: false, + scrub: driven_core::scrub::ScrubConfig::default().into(), + drill: driven_core::drill::DrillConfig::default().into(), + } + } + + #[test] + fn redact_settings_redacts_backup_hook_commands_wholesale_issue_204() { + // Issue #204: a hook command line is a classic home for an embedded + // secret (an Authorization header, a password CLI arg). Both fields + // must be redacted WHOLESALE, not scrubbed by shape - the leak-shaped + // fixture below has neither an `@email` nor a `ya29.`/`1//` token + // prefix, so the old whole-clone redaction (which never touched these + // fields at all) would ship it completely raw. + let mut global = default_global(); + global.pre_backup_hook = + Some(r#"curl -H "Authorization: Bearer sk-live-51H8xyz9SECRET" https://hooks.example.com/pre"#.to_string()); + global.post_backup_hook = + Some("rclone sync --password hunter2plaintext /src remote:".to_string()); + let dto = dto_with_global(global); + + let red = redact_settings(&dto); + let pre = red + .global + .pre_backup_hook + .as_deref() + .expect("pre hook present"); + let post = red + .global + .post_backup_hook + .as_deref() + .expect("post hook present"); + assert!( + !pre.contains("sk-live-51H8xyz9SECRET"), + "pre-hook secret leaked: {pre}" + ); + assert!( + !pre.contains("Bearer"), + "pre-hook command text leaked: {pre}" + ); + assert!( + pre.starts_with("` - shipping this one + // field verbatim was an internal inconsistency, not a judgement call. + let mut global = default_global(); + global.custom_root_ca_path = Some(PathBuf::from( + "/Users/patsmith-secret/corp-certs/root-ca.pem", + )); + let dto = dto_with_global(global); + + let red = redact_settings(&dto); + let path = red + .global + .custom_root_ca_path + .as_deref() + .expect("ca path present"); + assert!( + !path.contains("patsmith-secret"), + "the OS username must be gone: {path}" + ); + assert!( + path.starts_with("() else { + tracing::warn!(target: TARGET, "AppState not managed; debug-mode watchdog not started"); + return; + }; + let state: Arc = Arc::clone(app_state.state()); + let (shutdown_tx, mut shutdown_rx) = tokio::sync::watch::channel(false); + + let task = tokio::spawn(async move { + // Boot-time reconciliation FIRST: apply whatever is currently + // persisted (including an immediate auto-off if the 24h deadline + // already passed while the app was closed) before the first tick. + reconcile(state.as_ref()).await; + + let mut ticker = tokio::time::interval(CHECK_INTERVAL); + ticker.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); + loop { + tokio::select! { + biased; + res = shutdown_rx.changed() => { + match res { + Ok(()) if *shutdown_rx.borrow() => break, + Ok(()) => {} + Err(_) => break, + } + } + _ = ticker.tick() => { + reconcile(state.as_ref()).await; + } + } + } + tracing::debug!(target: TARGET, "debug-mode watchdog exited"); + }); + + app_state.set_debug_mode_task(task, shutdown_tx); + tracing::info!( + target: TARGET, + interval_ms = CHECK_INTERVAL.as_millis() as u64, + "debug-mode watchdog started" + ); +} + +/// Read the persisted debug-logging state and reconcile the live process + +/// (if the window expired) the persisted settings with it. Best-effort: a +/// state-DB read/write failure is logged and skipped - the next tick (or the +/// next restart) tries again, and the live process is never left MORE +/// verbose than the persisted settings say it should be for longer than one +/// `CHECK_INTERVAL`. +async fn reconcile(state: &dyn StateRepo) { + let Some((enabled, expires_at_ms)) = + crate::commands::settings::load_debug_logging_state(state).await + else { + tracing::debug!(target: TARGET, "could not read debug-logging settings; skipping this reconcile pass"); + return; + }; + + if !enabled { + // Off is always applied (idempotent - a reload to the same filter is + // cheap), so a process that booted before `apply(false)` ever ran + // (e.g. the reload handle was not installed yet at settings-load + // time) still converges to the correct live filter here. + apply(false); + return; + } + + let now_ms = SystemClock.now_ms(); + let expired = expires_at_ms.is_none_or(|deadline| now_ms >= deadline); + if expired { + tracing::info!( + target: TARGET, + expires_at_ms, + now_ms, + "debug logging mode's 24h window elapsed; turning it off automatically" + ); + if let Err(err) = crate::commands::settings::persist_debug_logging_off(state).await { + tracing::warn!(target: TARGET, %err, "failed to persist debug-logging auto-off; will retry next tick"); + // Still apply off to the LIVE process even if the persist failed, + // so at minimum this process's verbosity/log-cap correct + // themselves now rather than staying wrong until the retry lands. + apply(false); + return; + } + apply(false); + return; + } + + apply(true); +} + +#[cfg(test)] +mod tests { + use super::*; + use driven_core::state::sqlite::SqliteStateRepo; + + #[test] + fn auto_off_window_is_24_hours() { + assert_eq!(AUTO_OFF_WINDOW_MS, 24 * 60 * 60 * 1000); + } + + /// A temp-backed state repo with the SPEC s22 settings seeded (mirrors + /// `commands::settings::tests::seeded_repo` - duplicated rather than + /// shared since that helper is private to its module and this module has + /// no other reason to depend on it). + async fn seeded_repo() -> (SqliteStateRepo, std::path::PathBuf) { + let nonce = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|d| d.as_nanos()) + .unwrap_or(0); + let dir = std::env::temp_dir().join(format!("driven-debug-mode-test-{nonce}-{:p}", &nonce)); + std::fs::create_dir_all(&dir).expect("create temp dir"); + let repo = SqliteStateRepo::open(&dir.join("state.db")) + .await + .expect("open seeded state repo"); + (repo, dir) + } + + fn cleanup(dir: std::path::PathBuf) { + let _ = std::fs::remove_dir_all(dir); + } + + #[tokio::test] + async fn reconcile_is_a_no_op_when_debug_logging_was_never_enabled() { + let (repo, dir) = seeded_repo().await; + // Must not panic / error on the default (off, no expiry) state - this + // is the path every normal boot takes. + reconcile(&repo).await; + let (enabled, expires_at_ms) = crate::commands::settings::load_debug_logging_state(&repo) + .await + .expect("read state"); + assert!(!enabled); + assert_eq!(expires_at_ms, None); + cleanup(dir); + } + + #[tokio::test] + async fn reconcile_auto_turns_off_an_expired_window() { + let (repo, dir) = seeded_repo().await; + // Simulate "debug mode was switched on a long time ago" - an expiry + // far in the past, as if the app had been closed past the 24h + // deadline (issue #309: "turns itself off automatically after 24 + // hours" must hold even across a restart, not just while running). + crate::commands::settings::set_debug_logging_state_for_test(&repo, true, Some(1)).await; + + reconcile(&repo).await; + + let (enabled, expires_at_ms) = crate::commands::settings::load_debug_logging_state(&repo) + .await + .expect("read state"); + assert!(!enabled, "an expired window must be turned off"); + assert_eq!(expires_at_ms, None, "the expiry must be cleared with it"); + cleanup(dir); + } + + #[tokio::test] + async fn reconcile_turns_off_a_missing_expiry_defensively() { + // `enabled=true` with `expires_at_ms=None` should never happen through + // the normal write path (compute_debug_logging_state always sets an + // expiry when enabling), but a corrupted / hand-edited DB row could + // produce it - fail closed to OFF rather than staying verbose forever + // with no deadline. + let (repo, dir) = seeded_repo().await; + crate::commands::settings::set_debug_logging_state_for_test(&repo, true, None).await; + + reconcile(&repo).await; + + let (enabled, _) = crate::commands::settings::load_debug_logging_state(&repo) + .await + .expect("read state"); + assert!(!enabled, "a missing expiry must fail closed to off"); + cleanup(dir); + } + + #[tokio::test] + async fn reconcile_keeps_a_still_valid_window_enabled() { + let (repo, dir) = seeded_repo().await; + // An expiry far in the future - the window has not elapsed yet. + let far_future_ms = SystemClock.now_ms() + AUTO_OFF_WINDOW_MS; + crate::commands::settings::set_debug_logging_state_for_test( + &repo, + true, + Some(far_future_ms), + ) + .await; + + reconcile(&repo).await; + + let (enabled, expires_at_ms) = crate::commands::settings::load_debug_logging_state(&repo) + .await + .expect("read state"); + assert!(enabled, "a still-valid window must stay on"); + assert_eq!( + expires_at_ms, + Some(far_future_ms), + "reconcile must not touch a still-valid expiry" + ); + cleanup(dir); + } +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 7f5a2e80..3065c523 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -30,6 +30,10 @@ mod bottleneck_hub; // `DialogToken`) against the real implementation. pub mod commands; mod crypto_provider_impl; +// Issue #309: debug logging mode's POLICY half (persisted 24h auto-off +// watchdog + applying the toggle to the live process). `logging.rs` owns the +// MECHANISM (the reloadable tracing filter + dynamic log-file cap). +mod debug_mode; mod drill_probe; // NOTE: the "run elevated" module was removed pre-V1 (2026-06-25). It implemented // WHOLE-APP elevation (a /RL HIGHEST Task Scheduler logon task + a UAC restart), @@ -287,6 +291,9 @@ struct ShutdownHandles { iostat: Option>, /// issue #308: the 1 Hz bottleneck-classification sampler, if it was started. bottleneck: Option>, + /// issue #309: the debug-logging-mode 24h auto-off watchdog, if it was + /// started. + debug_mode: Option>, } /// Signal every shutdown-able task and TAKE its handle, synchronously. @@ -324,6 +331,8 @@ fn take_shutdown_handles(app: &tauri::AppHandle) -> Option { iostat: state.shutdown_iostat_task(), // issue #308: the bottleneck-classification sampler, same shape again. bottleneck: state.shutdown_bottleneck_task(), + // issue #309: the debug-logging-mode watchdog, same shape again. + debug_mode: state.shutdown_debug_mode_task(), }) } @@ -358,6 +367,7 @@ async fn drain_shutdown_handles(handles: ShutdownHandles) { telemetry, iostat, bottleneck, + debug_mode, } = handles; // R3-P1-1: drive ALL per-account shutdowns concurrently. Each @@ -419,6 +429,12 @@ async fn drain_shutdown_handles(handles: ShutdownHandles) { tracing::info!(target: "driven::app", "bottleneck sampler drained (no orphan)"); } + // issue #309: drain the debug-logging-mode watchdog the same way. + if let Some(handle) = debug_mode { + drain_restore_handle(handle).await; + tracing::info!(target: "driven::app", "debug logging mode watchdog drained (no orphan)"); + } + // Stop the cosmetic tray syncing-spinner LAST - AFTER every orchestrator // is dropped (so the per-account event bridges' broadcasts are closed and // no further `StateChanged` can drive `apply_state` -> restart the @@ -728,6 +744,11 @@ pub fn run() { // issue #308: the live bottleneck-classification sampler // behind the Activity dashboard's Bottleneck stat tile. bottleneck_hub::spawn_sampler(&handle); + // Issue #309: reconcile the live process against the persisted + // debug-logging-mode state (auto-off if the 24h window already + // elapsed while the app was closed) and start the watchdog that + // keeps re-checking while the app runs. + debug_mode::spawn_watchdog(&handle); // M9b R2-P2-3 (SPEC s16): record an `update_applied` activity row // when the running version differs from the last-recorded one, so // the telemetry `update_applied` aggregate is driven by a real diff --git a/src-tauri/src/logging.rs b/src-tauri/src/logging.rs index b14b232e..401f4e93 100644 --- a/src-tauri/src/logging.rs +++ b/src-tauri/src/logging.rs @@ -9,9 +9,16 @@ //! [`init`] now installs a LAYERED subscriber: the original stdout `fmt` layer //! (unchanged, so `cargo tauri dev` still prints) plus a DAILY-rolling file layer //! writing `driven.YYYY-MM-DD.log` into [`log_dir`]. [`prune`] bounds that -//! directory (14 days / 25 MB) so an always-on background daemon cannot fill the +//! directory (14 days / 25 MB, widened to 250 MB while issue #309 debug +//! logging mode is on) so an always-on background daemon cannot fill the //! user's disk. //! +//! Issue #309 (debug logging mode): the filter layer is wrapped in a +//! [`tracing_subscriber::reload`] layer, so [`set_filter`] can raise/restore +//! the LIVE process's verbosity at runtime (no restart) when the user flips +//! the Settings toggle. `debug_mode.rs` owns the policy (persisted expiry, +//! 24h auto-off watchdog); this module owns the mechanism. +//! //! This module is also the ONE place the log directory is resolved. The panic //! hook (crash dumps, SPEC s17) and the diagnostic-bundle collector (SPEC s18) //! both call [`log_dir`] rather than re-deriving the path - they previously @@ -19,19 +26,115 @@ //! which is why the bundle collected nothing even when crash dumps existed. use std::path::PathBuf; +use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::OnceLock; use std::time::Duration; use tracing_appender::non_blocking::WorkerGuard; use tracing_subscriber::layer::SubscriberExt as _; use tracing_subscriber::util::SubscriberInitExt as _; -use tracing_subscriber::{fmt, EnvFilter, Layer as _}; +use tracing_subscriber::{fmt, reload, EnvFilter, Layer as _, Registry}; const TARGET: &str = "driven::logging"; /// Default level filter when `RUST_LOG` is unset. `info` keeps the file useful /// for field diagnosis without the per-file debug spam a backup run produces. -const DEFAULT_FILTER: &str = "info"; +pub const DEFAULT_FILTER: &str = "info"; + +/// Issue #309 (debug logging mode): the directive applied to the LIVE filter +/// while debug logging is on. Driven's own crates go to `trace` (per-file +/// activity, IPC command traces, state transitions, reconcile/queue +/// decisions - the exact detail issue #309 asks for); everything else +/// (reqwest, hyper, boa's PAC engine, ...) stays at `info` so the log is still +/// dominated by Driven's own signal rather than drowned in dependency noise. +/// +/// Two directive families are needed to cover every `tracing::` call site in +/// this workspace: most calls pass an explicit `target: TARGET` string that +/// is a hand-written `"driven::..."` / `"driven_tls::..."` path (covered by +/// the `driven=trace` / `driven_tls=trace` directives below); calls with no +/// explicit target default to `module_path!()`, i.e. the crate's actual +/// (underscored) library name (the `driven_core=trace`, `driven_s3=trace`, +/// ... directives). +pub const DEBUG_MODE_FILTER: &str = "info,\ +driven=trace,\ +driven_app_lib=trace,\ +driven_core=trace,\ +driven_s3=trace,\ +driven_sftp=trace,\ +driven_drive=trace,\ +driven_tls=trace,\ +driven_vss=trace,\ +driven_backend=trace,\ +driven_net=trace,\ +driven_crypto=trace,\ +driven_remote=trace,\ +driven_localfs=trace,\ +driven_power=trace,\ +driven_diskstat=trace,\ +driven_apfs=trace,\ +driven_rclone=trace"; + +/// Default rolling-log total-byte cap (see [`MAX_LOG_TOTAL_BYTES`] doc). Kept +/// as the fallback [`effective_max_log_total_bytes`] restores on debug-mode +/// off. +const DEFAULT_MAX_LOG_TOTAL_BYTES: u64 = 25 * 1024 * 1024; + +/// Issue #309: the rolling-log cap while debug logging mode is on. Debug mode +/// raises the filter to `trace` on every Driven crate, which produces far +/// more log volume per day than the steady-state 25 MB budget can hold - a +/// 250 MB budget (SPEC/issue #309 "rotating cap ~250 MB") keeps a full day of +/// verbose logs available for the diagnostic bundle without letting an +/// abandoned toggle fill the user's disk indefinitely (the 24h auto-off in +/// `debug_mode.rs` is the other half of that guarantee). +const DEBUG_MODE_MAX_LOG_TOTAL_BYTES: u64 = 250 * 1024 * 1024; + +/// The live rolling-log total-byte cap [`prune`] enforces, switched between +/// [`DEFAULT_MAX_LOG_TOTAL_BYTES`] and [`DEBUG_MODE_MAX_LOG_TOTAL_BYTES`] by +/// [`set_debug_log_cap`]. An `AtomicU64` (not a plain const) because debug +/// logging mode is a runtime toggle, not a compile-time choice. +static MAX_LOG_TOTAL_BYTES: AtomicU64 = AtomicU64::new(DEFAULT_MAX_LOG_TOTAL_BYTES); + +/// Widen or restore the rolling-log cap for debug logging mode (issue #309). +/// Best-effort/instant: the next [`prune`] pass (at boot, or from the +/// `debug_mode` watchdog) enforces the new budget; nothing is deleted here. +pub fn set_debug_log_cap(debug_enabled: bool) { + let cap = if debug_enabled { + DEBUG_MODE_MAX_LOG_TOTAL_BYTES + } else { + DEFAULT_MAX_LOG_TOTAL_BYTES + }; + MAX_LOG_TOTAL_BYTES.store(cap, Ordering::Relaxed); +} + +/// The live rolling-log total-byte cap (see [`MAX_LOG_TOTAL_BYTES`]). +fn effective_max_log_total_bytes() -> u64 { + MAX_LOG_TOTAL_BYTES.load(Ordering::Relaxed) +} + +/// The process's reloadable tracing filter handle (issue #309), installed by +/// [`init`]. `None` until `init` runs (or if a subscriber was already +/// installed by a double-init race / a test harness), in which case +/// [`set_filter`] is a documented no-op rather than a panic - the previous +/// filter keeps running. +static FILTER_HANDLE: OnceLock> = OnceLock::new(); + +/// Reload the LIVE tracing filter to `directive` (an `EnvFilter` directive +/// string, e.g. `"info"` or [`DEBUG_MODE_FILTER`]). +/// +/// Returns `false` (and leaves the previous filter running) when the reload +/// handle is not installed yet, `directive` fails to parse, or the reload +/// itself errors (the subscriber was replaced from under us) - every case +/// fails closed to "still logging at the old level" rather than silently +/// going filter-less. +pub fn set_filter(directive: &str) -> bool { + let Some(handle) = FILTER_HANDLE.get() else { + return false; + }; + let Ok(new_filter) = EnvFilter::try_new(directive) else { + return false; + }; + handle.reload(new_filter).is_ok() +} /// Filename prefix of a rolling log file. `tracing-appender` joins prefix, the /// rotation date, and the suffix with `.`, so files are `driven.2026-07-25.log`. @@ -43,11 +146,6 @@ const LOG_SUFFIX: &str = "log"; /// "it broke sometime last week, send me a bundle". const MAX_LOG_AGE: Duration = Duration::from_secs(14 * 24 * 60 * 60); -/// Retention: total bytes the rolling logs may occupy. Beyond this the OLDEST -/// files are deleted first. 25 MB is a fraction of the SPEC s18 bundle's 50 MB -/// log budget, so a full log dir still fits in one bundle. -const MAX_LOG_TOTAL_BYTES: u64 = 25 * 1024 * 1024; - /// Keeps the `tracing-appender` non-blocking writer's worker thread alive. /// /// `tracing_appender::non_blocking` hands back a [`WorkerGuard`] whose `Drop` @@ -76,6 +174,14 @@ pub fn init() { let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(DEFAULT_FILTER)); + // Issue #309: wrap the filter in a reload layer so `set_filter` can raise + // / restore it at runtime with no restart. The handle is parked in + // `FILTER_HANDLE` BEFORE `try_init` so it is available the instant the + // subscriber is live; a failed `try_init` below leaves it set but unused + // (harmless - `set_filter` would just reload a filter nothing reads). + let (filter_layer, filter_handle) = reload::Layer::new(filter); + let _ = FILTER_HANDLE.set(filter_handle); + // The original stdout layer, unchanged: `cargo tauri dev` and any // console-attached launch keep printing exactly as before. let stdout_layer = fmt::layer(); @@ -100,7 +206,7 @@ pub fn init() { // nothing to report - reporting would need the subscriber that did not // install. if tracing_subscriber::registry() - .with(filter) + .with(filter_layer) .with(stdout_layer) .with(file_layer) .try_init() @@ -330,7 +436,11 @@ pub fn prune(dir: &std::path::Path) { }); } - for name in plan_prune(&files, MAX_LOG_AGE.as_secs(), MAX_LOG_TOTAL_BYTES) { + for name in plan_prune( + &files, + MAX_LOG_AGE.as_secs(), + effective_max_log_total_bytes(), + ) { let path = dir.join(&name); if let Err(e) = std::fs::remove_file(&path) { tracing::debug!(target: TARGET, file = %path.display(), error = %e, "log retention: could not delete stale log"); diff --git a/ui/e2e-visual/__screenshots__/linux/dark/settings.spec.ts/privacy.png b/ui/e2e-visual/__screenshots__/linux/dark/settings.spec.ts/privacy.png index 1095abe96ea21e9d18bf8e6c99ce2e8024bd1207..9ed87d2b2c17a795a6af903ebbafd377e194d2f8 100644 GIT binary patch literal 60644 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 z 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 literal 40506 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�H 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 ({ + invoke: (cmd: string, args?: unknown) => invokeMock(cmd, args), +})); +vi.mock("@tauri-apps/api/event", () => ({ + listen: vi.fn(async () => () => undefined), +})); +vi.mock("@tauri-apps/plugin-dialog", () => ({ + open: vi.fn(), + save: vi.fn(), +})); +vi.mock("vue-router", () => ({ + useRouter: () => ({ push: vi.fn() }), + useRoute: () => ({ params: {} }), +})); + +import Activity from "../views/Activity.vue"; +import type { SettingsDto } from "../ipc/types"; + +const CHIP = '[data-testid="activity-debug-data-chip"]'; + +function makeSettings(debugLoggingEnabled: boolean): SettingsDto { + return { + global: { + autoStartOnLogin: false, + defaultConcurrentUploads: null, + adaptiveParallelismEnabled: true, + bandwidthCapMbps: null, + skipOnBattery: true, + skipOnMetered: true, + scanIntervalSecs: 600, + deepVerifyIntervalSecs: 604800, + ioPriority: "low", + logLevel: "info", + schedule: { + enabled: false, + startMinute: 0, + endMinute: 0, + days: [true, true, true, true, true, true, true], + utcOffsetMinutes: 0, + }, + preBackupHook: null, + postBackupHook: null, + hookTimeoutSecs: 60, + meteredMode: "pause", + meteredBandwidthCapMbps: null, + customRootCaPath: null, + proxyMode: "system", + proxyUrl: null, + pauseWhenOffline: true, + debugLoggingEnabled, + debugLoggingExpiresAtMs: debugLoggingEnabled ? Date.now() + 60_000 : null, + }, + telemetry: { enabled: true, installId: "id", endpoint: "https://example.test/ping" }, + updater: { channel: "stable", checkIntervalSecs: 21600 }, + ui: { trayLeftClickOpens: "activity", locale: "en-US", colorMode: "system" }, + windows: null, + macos: null, + bundleSmallFiles: false, + scrub: { enabled: true, intervalSecs: 604800, sliceSize: 500, deepSample: 0 }, + drill: { enabled: true, intervalSecs: 2592000, sampleSize: 3 }, + }; +} + +function stubBackend(debugLoggingEnabled: boolean): void { + invokeMock.mockImplementation(async (cmd: string) => { + switch (cmd) { + case "get_settings": + return makeSettings(debugLoggingEnabled); + case "query_activity": + return { entries: [], total: 0, limit: 100, hasMore: false, nextBeforeTs: null, nextBeforeId: null }; + case "distinct_activity_event_types": + return ["upload_done"]; + case "activity_summary": + return { + bytesToday: 0, + bytesWeek: 0, + fileStatusCounts: [], + throughputWindowBytes: 0, + throughputWindowFiles: 0, + throughputWindowMs: 60_000, + }; + case "activity_throughput_series": + return { bytes: [], files: [] }; + case "list_sources": + return []; + default: + return undefined; + } + }); +} + +beforeEach(() => { + setActivePinia(createPinia()); + invokeMock.mockReset(); +}); + +describe("Activity debug-data chip (issue #309)", () => { + it("is absent when debug logging mode is off", async () => { + stubBackend(false); + const wrapper = mount(Activity, { global: { plugins: [i18n] } }); + await flushPromises(); + + expect(wrapper.find(CHIP).exists()).toBe(false); + + wrapper.unmount(); + }); + + it("is shown next to the export button when debug logging mode is on", async () => { + stubBackend(true); + const wrapper = mount(Activity, { global: { plugins: [i18n] } }); + await flushPromises(); + + const chip = wrapper.get(CHIP); + expect(chip.text()).toBe(i18n.global.t("activity.debugDataIncludedChip")); + // Sits next to the export button (same flex row). + expect(chip.element.parentElement?.querySelector('[data-testid="activity-export-bundle"]')).toBeTruthy(); + + wrapper.unmount(); + }); +}); diff --git a/ui/src/__tests__/settings-components.test.ts b/ui/src/__tests__/settings-components.test.ts index cab2873d..4923009b 100644 --- a/ui/src/__tests__/settings-components.test.ts +++ b/ui/src/__tests__/settings-components.test.ts @@ -112,6 +112,8 @@ function makeSettings(over: Partial = {}): SettingsDto { proxyMode: "system", proxyUrl: null, pauseWhenOffline: true, + debugLoggingEnabled: false, + debugLoggingExpiresAtMs: null, }, telemetry: { enabled: true, diff --git a/ui/src/__tests__/settings-nav.test.ts b/ui/src/__tests__/settings-nav.test.ts index a334aa5b..531111fd 100644 --- a/ui/src/__tests__/settings-nav.test.ts +++ b/ui/src/__tests__/settings-nav.test.ts @@ -56,6 +56,8 @@ function makeSettings(over: Partial = {}): SettingsDto { proxyMode: "system", proxyUrl: null, pauseWhenOffline: true, + debugLoggingEnabled: false, + debugLoggingExpiresAtMs: null, }, telemetry: { enabled: true, diff --git a/ui/src/__tests__/settings-pages.test.ts b/ui/src/__tests__/settings-pages.test.ts index e6260ff9..dfbc104e 100644 --- a/ui/src/__tests__/settings-pages.test.ts +++ b/ui/src/__tests__/settings-pages.test.ts @@ -91,6 +91,8 @@ function makeSettings(over: Partial = {}): SettingsDto { proxyMode: "system", proxyUrl: null, pauseWhenOffline: true, + debugLoggingEnabled: false, + debugLoggingExpiresAtMs: null, }, telemetry: { enabled: true, @@ -1504,6 +1506,67 @@ describe("PrivacyPage", () => { await flushPromises(); expect(wrapper.find('[data-testid="telemetry-preview-modal"]').exists()).toBe(false); }); + + it("issue #309: debug logging warning is always shown, and toggling it on patches global.debugLoggingEnabled", async () => { + invokeMock.mockImplementation((cmd: string, args: unknown) => { + if (cmd === "get_settings") return Promise.resolve(makeSettings()); + if (cmd === "update_settings") { + const patch = (args as { patch: { global?: Record } }).patch; + return Promise.resolve( + makeSettings({ global: { ...makeSettings().global, ...patch.global } }) + ); + } + return Promise.resolve(undefined); + }); + const wrapper = mount(PrivacyPage, { global: globalMountOptions }); + await flushPromises(); + + // The warning is unmissable: present BEFORE the toggle is ever switched + // on, not gated on the enabled state. + const toggle = wrapper.get('[data-testid="debug-logging-toggle"]'); + expect((toggle.element as HTMLInputElement).checked).toBe(false); + expect(wrapper.get('[data-testid="debug-logging-warning"]').text()).toBe( + i18n.global.t("settings.rules.debugLogging.warning") + ); + + await toggle.setValue(true); + await flushPromises(); + + expect(invokeMock).toHaveBeenCalledWith("update_settings", { + patch: { global: { debugLoggingEnabled: true } }, + }); + // The backend-computed expiry round-trips back into the toggle's checked + // state (the store replaces the snapshot with the command's response). + expect((wrapper.get('[data-testid="debug-logging-toggle"]').element as HTMLInputElement).checked).toBe( + true + ); + }); + + it("issue #309: while debug logging is on, the bundle note shows the persisted expiry", async () => { + const expiresAt = Date.UTC(2026, 7, 18, 12, 0, 0); + invokeMock.mockImplementation((cmd: string) => { + if (cmd === "get_settings") + return Promise.resolve( + makeSettings({ + global: { + ...makeSettings().global, + debugLoggingEnabled: true, + debugLoggingExpiresAtMs: expiresAt, + }, + }) + ); + return Promise.resolve(undefined); + }); + const wrapper = mount(PrivacyPage, { global: globalMountOptions }); + await flushPromises(); + + expect((wrapper.get('[data-testid="debug-logging-toggle"]').element as HTMLInputElement).checked).toBe( + true + ); + expect(wrapper.get('[data-testid="debug-logging-setting"]').text()).toContain( + i18n.global.t("settings.rules.debugLogging.includeInBundle") + ); + }); }); describe("AdvancedPage", () => { diff --git a/ui/src/__tests__/settings-stores.test.ts b/ui/src/__tests__/settings-stores.test.ts index ee616716..aa91b5f7 100644 --- a/ui/src/__tests__/settings-stores.test.ts +++ b/ui/src/__tests__/settings-stores.test.ts @@ -86,6 +86,8 @@ function makeSettings(over: Partial = {}): SettingsDto { proxyMode: "system", proxyUrl: null, pauseWhenOffline: true, + debugLoggingEnabled: false, + debugLoggingExpiresAtMs: null, }, telemetry: { enabled: true, diff --git a/ui/src/ipc/types.ts b/ui/src/ipc/types.ts index a856727d..e712fa36 100644 --- a/ui/src/ipc/types.ts +++ b/ui/src/ipc/types.ts @@ -423,6 +423,16 @@ export interface GlobalSettings { * true). Turning it off is meant for LAN-only / local-folder destinations * that don't need internet reachability to back up. */ pauseWhenOffline: boolean; + /** Issue #309: debug logging mode. When true the live log filter is raised + * to a verbose directive (per-file activity, IPC traces, state + * transitions, reconcile/queue decisions) and diagnostic bundles gain a + * debug section; both cost noticeable performance and log paths/timings, + * so this defaults false and auto-clears itself (see + * debugLoggingExpiresAtMs). */ + debugLoggingEnabled: boolean; + /** Issue #309: epoch-ms deadline debugLoggingEnabled auto-turns-off at (set + * to now + 24h whenever the toggle is switched on). null when off. */ + debugLoggingExpiresAtMs: number | null; } export interface TelemetrySettings { @@ -672,6 +682,9 @@ export interface GlobalSettingsPatch { proxyUrl?: string | null; /** Pause-banner spec (2026-08-01): present = set pause-while-offline. */ pauseWhenOffline?: boolean; + /** Issue #309: present = set debug logging mode. The backend computes/ + * clears debugLoggingExpiresAtMs itself - it is not directly patchable. */ + debugLoggingEnabled?: boolean; } /** Issue #34: result of validating a candidate custom root CA PEM file. */ diff --git a/ui/src/locales/en-US.json b/ui/src/locales/en-US.json index c7a445e9..9a7f8e0b 100644 --- a/ui/src/locales/en-US.json +++ b/ui/src/locales/en-US.json @@ -544,6 +544,13 @@ "telemetryLabel": "Send anonymous usage stats", "telemetryNote": "Anonymous usage stats only - no file names or contents are ever sent. One click to disable.", "telemetryPreviewButton": "Preview data", + "debugLogging": { + "label": "Debug logging", + "note": "Records detailed per-file activity, IPC traces, and full engine state snapshots to help diagnose problems.", + "warning": "Debug logs and diagnostic bundles will include file names, full paths, timing data, and other personal information. Backups may run noticeably slower. Turns itself off automatically after 24 hours.", + "includeInBundle": "Diagnostic bundles will include this debug data while it's on.", + "activeUntil": "Debug logging is on until {time}." + }, "hooks": { "title": "Backup hooks", "preLabel": "Before each backup (shell command)", @@ -709,6 +716,7 @@ "exportBundleButton": "Export diagnostic bundle", "exporting": "Exporting...", "exportedTo": "Saved diagnostic bundle to {path}", + "debugDataIncludedChip": "Debug data included", "summary": { "bytesToday": "Uploaded today", "bytesWeek": "Uploaded this week", diff --git a/ui/src/views/Activity.vue b/ui/src/views/Activity.vue index bfe363a2..0662f972 100644 --- a/ui/src/views/Activity.vue +++ b/ui/src/views/Activity.vue @@ -20,8 +20,10 @@ import { useActivityStore, } from "../stores/activity"; import { formatBytes as formatByteCount } from "../stores/formatBytes"; +import { useSettingsStore } from "../stores/settings"; import { useSourcesStore } from "../stores/sources"; import { useToastsStore } from "../stores/toasts"; +import { ensureSettingsLoaded } from "./settings/shared"; import type { ActivityEntry, ActivityLevel, FileStateStatus } from "../ipc/types"; // Activity dashboard (SPEC s11.4; DESIGN s8.3). A live tail (subscribes to @@ -40,6 +42,13 @@ const iostat = useIostatStore(); const bottleneck = useBottleneckStore(); const sources = useSourcesStore(); const toasts = useToastsStore(); +// Issue #309: the settings snapshot, read-only here, just for the "Debug data +// included" chip below - Activity does not otherwise depend on Settings, so +// this loads its own snapshot on mount rather than assuming the Settings +// view has already run. +const settings = useSettingsStore(); +ensureSettingsLoaded(); +const debugLoggingEnabled = computed(() => settings.settings?.global.debugLoggingEnabled ?? false); // Design-system class strings (DRIVEN UI). Defined once so every control in this // view stays visually consistent with the rest of the app: teal accent, dark-mode @@ -300,16 +309,24 @@ onUnmounted(() => { {{ t("activity.subtitle") }}

    - +
    + + {{ t("activity.debugDataIncludedChip") }} + + +

    -import { ref } from "vue"; +import { computed, ref } from "vue"; import { useI18n } from "vue-i18n"; import TelemetryPreviewModal from "../../components/TelemetryPreviewModal.vue"; @@ -9,7 +9,7 @@ import { cardCls, ensureSettingsLoaded } from "./shared"; // Privacy settings page (SDD 2026-08-02 settings-sidebar-ia, task 2). Moved // verbatim out of Settings.vue's telemetry card - the single home for // telemetry now that About.vue's duplicate copy is removed (task 5). -const { t } = useI18n(); +const { t, locale } = useI18n(); const settings = useSettingsStore(); ensureSettingsLoaded(); @@ -32,6 +32,31 @@ async function setTelemetryEnabled(event: Event): Promise { // modal, available regardless of the current enabled state - a privacy- // conscious user inspects it BEFORE opting in. const showTelemetryPreview = ref(false); + +// Issue #309: debug logging mode. Uses the generic `patch` (not a dedicated +// command like telemetry's) - there is no in-flight send to cancel, and the +// backend fully owns computing/clearing `debugLoggingExpiresAtMs` from this +// one boolean, so a plain SettingsPatch round-trip is enough. +async function setDebugLoggingEnabled(event: Event): Promise { + const checked = (event.target as HTMLInputElement).checked; + try { + await settings.patch({ global: { debugLoggingEnabled: checked } }); + } catch { + // errorCode is set on the store and surfaced as the banner; swallow so + // the toggle's @change handler never escapes as an unhandled rejection. + } +} + +// DESIGN s8.7: locale-aware, never a hand-rolled English formatter (matches +// Activity.vue's dateTimeFormatter). +const debugLoggingExpiresAt = computed(() => { + const ms = settings.settings?.global.debugLoggingExpiresAtMs; + if (!ms) return null; + return new Intl.DateTimeFormat(locale.value, { + dateStyle: "medium", + timeStyle: "short", + }).format(new Date(ms)); +});