docs: record epoll Loop runtime validation on real Linux (Apple container)

The std.event.Loop epoll backend is now runtime-validated, not just
lower-verified: a static aarch64-linux build of the 1632-equivalent Loop test
(plus the eventfd wake path) runs 6/6 green inside an Apple `container` Linux VM
(kernel 6.18 aarch64) — add_read, idle-timeout, readable+fd+udata, the MOD-mask
add_write path, the eventfd wake channel, and EPOLLRDHUP/HUP eof all behave
identically to kqueue (lone difference: nbytes is 0 on epoll). Update the
event.sx VALIDATION note (with the re-run recipe) and the fibers checkpoint;
the epoll deliverable is complete.
This commit is contained in:
agra
2026-06-26 09:53:10 +03:00
parent 493469fd74
commit e52b6c9eae
2 changed files with 24 additions and 15 deletions

View File

@@ -30,15 +30,20 @@
// waits, passing the nearest deadline as `wait`'s timeout.
//
// VALIDATION: the kqueue path runs end-to-end on the macOS dev host
// (examples/event/1632 — which exercises the full facade surface:
// add_read/write, add_wake/wake, wait, del_*, EOF). The epoll path has no
// linux box here, so it is verified to LOWER clean for x86_64-linux and
// aarch64-linux (the whole module + every epoll syscall emits) and is
// self-reviewed; it is NOT corpus-snapshotted (a Loop example pulls in the
// std barrel → an ~18k-line IR dump that would churn on any unrelated std
// change — worse than the gap). The epoll ABI itself (the layout-sensitive
// part) IS corpus-locked, by examples/event/1633 over the raw bindings.
// Runtime behavior validates on a linux runner.
// (examples/event/1632 — full facade surface: add_read/write, add_wake/wake,
// wait, del_*, EOF). The epoll path is RUNTIME-VALIDATED on real Linux: a
// static aarch64-linux build of the 1632-equivalent test (plus the eventfd
// wake path) runs 6/6 green inside an Apple `container` Linux VM (kernel
// 6.18 aarch64) — add_read, idle-timeout, readable+fd+udata, the MOD-mask
// add_write path, the eventfd wake channel, and EPOLLRDHUP/EPOLLHUP eof all
// behave identically to kqueue. The one intentional backend difference is
// `nbytes` (kqueue reports the pending byte count; epoll reports 0). Re-run:
// sx build --target aarch64-linux --self-contained -o /tmp/ev <test>.sx
// container run --rm -v "$PWD/.sx-tmp:/work" alpine /work/ev
// It is NOT corpus-snapshotted (a Loop example pulls in the std barrel → an
// ~18k-line IR dump that churns on any unrelated std change, and the corpus
// runner is host-based, not container-aware). The epoll ABI itself (the
// layout-sensitive part) IS corpus-locked by examples/event/1633.
#import "modules/std.sx";
kqb :: #import "modules/std/net/kqueue.sx";