stream-friendly (coordinate list) writer / reader for the per-sequence TF-IDF sparse vectors produced by the first pass of the streaming pipeline.
the on-disk layout is deliberately simple and append-friendly so that the first pass can keep a single opened BufferedStream and emit one row per sequence without ever holding the whole matrix in memory:
vectors.coo: tab-separated " <TAB> <TAB> " lines, grouped by row.titles.idx: JSON array mapping -> original sequence title, written once at the end.meta.json: number of rows / columns so the second pass knows the matrix shape.