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
3 changed files with 24 additions and 45 deletions
Showing only changes of commit a84997d2f4 - Show all commits
+4 -2
View File
@@ -8,10 +8,12 @@
only, `gh pr merge --rebase` where the branch is already on top of main. only, `gh pr merge --rebase` where the branch is already on top of main.
- README goal 2 is gated at 7.0 on the `comprehension-panel` skill, and below it - README goal 2 is gated at 7.0 on the `comprehension-panel` skill, and below it
nothing else merges — no feature, no category, no data — bar a security fix, a nothing else merges — no feature, no category, no data — bar a security fix, a
dependency bump and the infrastructure the round itself runs on. `todo.md` carries the round: the nine-seat findings run at depth 1, dependency bump, a repair of a promise goals 3 to 5 make, and the infrastructure
the round itself runs on. `todo.md` carries the round: the nine-seat findings run at depth 1,
a PR per item it names, then the run again, until the score passes. At or above 7.0 a PR per item it names, then the run again, until the score passes. At or above 7.0
every pull request scores with the four-seat run and answers it in one run. No merge every pull request scores with the four-seat run and answers it in one run. No merge
lowers the last score. lowers the last score its own panel recorded: the nine-seat round and the four-seat
run are two ratchets, never compared with each other.
- Hard tabs. No comment by default; delete a restatement, a rationale, history, or a file preamble. - Hard tabs. No comment by default; delete a restatement, a rationale, history, or a file preamble.
- One spelling per result: reject the other at `New`, and let the error name the spelling to use. - One spelling per result: reject the other at `New`, and let the error name the spelling to use.
- Prose naming a source states what that source states: read the register's own field - Prose naming a source states what that source states: read the register's own field
+10 -5
View File
@@ -801,9 +801,11 @@ App developers writing tests and fixtures, in Go and at a shell:
- a **Go test author**, filling a struct with `FakeStruct` - a **Go test author**, filling a struct with `FakeStruct`
- a **hand fixture author**, one value at a shell - a **hand fixture author**, one value at a shell
- a **validator-facing author**, who needs a value a real checker accepts - a **validator-facing author**, who needs a value a real checker accepts
- a **data author**, who writes categories under `--data-path` and meets every load
error the fences raise
and a **contributor**, who reads [`todo.md`](todo.md), [`AGENTS.md`](AGENTS.md) and and a **contributor**, who reads [`todo.md`](todo.md), [`AGENTS.md`](AGENTS.md) and
the Development section below, and who ships a register the four above then draw from. the Development section below, and who ships a register the five above then draw from.
## Goals ## Goals
@@ -819,14 +821,17 @@ the Development section below, and who ships a register the four above then draw
holding the rest, names that tell the truth, and a file that stands with no second holding the rest, names that tell the truth, and a file that stands with no second
document open beside it. A simulated reader panel scores those four, the score is a document open beside it. A simulated reader panel scores those four, the score is a
ratchet no release lowers, and [`AGENTS.md`](AGENTS.md) says what each pull request ratchet no release lowers, and [`AGENTS.md`](AGENTS.md) says what each pull request
owes it. owes it. Below the floor it holds back new capability, never a repair of a promise
3. **Valid by construction** — every value passes the check its real consumer goals 3 to 5 already make, as long as the round that lifts the score stays planned.
applies; facts that belong together come from one draw, within a value and 3. **Valid by construction** — every value passes the check a current release of
across categories. its real consumer applies; facts that belong together come from one draw, within
a value and across categories.
4. **Templates are intuitive, and text means what it says** — a template or a path, 4. **Templates are intuitive, and text means what it says** — a template or a path,
and every path in a template, renders what every writer reading it would expect, and every path in a template, renders what every writer reading it would expect,
judged by simulated writers from the Audience. A format renders as written; only `{…}` varies, random characters included judged by simulated writers from the Audience. A format renders as written; only `{…}` varies, random characters included
(`{digits(3)}`), and a selected row, `[SE]`, is that row wherever it is written. (`{digits(3)}`), and a selected row, `[SE]`, is that row wherever it is written.
A name is changed whenever a more intuitive one is found; the Versioning table
prices the change, never blocks it.
Where two writers could expect different outputs, the template is a load error Where two writers could expect different outputs, the template is a load error
naming a spelling for each. One spelling per result; the wrong one is a load error naming a spelling for each. One spelling per result; the wrong one is a load error
naming the right one. naming the right one.
+10 -38
View File
@@ -73,9 +73,8 @@ by a `data-import/` script, as README goal 12 asks.
- Give a `sv_SE.personnummer` over 100 the `+` separator Skatteverket spells, or stop - Give a `sv_SE.personnummer` over 100 the `+` separator Skatteverket spells, or stop
drawing birthdates that reach 100: the format hard-codes `-`, and the 1930 floor drawing birthdates that reach 100: the format hard-codes `-`, and the 1930 floor
makes the oldest draws invalid from 2031. makes the oldest draws invalid from 2031.
- Settle `en_US.ip` and `sv_SE.ip`, today byte-identical: either one `misc.ip` as the - Merge `en_US.ip` and `sv_SE.ip`, today byte-identical, into one `misc.ip`, per goal 4's
decision "`misc` is what every locale shares" asks, or a decision saying why an one spelling per result.
address that carries no locale stays per-locale.
- Accept a middle name, and draw a shipped `personnummer` inside a *selected* sex; - Accept a middle name, and draw a shipped `personnummer` inside a *selected* sex;
both want a draw group sharing its family's pins. Stop the conflict error naming a 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 rewrite that returns a different value where the read it conflicts with sits inside
@@ -88,8 +87,13 @@ by a `data-import/` script, as README goal 12 asks.
goal 12 asks for and the hand-written list they use today does not meet. Keep the goal 12 asks for and the hand-written list they use today does not meet. Keep the
handle shape: `username` shortens a surname to `ahl` or `sjo`, and the US one draws handle shape: `username` shortens a surname to `ahl` or `sjo`, and the US one draws
unisex given names, neither of which falls out of the tables unaided. unisex given names, neither of which falls out of the tables unaided.
- Decide whether `email.local` and `username` share one list: a reference between - Draw `email.local` from `username`, so the two share one handle list.
shipped categories breaks a consumer once tagged, so it rides a 0.(x+1).0 after that. - Rename `misc.territory.country` to `sovereign`, per goal 4: it holds a code, and
`country` collides with the `misc.country` path it replaced.
- Add `misc.browser` as the parent of `misc.useragent`, so
`misc.browser[Chrome].useragent` resolves, per goal 3.
- Group `data/misc` into folders where a group name makes a path easier to guess, per
goal 4.
`misc` (locale-neutral) `misc` (locale-neutral)
@@ -219,33 +223,6 @@ by a `data-import/` script, as README goal 12 asks.
everywhere else. Typing a shipped column changes what `json` and `sql` write, so the everywhere else. Typing a shipped column changes what `json` and `sql` write, so the
capability is a minor and applying it to `misc.httpmethod` is a major. capability is a minor and applying it to `misc.httpmethod` is a major.
### Open questions to settle
- Decide whether a goal 5 violation joins the comprehension gate's exception list: the
`{/sel}|{/sel}` panic waits behind the whole round at 5.9, and
`{/geo.SE.locality}|{/geo.SE.municipality}` mispairs the shipped data meanwhile, though a
repair restoring behaviour the repo already claims may already pass the gate as written.
- Decide whether the README's Audience names the author who writes categories under
`--data-path`: the four personas listed consume the shipped set and the contributor
ships a register upstream, while "Your own data" is a README section, `-d` is a
first-class flag, and every load error the draw fences raise lands on that author.
- Decide whether `data/misc`'s 33 flat files gain a level before v1.0.0: a folder is a
path segment, so `misc/net/tld` is a rename a consumer pays for, and goal 13 promises
the directory keeps growing.
- Decide whether `misc.browser` becomes a parent of `misc.useragent`, so
`misc.browser[Chrome].useragent` resolves. Adding a `parent` after v0.1.0 breaks a
consumer, so it rides a 0.(x+1).0.
- Decide whether `misc.timezone` keeps every zone tzdb names: one added recently,
`Europe/Kyiv` among 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.country` is renamed `sovereign`: it holds a code, and
`country` collides with the `misc.country` path it replaced. A rename after v0.1.0
breaks a consumer, so it rides a 0.(x+1).0.
- Decide whether `parent: territory` stays, given a `--data-path` override of
`misc.territory` now fails `New` unless `misc.timezone` is overridden with it.
### Release ### Release
- Read the tag through `git/ref/tags/{tag}` in `publish_release.py`: GitHub answers - Read the tag through `git/ref/tags/{tag}` in `publish_release.py`: GitHub answers
@@ -303,11 +280,6 @@ because pairing a street with its exact postnummer rewrites shipped rows.
- Name goal 2's four criteria with the axes the panel scores, so a recorded score maps - Name goal 2's four criteria with the axes the panel scores, so a recorded score maps
back to the clause it came from: the goal spells them out in prose while `todo.md` back to the clause it came from: the goal spells them out in prose while `todo.md`
records `Navigation`, `Locality`, `Shape` and `Self-sufficiency`. records `Navigation`, `Locality`, `Shape` and `Self-sufficiency`.
- Put the round's nine-seat score and the four-seat score every later pull request
takes on one scale, or say in `AGENTS.md` that they are two ratchets: it gates the
round on the first and every merge after 7.0 on the second, then holds one "last
score" across both, where the `comprehension-panel` skill has two independent panels
drift unless a calibration seat reads the anchor project without its score.
- Delete `doc.go`'s "The draw fences are …" sentence: it names a function, a type and - Delete `doc.go`'s "The draw fences are …" sentence: it names a function, a type and
a helper reached only through `drawWalk.check`, and misses `checkDrawGroup`, a helper reached only through `drawWalk.check`, and misses `checkDrawGroup`,
`checkOwnFamily` and `checkColumnDraws`; the README's Layout indexes the fences by file. `checkOwnFamily` and `checkColumnDraws`; the README's Layout indexes the fences by file.
@@ -320,7 +292,7 @@ because pairing a street with its exact postnummer rewrites shipped rows.
- Scope `AGENTS.md`'s `Hard tabs.` to the Go source, or drop it: `gofmt` already gates - Scope `AGENTS.md`'s `Hard tabs.` to the Go source, or drop it: `gofmt` already gates
Go at `Dockerfile:21`, and the shipped JSON under `data/` is two-space, so the rule as Go at `Dockerfile:21`, and the shipped JSON under `data/` is two-space, so the rule as
written is one no Go file can break and every data file does. written is one no Go file can break and every data file does.
- Make `gitea.larvit.se/larvit/fejkdata` a pull mirror of GitHub or retire it: - Make `gitea.larvit.se/larvit/fejkdata` a pull mirror of GitHub:
Gitea converts a repository to a mirror only by re-creating it, so until that runs Gitea converts a repository to a mirror only by re-creating it, so until that runs
the copy there is a second owner of one history and goes stale from this commit. the copy there is a second owner of one history and goes stale from this commit.
- Stop `/cache` collecting root-owned files, which today every command documented - Stop `/cache` collecting root-owned files, which today every command documented