IN DEVELOPMENT · NOT RELEASED — No app download, trial or purchase is available. Current status

Documentation / current development build

Know the boundary before the repair.

These notes describe the current development build, which isn’t available to download yet. The guides provide portable examples you can use today.

Input settings and strings

Comma, semicolon, tab or pipe separated text in the encoding you choose: UTF-8 (optional initial BOM), UTF-8 with a required BOM, UTF-16 LE or BE, Windows-1252 or ISO-8859-1, with header presence chosen explicitly and LF/CRLF endings; or one sheet of an Excel workbook (.xlsx). The encoding is never guessed: a file that doesn’t decode is refused with a message naming the encoding, and the open sheet lets you choose another without picking the file again. No coercion of identifiers, numbers or dates; the original file is only read. Quoted delimiters belong to a field. Doubled quotes inside a quoted field represent a literal quote. Quoted fields may contain line breaks, so physical lines are not necessarily records.

Excel cells become plain text: text exactly as stored, numbers in their shortest exact form, date-formatted cells as ISO dates (counted and shown), TRUE/FALSE, error codes such as #N/A, and formulas as their last saved result; formulas never run.

Work through the quoting and width examples.

Diagnostics are not automatic recovery

Text that doesn’t decode in the chosen encoding, malformed quoting and lone CR outside quotes are rejected. Row-width inconsistency and ambiguous header/data shape block export. Blank records are retained. Selected required checks run on retained values after selected ASCII trim and optional deduplication (whole records or key columns).

Out of scope: arbitrary malformed-file repair, encodings beyond the six listed, older Excel formats (.xls, .xlsb) and OpenDocument, database writes, cloud sync and AI repair. Value checks (whole number, decimal, date, email) and required values flag rows for you to resolve; they never change values. Engineering measurements on one development Mac cover files up to 16 MiB, 100,000 rows and 1,000,000 fields with every fix applied, each step under half a second; these are not yet a published support promise.

Literal text here; downstream interpretation elsewhere

Formula-like and HTML-like values remain inert text in the development build: formulas never execute there, and cells don’t become HTML. This describes the design, not a security certification.

Default CSV export preserves formula-looking strings. A downstream spreadsheet may interpret values such as =1+1 as formulas. CSV quoting does not provide universal spreadsheet safety. Avoid opening untrusted CSV directly in a spreadsheet; inspect the destination’s import and text-handling settings.

Spreadsheet-protection mode is deferred. Any future protection would change values and require explicit review and consumer tests.

Saved steps

Saved steps store settings and ordered fixes, never rows. Reuse binds the exact separator, header row, ordered header names and width; each reuse shows every step and asks for confirmation in a system dialog before the fixes are filled in. A changed file shape is refused rather than silently inheriting old fixes.

Feature reference

Exact rules for each feature in the development build. Examples are on the features page.

Order of steps

Fixes always run in this order, whatever order you chose them in: trim spaces, find and replace (in the order listed), letter case, single-value edits, remove blank rows, remove duplicate rows, required values, value checks, leave flagged rows out. Saved-copy columns apply only when the copy is written; review always shows the original columns.

Trim spaces

Removes ASCII spaces and tabs at the start and end of values in the chosen columns. Other whitespace, such as non-breaking spaces, is kept as text.

Find and replace

Each rule belongs to one column. Plain text matches anywhere in the value; letters A–Z match either case unless Match case is on; Whole value only replaces a value that is exactly the text. With Regular expression on, the pattern uses a linear-time engine without backreferences or look-around. The replacement is literal unless Use matched groups is on, where $1, $2 insert groups and $$ is a dollar sign. Limits: 256 rules; pattern and replacement up to 1 KiB each; a compiled pattern up to 256 KiB; a replaced value up to the 256 KiB field budget. An invalid pattern is reported at preview, naming the step.

Letter case

UPPER CASE, lower case or Title Case per column. Characters without case are unchanged.

Single-value edits

Sets one cell to a typed value, after trim, find and replace and case, so later steps see the typed value. Up to 256 edits, one per cell, each up to 1 KiB. Header cells and missing values can’t be edited. Edits are listed under Steps and in the manifest, and are left out of saved steps.

Blank rows

Leaves out rows whose every value is empty after trimming.

Duplicate rows

Compares rows after the steps above. With no key columns ticked, rows must match in every column; with key columns, only those must match. The first row stays; each left-out row records the row it matched in omitted-records.json.

Required values and value checks

Required flags empty values. Value checks flag non-empty values that aren’t a whole number (optional sign, digits), a decimal with a point or a comma, a calendar date in the chosen order, or an email address. Checks flag values and leave them as they are. While any row is flagged, saving waits.

Leave flagged rows out

Instead of blocking the save, rows that fail a required value or a check are left out of the copy and written to problem-rows.json with their row, the failed checks, and their original and resulting values. The manifest lists their row identities only.

Saved-copy columns

Keep, drop, rename and reorder columns, and add joined columns (two columns with a separator; empty values are skipped) or split columns (one part of a column, cut at a literal separator). Names need a header row; new columns need a name when the file has one.

Find, filter and sort

The find bar searches the whole file, every column or one, as plain text or a pattern (same engine and limits as find and replace), up to 1 KiB. Filters: rows the preview changes, rows with problems, or rows where one column is exactly a value. Sort by one column, as text or as numbers; in number order, values that aren’t plain numbers go last. Only the view changes. Pages hold 50 rows.

Saving

Each save writes a new folder containing the cleaned file (UTF-8, your separator, LF or CRLF, optional BOM), manifest.json with source and output SHA-256, settings and every step, plus omitted-records.json or problem-rows.json when rows were left out. The original file is only read.

Saved steps

Save these steps… stores the settings and fixes, never rows or single-value edits, after checking them against the open file and previewing if needed. Use saved steps… checks a steps file against the open file (encoding, separator, header row, header names and width), shows every step, and fills in the fixes only after you confirm Apply in a system dialog. A file of a different shape is refused. Saving steps needs a current preview; rows that a check flags don’t stop it, because steps hold no rows.

Help

Help › Prooftable Help (⌘? on macOS, F1 on Windows and Linux), the … menu and the status bar open the help window; Help › Keyboard Shortcuts opens its shortcuts topic. Search matches every word you type across topic titles and text. In the search box, Escape clears the text, then closes Help. Help is bundled with the app and reads nothing from the network.

Local does not mean non-sensitive

The development build processes files on your computer, without hosted data processing. This describes the design, not a privacy or security audit. Original snapshots, output CSV, manifests and omitted-record artifacts can contain sensitive information; manage their storage and sharing accordingly.

Support is still a proposal

Customer support starts when sales open. Until then, product questions can go to hello@prooftable.app. Proposed assistance is bounded to the supported workflow, not bespoke ETL or arbitrary recovery. Terms and a safe diagnostic-sharing procedure need acceptance before sale. Please don’t email private files.

Read the draft support policy or start with the portable CSV guides.