Problem
uci-electricityloaddiagrams20112014 in the Raincloud corpus has a blank column name at field index 0. The Java reader throws a VortexException on open:
VortexException: invalid field name in file schema (field index 0):
blank field name (wire-legal, but a footgun vortex-java refuses to write)
— likely a bug in the pipeline that produced this file
The restriction comes from PostscriptParser.convertDType (the FbsStruct_ branch) calling ColumnName.violation(name).ifPresent(...) and throwing for any name that violates the write-side naming policy. The Rust reference implementation accepts these files.
Root cause
ColumnName.violation() rejects blank names. The check is applied on the read path in PostscriptParser, rejecting files that the reference writer produced.
Fix
The write-side naming policy ("vortex-java refuses to write blank names") should not block the read path. The compact constructor of ColumnName should only enforce non-null; the ColumnName.of() factory enforces the full policy and is the boundary guard for user-provided names on the write side. The PostscriptParser can then use new ColumnName(name) directly (bypassing the of() factory's policy check) and remove the violation() check it currently calls.
After fixing, flip uci-electricityloaddiagrams20112014 from gap:255 to ok in expected-status.csv.
Files
core/src/main/java/io/github/dfa1/vortex/core/model/ColumnName.java — compact constructor vs of() factory
reader/src/main/java/io/github/dfa1/vortex/reader/PostscriptParser.java — convertDType, FbsStruct_ branch (approx. line 286)
integration/src/test/resources/raincloud/expected-status.csv — flip uci-electricityloaddiagrams20112014
Problem
uci-electricityloaddiagrams20112014in the Raincloud corpus has a blank column name at field index 0. The Java reader throws aVortexExceptionon open:The restriction comes from
PostscriptParser.convertDType(the FbsStruct_ branch) callingColumnName.violation(name).ifPresent(...)and throwing for any name that violates the write-side naming policy. The Rust reference implementation accepts these files.Root cause
ColumnName.violation()rejects blank names. The check is applied on the read path inPostscriptParser, rejecting files that the reference writer produced.Fix
The write-side naming policy ("vortex-java refuses to write blank names") should not block the read path. The compact constructor of
ColumnNameshould only enforce non-null; theColumnName.of()factory enforces the full policy and is the boundary guard for user-provided names on the write side. ThePostscriptParsercan then usenew ColumnName(name)directly (bypassing theof()factory's policy check) and remove theviolation()check it currently calls.After fixing, flip
uci-electricityloaddiagrams20112014fromgap:255tookinexpected-status.csv.Files
core/src/main/java/io/github/dfa1/vortex/core/model/ColumnName.java— compact constructor vsof()factoryreader/src/main/java/io/github/dfa1/vortex/reader/PostscriptParser.java—convertDType,FbsStruct_branch (approx. line 286)integration/src/test/resources/raincloud/expected-status.csv— flipuci-electricityloaddiagrams20112014