M8: posting a comment in the browser no longer stops the app (#1764)

The event log read the clock through std::time::SystemTime and Instant, which panic on wasm32-unknown-unknown ("time not implemented on this platform"). Every mutating comment.* command appends an event, so the first comment posted in the web build hit it. The log now takes SystemTime, UNIX_EPOCH and Instant from web_time, as the rest of the engine does. A test checks the stamp is a current Unix time read through the same clock.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Trevor Brown
2026-10-31 10:58:09 -04:00
co-authored by Claude Fable 5.1
parent e04c5d2274
commit 7bee269c4d
2 changed files with 17 additions and 1 deletions
+5 -1
View File
@@ -7,10 +7,14 @@
use std::collections::VecDeque;
use std::sync::{Condvar, Mutex, PoisonError};
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
use std::time::Duration;
use serde::Serialize;
use serde_json::Value;
// The browser build has no `std` clock: `std::time::SystemTime::now()` panics on
// wasm32-unknown-unknown ("time not implemented on this platform"), and every `comment.*` command
// stamps an event. `web_time` is `std::time` on native targets and the JavaScript clock on wasm.
use web_time::{Instant, SystemTime, UNIX_EPOCH};
/// Most events kept; the oldest are dropped.
pub const MAX_EVENTS: usize = 1024;
+12
View File
@@ -44,6 +44,18 @@ fn events_keep_sequence_and_filter_topics() {
assert_eq!(r.events[0].kind, "document.changed");
}
#[test]
fn events_are_stamped_with_the_wall_clock() {
// The stamp is read through `web_time`, the clock the browser build has as well: with
// `std::time::SystemTime` every comment posted on the web panicked (#1764).
let log = EventLog::default();
log.push("comment.added", "Doc", None, json!({"commentId": 1}));
let r = log.poll(0, &comments(), 10, Duration::ZERO);
let now = web_time::SystemTime::now().duration_since(web_time::UNIX_EPOCH).unwrap().as_secs_f64();
let time = r.events[0].time;
assert!(time > 1_700_000_000.0 && time <= now, "{time} is seconds since the Unix epoch, read just before {now}");
}
#[test]
fn a_poll_wakes_for_a_push() {
let log = Arc::new(EventLog::default());