Wardian docs

ADR-2610071110: browser notices are not app faults

Status: Accepted Date: 2026-10-07 Drivers: The USL lab's chart filled the fault box with "ResizeObserver loop completed with undelivered notifications", five times over, though nothing in the app had failed.

Context#

Every suite frame reports each error and unhandledrejection event to the kernel as a fault, so a typo in app.js or a broken handler is seen rather than lost. The chart redraws inside ctx.observe; a redraw can change the frame's size within the same animation frame, and the browser then defers the remaining size notices and raises an error event with that message and no Error object. It is a notice that notifications were deferred to the next frame, not a failure: nothing was thrown and nothing was lost. The fault box also printed each repeat of one fault on its own line.

Decision#

Consequences#

Implementation#

static/shim.js (observe, the error filter), static/kernel.html (the fault box).

Gate: cargo build --release && cargo test --release && hexa analyze . --grade A, then tests/run-suite-e2e.sh, which checks that the notice is not a fault, that a real error is, and that a repeat is counted.

Enforced-By: hexa adr gates (run on demand)#

Gate#

env CARGO_TARGET_DIR=target/verify bash tests/run-suite-e2e.sh

Rerun by hexa adr gates. It builds into target/verify, never into the copy of Wardian a user runs.

References#

Evidence#

bash tests/run-suite-e2e.sh 2>&1 | grep -E 'notice|each time|count|passed' at 1df3b16 with uncommitted changes on 2026-10-07 15:05 UTC:

== browser notices are not faults; real errors are, and repeats are counted
  ok   the ResizeObserver loop notice is not a fault
  ok   a real error is a fault, each time
  ok   the box shows it once, with a count: chart: test fault ×3
26 passed, 0 failed

This page is docs/adrs/ADR-2610071110-browser-notices-are-not-app-faults.md in the repository. Something wrong or missing? Change that file.