{"record":{"id":"2edfd26020ce1b21","repo":"Zackriya-Solutions/meetily","slug":"time-went-backwards","errorCode":null,"errorMessage":"Time went backwards","messagePattern":"Time went backwards","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/audio/stt.rs","lineNumber":221,"sourceCode":"            crossbeam::select! {\n                recv(input_receiver) -> input_result => {\n                    match input_result {\n                        Ok(mut audio) => {\n                            // Check if device should be recording\n                            if let Some(control) = audio_devices_control.as_ref().unwrap().get(&audio.device) {\n                                if !control.is_running {\n                                    debug!(\"Skipping audio processing for stopped device: {}\", audio.device);\n                                    continue;\n                                }\n                            } else {\n                                debug!(\"Device not found in control list: {}\", audio.device);\n                                continue;\n                            }\n\n                            debug!(\"Received input from input_receiver\");\n                            let timestamp = SystemTime::now()\n                                .duration_since(UNIX_EPOCH)\n                                .expect(\"Time went backwards\")\n                                .as_secs();\n\n                            let audio_data = if audio.sample_rate != m::SAMPLE_RATE as u32 {\n                                match resample(\n                                    audio.data.as_ref(),\n                                    audio.sample_rate,\n                                    m::SAMPLE_RATE as u32,\n                                ) {\n                                    Ok(data) => data,\n                                    Err(e) => {\n                                        error!(\"Error resampling audio: {:?}\", e);\n                                        continue;\n                                    }\n                                }\n                            } else {\n                                audio.data.as_ref().to_vec()\n                            };\n","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/audio/stt.rs#L203-L239","documentation":"SystemTime::now().duration_since(UNIX_EPOCH) returns Err exactly when the current wall clock reads a time before 1970-01-01. The .expect(\"Time went backwards\") panics the audio-processing thread on such a clock; this is the std::time API's only failure mode.","triggerScenarios":"The STT receive loop is running while the OS clock sits before the Unix epoch: dead RTC/CMOS battery resetting a laptop to 1969/1970, a VM restored from a snapshot with a stale clock, manual clock setting, or a broken NTP step.","commonSituations":"Machines with failed clock batteries booting to epoch-zero, virtualization snapshots, offline kiosks without time sync, dual-boot clock disputes.","solutions":["Replace expect with .unwrap_or_default(): a 0-second timestamp is tolerable for chunk sequencing","Use a monotonic Instant for in-session ordering and system time only for display labels","If wall-clock seconds are required across resets, compute signed epoch millis instead of unsigned duration_since"],"exampleFix":"// before\nlet timestamp = SystemTime::now()\n    .duration_since(UNIX_EPOCH)\n    .expect(\"Time went backwards\")\n    .as_secs();\n\n// after\nlet timestamp = SystemTime::now()\n    .duration_since(UNIX_EPOCH)\n    .map(|d| d.as_secs())\n    .unwrap_or(0);","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"let timestamp = SystemTime::now()\n    .duration_since(UNIX_EPOCH)\n    .map(|d| d.as_secs())\n    .unwrap_or(0); // tolerate pre-epoch clocks","preventionTips":["Enable NTP/time sync on meeting machines; replace dead RTC batteries","Use Instant (monotonic) for intra-session ordering, system time only for labels","Avoid unsigned duration_since for user-facing timestamps; prefer signed epoch millis"],"tags":["rust","system-clock","time","panic","audio-pipeline"],"backgroundTag":"system-clock-before-epoch","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}