The workbench reads a delimited file, keeps a structural profile of each column, compares two profiles, and reports eleven kinds of change at three severities. It never keeps source rows, and it never converts an observation into a guarantee.

Parsing

Four delimiters are supported: comma, tab, semicolon, and pipe. Three text encodings are decoded: UTF-8, UTF-16 little endian, and UTF-16 big endian, with automatic detection you can override. Parsing is strict. Malformed quote state, duplicate headers, headers that would be unsafe when opened in a spreadsheet, ragged rows, and files past the configured limits are refused rather than repaired.

What a profile holds

For each column the stored evidence is its position, an inferred primitive type drawn from empty, boolean, integer, number, date, datetime, and string, a confidence figure for that inference, a blank count and rate, a bounded distinct count, the observed minimum and maximum text length, plus file-level metadata and a SHA-256 digest of the file contents. Individual values are not stored.

Worked example

In the bundled sample, quantity profiles as integer with confidence 1.0 and a maximum observed length of one character in the August file. In September the same column profiles as number, still confidence 1.0, with maximum length three. Both statements are true of the file that produced them. Neither is a statement about the producer's system, which may have allowed fractional quantities for years and only now emitted one.

Comparison

Columns pair by exact name first, then by committed human mappings. Unpaired baseline columns are reported as removed, unpaired candidate columns as added. Paired columns are examined for reordering, type shift, blank-rate increase, and width increase. Consumer policies then add missing-column, disallowed-type, order, and unlisted-column findings. Severity is either blocking, review, or informational, and the sample review produces six blocking findings out of twenty-eight.

What is refused

Suggested renames are surfaced as similarity leads and are never applied automatically. Nothing is inferred about business meaning, regulatory sensitivity, locale conventions, or downstream transformations. No import is executed, so no result should be read as a prediction that an import will succeed.

Method and limits

Inference runs on the rows present in the file you loaded. A rare value that appears in one month of twenty will change the inferred type in the month it appears and not before. Bounded distinct counts stop at a limit, so a high-cardinality column reports "at least" rather than an exact figure. Treat every profile as a description of one file.

Do this in the app

Open the workbench and use the Columns view to read a profile directly: each column line shows inferred type, confidence, blank rate, distinct count, and length range for both files side by side.

Related reading