segment: writer part 1 — block encode + active files (libzstd) master
columnar block encoder (validateEvent mirroring upstream's column widths — oversized fields are the caller's drop, never truncated), minimal libzstd bindings (compress2, content checksum on, level 3 to match upstream's encoder), and ActiveWriter producing valid active jss files: 256B active header + length-prefixed zstd frames. pure format code — callers own durability. cross-implementation verification both ways: our reader parses upstream's sealed fixture (previous commit), and upstream's inspect-segment now walks a file written by us — 3 blocks, 2500 events, correct seq ranges/collections (zig build write-sample). part 2 (sealing) needs xxh3-128 for gloom DID blooms plus the footer walk; zig std only has xxh3-64. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>