Fake Rows Need Real Checks
A synthetic table can look plausible and still be useless. It can match the means, ruin the categories, leak rows, or break the label relationship that made the table valuable.
tabflowmini fits a compact transport model over continuous columns, samples categorical marginals, regenerates the churn label, and then grades the result on more than one number.
Small Flow, Clear Failure Modes
The generator is inspired by flow matching, but implemented as a readable Gaussian transport. That keeps the repo dependency-free and makes the assumptions obvious.
The benchmark reports KS distance for continuous columns, plan distribution gap, churn rate gap, and rounded duplicate rate. It is a small audit harness, not a magic anonymizer.
The Number
Mean KS is 0.056. Plan gap is 0.040. Churn gap is 0.026. Duplicate rate is 0.000 on the checked fixture.
3 tests pass locally and on GitHub Actions across Python 3.9, 3.11, and 3.13, with metrics written to `artifacts/metrics.json`.