9.8 KiB
9.8 KiB
Plan
Ordered as the releases that ship it.
v0.1.0
Data
Shape: T = table, t = template, c = choice. Read every factual list from a register
by a data-import/ script, as README goal 10 asks.
- Add the remaining
misctables and templates from the table below. - Read
misc.emojifrom the Unicodeemoji-test.txtregister, andmisc.carfrom an international make and model source; vPIC and Mobility Sweden are national, so they builden_US.carandsv_SE.car. - Add the remaining locale categories: company, phone, finance, vehicle, words.
- Give every shipped category building-block columns,
misc.uuid→variantamong them, and one record shape across the national ids; re-pin the shape. - Give the address records one column set across countries:
regionandmunicipalityas columns ongeo.SE.addresstoo. - Fill the 398 Swedish localities weighted 200 from SCB småorter.
- Accept a middle name, and draw a shipped
personnummerinside a selected sex; both want a draw group sharing its family's pins. Stop the conflict error naming a rewrite that returns a different value where the read it conflicts with sits inside another category, and report a struct column's draw conflict with the path spelling a tag takes. - Let
geo.SE.locality[Lund].addressdescend from a selected row into the template beside the family: require the path step to reach a sibling category, and seed every draw group of the render from the outer selector's pins. - Read
email.local's andusername's handles from the shipped name tables, which goal 10 asks for and the hand-written list they use today does not meet. - Decide whether
email.localandusernameshare one list: a reference between shipped categories breaks a consumer once tagged, so it rides a 0.(x+1).0 after that.
misc (locale-neutral)
| Category | Shape | Source | Licence |
|---|---|---|---|
httpmethod, port, tld, protocol, loglevel |
T/c | IANA | CC0 |
ip v4 documentation ranges, private, CIDR; ipv6 2001:db8::/32; mac locally administered |
t | RFC 5737, 1918, 9637 | facts |
creditcard per network: IIN, length, CVV, expiry |
T+t | network rules, {luhn()} |
facts |
bic, isin, cusip |
t | structure rules | facts |
ean, upc, gtin, isbn, issn, imei, asin, sku |
t | check-digit rules, GS1 demo prefix 952 | facts |
product name, adjective, material, department, garmentsize |
T/c | LLM-written lists | — |
airport IATA, ICAO, territory, municipality; airline; aircraft; flight, seat, pnr |
T+t | OurAirports, Wikidata | public domain, CC0 |
element, unit, planet |
T | PubChem, BIPM, NASA | public domain, CC BY 4.0 |
animal by class, plant |
T | Wikidata | CC0 |
bloodtype weighted (global) |
c | AABB | facts |
color named, hex, rgb, hsl, cmyk |
T+t | CSS Color 4, XKCD | W3C, CC0 |
programminglanguage, os, browser, database column/type/engine, fileext |
T/c | Linguist, curated | MIT |
commit message, branch, sha |
t | LLM-written, {hex(40)} |
— |
password, hash, jwt, slug, hostname, avatar, placeholderimage |
t | shapes | — |
book title, author; genre; instrument; dish, ingredient |
T | Gutenberg catalog, MusicBrainz, USDA | CC0 |
lorem, hacker, hipster, catchphrase, buzzword, quote |
T/c | lorem ipsum, LLM-written | — |
direction, continent, ulid |
c/t | — | — |
sv_SE (source research: research-sources-se.md, in the handoff)
| Category | Shape | Source | Licence |
|---|---|---|---|
person title, birthdate, age, blood type weighted |
t | geblod.nu distribution | facts |
organisationsnummer by form, vat |
t | Bolagsverket group digits, Luhn, SE…01 |
facts |
company name patterns, legal form weighted |
t | Bolagsverket registrations 2025 | CC BY 2.5 SE |
sni industry codes |
T | SCB SNI 2025 | "Källa: SCB" |
ssyk occupations |
T | SCB SSYK 2012 | "Källa: SCB" |
phone mobile, fixed per area code, E.164 |
T+t | PTS numbering plan 2024 | facts |
bankgiro, plusgiro, bankaccount clearing + Luhn/mod-11 |
T+t | Bankinfrastruktur CSV, Bankgirot rules | facts |
licenseplate ABC 123, ABC 12A, blocked combinations |
t | Transportstyrelsen | facts |
car make, model weighted by registrations |
T | Mobility Sweden 2025 | cite |
word noun, verb, adjective, adverb; sentence |
T+t | SALDO | CC BY 4.0 |
month and weekday names, holiday |
t+T | CLDR sv, lag 1989:253 | Unicode |
territory localised names keyed by alpha2 |
T | CLDR sv territory names | Unicode |
en_US (source research: research-sources-world.md part1–4, in the handoff)
| Category | Shape | Source | Licence |
|---|---|---|---|
ein valid ranges |
t | IRS | facts |
company names, suffix, naics |
t+T | SEC tickers for patterns, NAICS 2022 | public domain |
phone NANP with valid NPA/NXX |
t | NANPA rules | facts |
routing ABA with check, bankaccount |
t | Fed prefix ranges | facts |
licenseplate per state |
T | hand-authored patterns | facts |
car make, model |
T | NHTSA vPIC | public domain |
word, sentence, paragraph |
T+t | Moby POS or WordNet | public domain / WordNet |
month and weekday names, holiday |
t+T | CLDR en | Unicode |
Builtins the data cannot express
- Add
{isin()}(Luhn over letters expanded to digits),{cusip()},{aba()}(3-7-1 weights) and{vin()}(position 9 over the whole; a sample taking the WMI, since the check sits mid-string). - Add
{base64url(n)}for JWT shapes. - Add a
unixlayout todate()once something needs it.
Open questions to settle
- Decide whether
misc.browserbecomes a parent ofmisc.useragent, somisc.browser[Chrome].useragentresolves. Adding aparentafter v0.1.0 breaks a consumer, so it rides a 0.(x+1).0. - Decide whether
misc.timezonekeeps every zone tzdb names: one added recently,Europe/Kyivamong them, is rejected by a consumer resolving it against older tzdata, and the population weight makes that zone likelier, not rarer. Today the README names the action a reader takes instead; narrowing what ships is the alternative. - Decide whether
misc.territory.countryis renamedsovereign: it holds a code, andcountrycollides with themisc.countrypath it replaced. A rename after v0.1.0 breaks a consumer, so it rides a 0.(x+1).0. - Decide whether
parent: territorystays, given a--data-pathoverride ofmisc.territorynow failsNewunlessmisc.timezoneis overridden with it. - Decide whether the shipped
urlandemaildomains are restricted to RFC 2606's reserved names: 17 of the 40 are not, and.se,.nu,.ioand.coare live ccTLDs anyone can register, while.devand.appare HSTS-preloaded, so a browser forceshttp://example.devto HTTPS. Restricting them costs the locale flavourexample.seand.nuwere chosen for. - Record why fejkdata ships no pop-culture catalogue. README Decisions states the
choice with no reason, because goal 10 does not supply one: it admits a hand-written
set where no register exists, and Wikidata, MusicBrainz and the Gutenberg catalog are
registers this plan already reads for
book,instrumentandanimal.
Release
- Move the README's Decisions section to
docs/decisions.md, leaving a one-line index of the titles inAGENTS.md, and drop theAGENTS.mdline pointing decisions at the README. - Rewrite
CHANGELOG.md's[Unreleased]as what v0.1.0 holds: nothing has shipped, so "no longer paths", "where it used to fail" and "where it used to be an empty string" describe versions no reader can have installed. - Ship prebuilt binaries so the CLI needs no Go: GoReleaser attaching them to the Gitea
release the tag workflow publishes, a container image, Homebrew and Scoop. A checkout
build prints
develfor--version; the binaries carry the stamped tag.
v0.2.0
- Ship the full registers as packs, each a Go module with its own
embed.FSand a zip for--data-path: every US place of 10,000 and more streets per locality, built by--min-populationand--streets-per-locality. The default embed stays under ~1 MB per country andNewunder ~50 ms. - Add the locales nb_NO, da_DK, fi_FI, de_DE, en_GB, nl_NL, fr_FR and es_ES, with
person, address, phone, national id, company and date names each, and the
geo/trees NO, DK, FI, NL, FR, AU, CA, ES, GB and DE theiraddressreads by reference; AU and CA get a tree with no locale of their own. - Add
{btc()}and{eth()}, which need sha256 and keccak for Base58Check and EIP-55. - Pair a street with its exact postnummer, which needs an application to Lantmäteriet; today a street goes to the nearest postal code centroid. It rewrites shipped rows, so it is a major once 1.0 is cut and a minor before that.
v0.3.0
- Ship nothing breaking, which is what v1.0.0 waits for: v0.2.0 rewrites shipped rows when it pairs a street with its exact postnummer.
v1.0.0
- Cut it once the shipped data is in its record shape and one full minor has shipped with no breaking change, per the README's Versioning table. It plans no work of its own: v0.1.0 settles the record shape and v0.3.0 is the quiet minor.
Not release-bound
- Stop
/cachecollecting root-owned files, which today every command documented without--userleaves for the next--userone to trip over, and which the README answers with a chown a reader has to repeat. Put--useron all of them, or give thex-goanchor auser:— that one needs a mechanism, since Compose interpolates from the process environment and neitherUIDnorGIDis exported there, souser: "${UID}:${GID}"resolves to":". - Publish a homepage with an in-browser generator: the library compiled to WebAssembly, so visitors generate as much data as they like in their own browser.