# Release checklist ## Before v0.1.0 ### Data Plan for the major data update. Research notes: `~/code/claude-handoffs/fejkdata/2026-09-16/`. #### Structure (proposal, pending review) `New` costs ~23 ms and 58k allocations for today's 200 KB, one allocation per node, so real-world tables cannot ship as nested JSON objects. - Add a table node: a category JSON naming a `rows` TSV beside it, whose header names the columns and whose rows are the draw. Options `key` (the column a path selects a row by), `weight` (the column that skews the draw), `parent` (the table a column links to). `{name}` tokens read columns; a cell is a string node. Index rows on first draw; at load prove only the header, the options and any cell token. - Reject a choice of same-shaped templates naming the table spelling, and convert `misc.country`, `currency`, `language`, `httpstatus`, `mimetype`, `timezone`, `car`. - Let a path select a row by key or by name, `geo.SE.municipality[0180]` and `geo.SE.municipality[Stockholm]`, and descend to a linked table by name, `geo.SE.region[Skåne län].street`; a key or a linked table name may not equal a column name (load error). A name that matches several rows outside a pinned parent is an error listing the keys; inside one, `region[IL].locality[Springfield]` resolves. - Draw linked tables consistently within one render and draw group: the first table drawn pins its ancestors, and a descendant is drawn inside them. - Keep country data under `geo//`; a locale's `address` reads its country's tree by reference, and a locale's `country` table carries the localised names keyed by alpha2. - Ship full registers as packs, each a Go module with its own `embed.FS` and a zip for `--data-path`; the default embed stays under ~1 MB per country and `New` under ~50 ms. - Add `DATA-LICENSES.md` listing every dataset, its licence and its attribution. - Make every shipped category a record with its building blocks as columns (`sv_SE.person` → `femalefirst`, `malefirst`; `misc.uuid` → `variant`). - Share the handle lists between `email.local` and `username` only if that is a clean win — a reference between shipped categories is a major once tagged. #### Geo tree (proposal, pending review) Five linked tables per country, generic names so a template ports across countries; the README maps each to the native term. | Table | SE | US | Weight | |---|---|---|---| | `region` | län (21) | state (56) | population | | `municipality` | kommun (290) | county (3,234) | population | | `locality` | postort (~1,780) | place (~19,500) | population | | `postal-code` | postnummer (~10,500 deliverable) | ZCTA (33,791) | address count or 1 | | `street` | gatunamn, top N per locality | street name, top N per place | address count | - `geo.SE.address` is a record over one consistent draw: street, number, postal code, locality; `geo.SE.locality[stockholm].address` stays inside Stockholm. - v0.1.0 ships SE and US; then NO, DK, FI, NL, FR, AU, CA, ES, GB, DE. - SE streets come from NVDB per kommun and postnummer from GeoNames per postort, box codes dropped by the third-digit rule; the pairing is approximate. Revisit an application to Lantmäteriet for the exact pairing after v0.1.0. #### Sources (`research-geo-se.md`, `research-geo-world.md`) | Data | Source | Licence | |---|---|---| | SE län, kommun, population, tätorter | SCB | CC0 | | SE street names per kommun | Trafikverket NVDB Gatunamn | CC0 | | SE postnummer → postort | GeoNames SE.zip (stale, retired codes included) | CC BY 4.0 | | SE full addresses | Lantmäteriet Belägenhetsadress | CC BY 4.0 + personal-data terms, application | | SE Göteborg, Malmö full addresses | OpenAddresses | CC0 | | US states, counties, places, population, ZCTA | Census (Gazetteer, SUB-EST2025, ZCTA relationships) | public domain | | US addresses, streets | DOT National Address Database | public domain | | NO addresses | Kartverket Matrikkelen; Bring postnummer | CC BY 4.0; NLOD 2.0 | | DK addresses | DAWA / DAR | CC BY 4.0 | | FI addresses, postal codes | DVV/SYKE; Posti PCF/BAF | CC BY 4.0; Posti terms | | NL addresses | BAG | CC0 | | FR addresses | BAN, La Poste hexasmal | Licence Ouverte 2.0 | | AU addresses | G-NAF | CC BY 4.0 EULA | | CA addresses | StatCan National Address Register | StatCan Open Licence | | ES addresses | Catastro INSPIRE AD (no Basque, Navarre) | Catastro licence, verify | | GB streets, postcodes | OS Open Names, Code-Point Open (no house numbers) | OGL v3 | | DE Gemeinden, addresses | Destatis GV100, 15 Länder Hauskoordinaten (no Bavaria) | dl-de/by-2-0 | | Cities with population, any country | GeoNames cities500 | CC BY 4.0 | | Names by frequency | SCB, SSA, Census | CC0, public domain | | Never | OpenStreetMap, OpenPLZ, countries-states-cities-database | ODbL share-alike | An LLM is a source only for non-factual lists (product adjectives, catchphrases, hacker phrases), never for names, places, codes or ids. #### Categories to add Union of @faker-js/faker, Python Faker, gofakeit, Datafaker, Bogus, Mimesis, Chance and Ruby faker (`research-libraries.md`). What sets fejkdata apart, and what every issue tracker asks for: real values, frequency weights, and facts that agree across a record. No pop-culture catalogues. - Person: real first and last names weighted by official frequency tables (SCB, SSA, Census), middle name, generic (non-gendered) first names, gender, title, suffix, birthdate and age, job title/area/level, blood type weighted by prevalence, marital status, nationality and demonym, valid national ids (personnummer, samordningsnummer, SSN, EIN, and one per new locale), passport number, bio. - Address: the geo tree, secondary address (`lgh 1201`, `Apt 4B`), PO box, building number, latitude and longitude inside the locality, timezone by country and region, cardinal direction, continent, full ISO 3166 country row (name per locale, alpha2, alpha3, numeric, calling code, TLD, capital, currency, flag emoji, languages), ISO 3166-2 subdivisions. - Company: name patterns per locale, legal suffix, valid organisationsnummer and VAT number (SE), EIN (US), DUNS, industry (SNI/NAICS), department, profession, catchphrase, slogan, buzzwords, domain from the name. - Internet: ipv4 public/private/CIDR, ipv6, hostname, TLD, port, protocol, http method and version, log level, slug, password, JWT shape, hash (md5/sha1/sha256), avatar and placeholder image URLs, user agent per browser, safe email domains, full IANA mime list with extensions correlated. - Finance: BIC, BBAN, ABA routing with check digit, credit card per network with valid prefix, length, CVV and expiry, bankgiro and plusgiro (SE), clearing number, ISIN and CUSIP with check digit, crypto addresses, stock ticker, transaction type and description, amount by currency. - Commerce: product name, adjective, material, description, department, brand, SKU, promo code, EAN/UPC/ISBN/GTIN/ASIN, IMEI, garment size, price per locale. - Date and time: `{date(from,to,layout)}` and `{time()}` builtins, birthdate by age range, weekday and month names per locale, ISO datetime, unix time, duration, cron. - Phone: national, international and E.164 per locale, area code, extension. - Text: per-locale word classes (noun, verb, adjective, adverb, preposition), sentence, paragraph, lorem ipsum, question, quote, hacker and hipster phrases. - Vehicle: real make and model pairs, type, fuel, transmission, color, year, VIN with check digit, license plate per country, bicycle. Airline: airline, airport (IATA, ICAO, tied to the geo tree), aircraft, flight number, seat, record locator. - Science and nature: element (symbol, number), unit, scientist, planet, animal by class, plant. - Food and drink, book (title, author, genre, publisher), music (genre, instrument), movie genre, sport, programming language, OS, database (column, type, engine), version control (branch, commit message, sha), semver, file (name, extension, path). - Color: named per locale, hex, rgb, hsl, cmyk, css function. - Locales: nb_NO, da_DK, fi_FI, de_DE, en_GB, nl_NL, fr_FR, es_ES with person, address, phone, national id, company and date names each. ### Release - CLI without Go — investigate prebuilt binaries: GoReleaser attaching them to the Gitea release the tag workflow publishes, a container image, Homebrew and Scoop. A checkout build prints `devel` for `--version`; the binaries carry the stamped tag. - Homepage — a simple page for fejkdata with an in-browser generator: the library compiled to WebAssembly, so visitors generate as much data as they like in their own browser.