`FsstEncodingEncoder`, `VarBinViewEncodingEncoder`, and `ZstdEncodingEncoder` all declare `accepts(DType.Binary) == true` but their `encode()`/`encodeCascade()` unconditionally cast `data` to `String[]` — a `DType.Binary` column (raw bytes, e.g. an embedded audio/image blob) throws `ClassCastException` if the cascade competition picks one of them.
Found while adding nested Parquet import (Raincloud's `waxal-dagbani-asr-test` `audio.bytes` field). Fixed for now by narrowing each encoder's `accepts()` to `Utf8` only, so `Binary` columns fall back to plain `vortex.varbin` storage (already byte-safe) — no compression competition for Binary yet.
Follow-up: give each of these three encoders a real `byte[][]` path (mirroring `VarBinEncodingEncoder`'s fix) so Binary columns get the same compression competition Utf8 does.
`FsstEncodingEncoder`, `VarBinViewEncodingEncoder`, and `ZstdEncodingEncoder` all declare `accepts(DType.Binary) == true` but their `encode()`/`encodeCascade()` unconditionally cast `data` to `String[]` — a `DType.Binary` column (raw bytes, e.g. an embedded audio/image blob) throws `ClassCastException` if the cascade competition picks one of them.
Found while adding nested Parquet import (Raincloud's `waxal-dagbani-asr-test` `audio.bytes` field). Fixed for now by narrowing each encoder's `accepts()` to `Utf8` only, so `Binary` columns fall back to plain `vortex.varbin` storage (already byte-safe) — no compression competition for Binary yet.
Follow-up: give each of these three encoders a real `byte[][]` path (mirroring `VarBinEncodingEncoder`'s fix) so Binary columns get the same compression competition Utf8 does.