Where the engine is expected to fail
Known limitations
This is the boundary of what Misata actually does, found by testing our own output rather than assuming it. Every guarantee Misata makes is machine-checkable: certificates, integrity audits, a conformance suite. Everything below is what those checks do not cover, or cover only partially. If something elsewhere on this site seems to contradict this page, this page wins, and the other page has a bug worth reporting.
Values and vocabulary
City-to-state accuracy is exact for 58 cities, not every city
Amsterdam always gets North Holland. A generated city outside that set gets a state that is correct for its country but not guaranteed correct for that specific city.
Priors are name-routed and English-first
A column named rating gets a realistic J-shaped distribution. A column named bewertung does not, since recognition is by name match. An unrecognized name gets a generic distribution rather than a guessed one, deliberately.
Free text is grammar-generated, not written
Review text agrees with its rating and support notes read like real notes, but long-form prose has a template rhythm a careful reader can spot. That trade (deterministic, seedable, no LLM in the data path) is intentional, not an oversight.
Fictional entities are the point
Company names, people, and products are invented. Anything that needs real-world facts (actual ticker prices, real street addresses) is out of scope by design.
Exact outcomes and statistics
Declared rates are subject to integer rounding
A 2% rate over 4,824 rows cannot land at exactly 2.00%: 96 flagged rows gives 1.99%, 97 gives 2.01%. Plain generation gets the closest achievable count and the gap is visible, never hidden.
An aggregate target beats a declared per-row bound if they conflict
If a period target is mathematically impossible under a column's min/max, the target wins and the bound is violated, with a warning at generation time. Ignoring the warning means accepting the violation.
No learned correlation structure
Misata does not fit a model to real data. Correlations exist only when declared, inferred from well-known name pairs, or implied by a mechanism you built (a review score driving its own text). Subtle real-world dependence is absent unless you declare it.
Cross-table stories
SCD2 and stock-flow trajectories are generated, not declared
The invariants are exact (versions tile correctly, ledgers chain to zero), but the specific version counts and change dates come from seeded draws, not a formula you write.
Payments are not forced to equal order totals
Partial payments and installments are real, so payment.amount == order.total is not assumed or enforced. Declare it explicitly if your story needs exact settlement.
The story audit checks the rules it has
It is a catalog of named invariants grown from real failures, not a semantic understanding of your domain. A clean audit means no known defect class is present, nothing stronger.
Scale and reproducibility
Tables tied together by a roll-up must fit in memory together
An orders/order-items pair with a rolled-up total is fully buffered in memory as one unit. Tables that don't participate in a roll-up stream batch by batch and scale further.
Determinism is per version, not permanent
The same schema, seed, and Misata version reproduce byte-identical output. An upgrade can change the RNG stream: declared outcomes, identities, and referential integrity survive every upgrade, individual row values do not. Pin the version if bit-identical regeneration matters.
LLM-designed schemas inherit the LLM's mistakes
The parser validates structure and repairs common mis-typings, and generation is deterministic after that point. A provider that invents a wrong column still produces a wrong, if internally coherent, dataset. Review the schema, not just the data it produces.
Every entry here started as a reproduced defect or a deliberate design refusal, and the full technical version, with the exact numbers and reproduction steps, lives in the open-source repo. When an entry gets fixed, it moves to the changelog with a before/after and a test that keeps it fixed.
Full limitations doc on GitHubFound a failure not listed here? Tell us, that is a bug in this page too.

