Make great documentation goal 1.2, and plan the README's reorganisation and the nested-template gaps #33

Open
lilleman wants to merge 966 commits from worktree-todo-relative-dates-exact-counts into main
4 changed files with 12 additions and 9 deletions
Showing only changes of commit 6eb9880a3f - Show all commits
+8 -5
View File
@@ -829,8 +829,9 @@ the output.
Semver tags on `main`, `v0.1.0` first; one version covers the shipped data, the
library and the CLI, and [`CHANGELOG.md`](CHANGELOG.md) names what each release
changed. A consumer's data, code and scripts keep working across a minor or a patch:
a minor only adds, and a major is the only release that changes what exists.
changed. A consumer's data, code and scripts keep working across a minor or a patch,
except output pinned to a seed. A minor only adds, and a major is the only release that
changes what exists.
| Surface | Major | Minor |
|---------|-------|-------|
@@ -843,9 +844,11 @@ a minor only adds, and a major is the only release that changes what exists.
A patch changes no row of this table: performance, docs, or a fix inside a promised
behaviour that adds or removes no value and changes no path, format or spelling.
Any release, a patch too, may change what a seed draws, so pin seeded fixtures to one
version. An error's wording may
improve in a minor; the path, rejected spelling and replacement it names may not.
Any release, a patch too, may change what a seed draws, so regenerate seeded fixtures
whenever the fejkdata version changes.
An error's wording may improve in a minor; the path, rejected spelling and replacement
it names may not.
Before `v1.0.0` a minor is the breaking unit: `0.(x+1).0` may carry a major's
changes, each named in the changelog, and a `0.x.y` patch may not. `v1.0.0` is
+1 -1
View File
@@ -48,7 +48,7 @@ array, one JSON object per line, one CSV row (after a header), or one INSERT.
--list list the paths the data offers, then exit
--no-shipped-data load only the --data-path directories
-n, --repeat N render the value N times, 1..1048576 (default 1)
-s, --seed N seed for reproducible output
-s, --seed N seed: the same seed, version and data give identical output
--separator S string between repeated values (default newline)
--table T the INSERT target for --format sql (default: the path's last segment, or records for an inline template)
--version print the version, then exit
+2 -2
View File
@@ -57,8 +57,8 @@ type config struct {
// Option configures a [Generator].
type Option func(*config)
// WithSeed makes output reproducible: two generators with the same seed and data
// emit identical sequences.
// WithSeed makes output reproducible: two generators with the same seed, version and
// data emit identical sequences.
func WithSeed(seed uint64) Option {
return func(c *config) { c.seed, c.seeded = seed, true }
}
+1 -1
View File
@@ -135,7 +135,7 @@
### 77. Split the shipped data into Go modules per locale and country, which a library imports by choice, and embed every one in the CLI.
The CLI binary carries every module and may grow to hundreds of MB; a library imports only what it uses, as it imports any dependency, and nothing is fetched at run time. Goal 2 says what ships where. The maintainer decided on 2026-10-04: one module per locale, one per country's `geo/` tree, and one for `misc`. A module registers nothing when imported; the library passes it to `New` as an option, per the technical principles "Compose, do not entangle" and "Explicit over implicit". Still to decide: what a bare `New()` loads; whether a module's data is an `fs.FS` passed to the existing `WithDataFS` or a new option such as `WithData(svse.Data)`; and whether `WithoutShippedData` goes. Before the module API ships, a panel of the README's audience personas tries pulling in data with it.
The CLI binary carries every module and may grow to hundreds of MB; a library imports only what it uses, as it imports any dependency, and nothing is fetched at run time. Goal 2 says what ships where. The maintainer decided on 2026-10-04: one module per locale, one per country's `geo/` tree, and one for `misc`. A module registers nothing when imported; the code importing it passes it to `New` as an option, per the technical principles "Compose, do not entangle" and "Explicit over implicit". Still to decide: what a bare `New()` loads; whether a module's data is an `fs.FS` passed to the existing `WithDataFS` or a new option such as `WithData(svse.Data)`; and whether `WithoutShippedData` goes. Before the module API ships, a panel of the README's audience personas tries pulling in data with it.
### 78. Ship 10% of every place's streets, at least 10, and 10% of all US places drawn by population, each place weighted by population.