# Fixture Tools Generate deterministic, privacy-safe synthetic test fixtures entirely in the browser. Fixture Tools is a local-first module in the add·ideas Toolbox. ## v0.2.0 capabilities - Import a focused subset of JSON Schema, SQL `CREATE TABLE` DDL, XSD, CSV headings, or the app's portable fixture-model JSON - Review and edit normalized tables, fields, types, required/unique rules, numeric and length ranges, enumerations, scalar foreign keys, composite unique constraints, and composite foreign-key relationships - Generate reproducible rows from a text seed with uniform, sequential, normal, and constant distributions - Deliberately exercise boundary values or inject invalid values, with a separate violation ledger so negative-test fixtures cannot be mistaken for valid data - Preserve referential integrity and field uniqueness for valid generated rows - Generate tables in a deterministic dependency-topological order, with an explicit error for cyclic references - Audit positive, boundary and intentional-negative exercise counts in a constraint coverage matrix - Select deterministic provider profiles (person, network, commerce), with a typed extension point for additional local profiles - Export JSON, spreadsheet-safe CSV, NDJSON, XML, SQL `INSERT` statements, or a reusable fixture recipe - Use only reserved example domains for generated email addresses ## Honest scope The importers normalize common declarative constructs; they are not complete JSON Schema, SQL, or XML Schema validators. Remote references, schema code, database connections, XML entities, XSD `choice`/identity constraints, SQL dialects beyond common table/column clauses, cyclic relational recipes, and production-scale data loads are out of scope in v0.2.0. Coverage counts describe generated exercises; they do not prove schema or application coverage. Inputs are capped at 2 MiB. A recipe can contain at most 20 tables and 100 fields per table; generation is capped at 50,000 total rows and 8 MiB per serialized output, with no more than 100,000 generated field values. Synthetic data is not anonymization and must not be assumed to represent real populations. The seeded generator is reproducible, not cryptographically random. ## Development ```sh npm ci npm run check npm run test:browser ``` `npm run release:artifact` creates a deterministic release ZIP and SHA-256 sidecar after all checks pass. ## License GPL-3.0-or-later. See [LICENSE](LICENSE). Dependency notices are recorded in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).