What happened.
OptionalobjectAffected object's stable id (when applicable — clear/background omit).
OptionalsummaryCompact human-facing hint of what changed. Optional; the panel
falls back to kind when omitted. Keep it small — this is shipped
over the wire on every snapshot and saved to disk on every
autosave.
type — human-readable object kind (e.g. "Pencil", "Circle")text — free-form description (e.g. "thick line, resized")fillColor / strokeColor — CSS colour strings rendered as
visual swatches in the panel; lets the teacher see the exact
shade without us having to name itSender-side ms timestamp when the event was produced.
Cleaned userId of the actor (matches cleanUserId(meta.senderId)).
Persisted audit-log entry for a single observed change to the whiteboard. Captured at sender-side ts so the timeline is monotone across peers (modulo clock drift). Light by design — the UI cross-references objectId against the live canvas when the user wants details.
Not to be confused with the WhiteboardEvent union from
constants.tswhich is the list of message-event NAMES (e.g.'object-added'). This is the persisted audit-trail entry.