145 lines
8.5 KiB
Markdown
145 lines
8.5 KiB
Markdown
# 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/<alpha2>/`; 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.
|