Key only a table a user selects into, state how a postort keeps its id, retire what the name option served, and make the doc sweep a grep

This commit is contained in:
2026-09-27 23:15:52 +02:00
committed by Lillem4n
parent 7acb2136ec
commit 03a48e378c
3 changed files with 25 additions and 39 deletions
-1
View File
@@ -99,7 +99,6 @@ In [docs/decisions.md](docs/decisions.md):
- `misc.territory` is the spine, and a `misc` table naming a territory links to it - `misc.territory` is the spine, and a `misc` table naming a territory links to it
- A table whose register publishes no frequency draws evenly - A table whose register publishes no frequency draws evenly
- `misc.timezone` weighs a zone by the people living in it - `misc.timezone` weighs a zone by the people living in it
- `misc.port` selects by number, and carries no `name`
- `misc.car` is one flat table, not a make linked to its models - `misc.car` is one flat table, not a make linked to its models
- `misc.territory` names its sovereign in a column, and there is no `misc.country` table - `misc.territory` names its sovereign in a column, and there is no `misc.country` table
- `misc.loglevel` is a table keyed by POSIX's keyword, carrying the code - `misc.loglevel` is a table keyed by POSIX's keyword, carrying the code
+10 -18
View File
@@ -410,15 +410,14 @@ Decided 2026-09-27 by the maintainer, for goal 4's one spelling per result; vali
the key is the code a user writes, as a database keys a table. `country[NO]` loads, and the key is the code a user writes, as a database keys a table. `country[NO]` loads, and
`country[Norway]` is refused naming `[NO]`, found by the row whose cell spells the `country[Norway]` is refused naming `[NO]`, found by the row whose cell spells the
selector. The key is the friendliest code the register holds, `misc.territory[SE]` and selector. The key is the friendliest code the register holds, `misc.territory[SE]` and
`misc.currency[EUR]`, and only where it holds none an id the import assigns and never `misc.currency[EUR]`. There is no `name` option, and a table a user has no row of to
moves to another row. There is no `name` option. select, a name table, `street`, `car` or `useragent`, carries no key and is drawn only.
- `misc.loglevel` keys on the keyword, `[err]`, which a configuration writes.
- `misc.tld` keys on the ASCII form, `[.xn--p1ai]`, the one DNS carries.
- `geo.US.locality` keys on the Census GEOID, `[1714000]` for Chicago. - `geo.US.locality` keys on the Census GEOID, `[1714000]` for Chicago.
- `geo.SE.locality` keys on an assigned id: a postort has no code of its own. - `geo.SE.locality` keys on an integer the import assigns, since a postort has no code of
- A name table, `first-name`, `last-name` and `title`, carries no key, so it is drawn its own: the import reads the previous TSV and keeps each postort's id by kommun and
from and never selected. name, a new postort takes the next unused integer, and a removed or renamed one retires
its id for good.
## A parent row with no child row is a load error ## A parent row with no child row is a load error
@@ -443,8 +442,7 @@ option earns its place.
## The key index is built at load, the rest on first draw ## The key index is built at load, the rest on first draw
A link is proved against the parent's keys and a key's uniqueness is a data mistake, so A link is proved against the parent's keys and a key's uniqueness is a data mistake, so
both are load-time; the name index and the per-parent child lists serve only a draw or a both are load-time; the per-parent child lists serve only a draw, so they wait for the first one, keeping `New` linear in the bytes read.
selection, so they wait for the first one, keeping `New` linear in the bytes read.
## Two categories may name one TSV ## Two categories may name one TSV
@@ -551,9 +549,9 @@ are a curated proportion rather than bearers anyone counted.
## A table owns the spelling of a selector on it ## A table owns the spelling of a selector on it
A reference reaches a table by a path that carries no selector — `sv_SE.person.first` A reference reaches a table by a path that carries no selector — `sv_SE.address` reads
reads `first-name` through `sex` — so the walk that resolved a name cannot say where a `geo.SE.locality` through its template — so the walk that reached it cannot say where
reader would type one. The table's own location can, which is why it keeps its path, and a reader would type a selector. The table's own location can, which is why it keeps its path, and
why an error names `geo.SE.municipality[1281]` rather than `municipality[1281]`. why an error names `geo.SE.municipality[1281]` rather than `municipality[1281]`.
## No builtin reads the clock, so a date is bounded by days, never by an age ## No builtin reads the clock, so a date is bounded by days, never by an age
@@ -603,12 +601,6 @@ floored at 15,000, which goal 14 asks for: over 300 seeded draws of
even weight gave them 44, and `America/Indiana/Petersburg`, a town of 2,400, fell from 17 even weight gave them 44, and `America/Indiana/Petersburg`, a town of 2,400, fell from 17
to 0. Valid while a draw weighted this way lands where people live. to 0. Valid while a draw weighted this way lands where people live.
## `misc.port` selects by number, and carries no `name`
29 of its services sit on more than one port, `http-alt` on three, so
`misc.port[http-alt]` could name no one row. The number is what a port field holds
anyway, and `misc.port[443].service` reads the other way.
## `misc.car` is one flat table, not a make linked to its models ## `misc.car` is one flat table, not a make linked to its models
A row is a make and a model drawn together, so no render pairs a Volvo with a RAV4. Two A row is a make and a model drawn together, so no render pairs a Volvo with a RAV4. Two
+15 -20
View File
@@ -101,7 +101,7 @@ by a `data-import/` script, as README goal 12 asks.
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
another category, and report a struct column's draw conflict with the path spelling another category, and report a struct column's draw conflict with the path spelling
a tag takes. a tag takes.
- Let `geo.SE.locality[Lund].address` descend from a selected row into the template - Let `geo.US.locality[1714000].address` descend from a selected row into the template
beside the family: require the path step to reach a sibling category, and seed every 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. draw group of the render from the outer selector's pins.
- Read `email.local`'s and `username`'s handles from the shipped name tables, which - Read `email.local`'s and `username`'s handles from the shipped name tables, which
@@ -185,29 +185,24 @@ by a `data-import/` script, as README goal 12 asks.
matched without case, else say the table selects by its key: matched without case, else say the table selects by its key:
`misc.territory[Sweden]` and `misc.territory[se]` name `[SE]`, `misc.protocol[tcp]` `misc.territory[Sweden]` and `misc.territory[se]` name `[SE]`, `misc.protocol[tcp]`
its key, and `misc.loglevel[Error]` `[err]`. its key, and `misc.loglevel[Error]` `[err]`.
- Delete the `name` option, and the load checks it carries: a name spelling another - Delete the `name` option and the load checks it carries, a name spelling another
row's key, and a name repeating inside its parent. row's key and a name repeating inside its parent, and have `New` refuse a table
- Key `misc.loglevel` on `keyword`, and `geo.SE.locality` on an id `data-import/geo-se.py` still carrying `name`, naming `key`.
assigns and keeps across imports, linking `street` and `postal-code` by it. - Key `misc.loglevel` on `keyword`, and `geo.SE.locality` on the integer
- Drop `key` from `last-name` and `sv_SE.title`. `data-import/geo-se.py` assigns as the decision states, linking `street` and
- Rewrite what selects by name: in README.md, "selected by key or name", `postal-code` by it.
`misc.currency[Euro]`, "selects by either spelling", `misc.tld[.рф]`, - Drop `key` from `last-name` and `sv_SE.title`, and re-pin `testdata/shipped_shape.txt`.
`misc.loglevel[3]`, `misc.loglevel[err]` and "the code and the keyword do", the `geo` - Leave no selection by name in README.md, CHANGELOG.md or docs/: no selector spelling
table's "by code or name", "by USPS abbreviation or name", "by GEOID or name" and a free-form name, `geo.SE.locality[Lund]`, `misc.currency[Euro]`, `first-name[Kim]`
"by name", `geo.SE.locality[Lund]`, `geo.SE.region[Skåne län]`, and the rest, no "key or name", "by name" or "either" wording about selectors, and no
`geo.US.region[IL].locality[Springfield]`, "selection by name", `name` option in an example.
`first-name[Taylor]`, `first-name[Kim]`, `sv_SE.title[dr]`, the `name` option's
paragraph and "`[key]` or `[name]`"; `locality[Lund]` in docs/decisions.md; in
CHANGELOG.md, "a path selects a row by key or name", "a name spelling another row's
key", "a name repeating inside one parent row", "A `name` without a `key`" and
`misc.tld[.рф]`.
- Render selected rows as the decision "A selected row is fixed, not drawn, and an - Render selected rows as the decision "A selected row is fixed, not drawn, and an
unnamed read beside it is refused" states: `New` refuses unnamed read beside it is refused" states: `New` refuses
`{/misc.territory[SE].capital} / {/misc.territory[FI].capital}` today, and a choice `{/misc.territory[SE].capital} / {/misc.territory[FI].capital}` today, and a choice
whose items select different rows. Have the refusal of an unnamed read name the whose items select different rows. Have the refusal of an unnamed read name the
rewrite through each selection: beside `{/geo.SE.locality[Lund].name}`, rewrite through each selection: beside `{/geo.US.locality[1714000].name}`,
`{/geo.SE.municipality.name}` names none today, where `{/geo.US.municipality.name}` names none today, where
`{/geo.SE.locality[Lund].municipality.name}` holds once the step up above lands. `{/geo.US.locality[1714000].municipality.name}` holds once the step up above lands.
Scope the README's "A reference path into a category is held" to a path that Scope the README's "A reference path into a category is held" to a path that
selects no row. selects no row.
- Report the same error every load for a table with two bad options, and for a - Report the same error every load for a table with two bad options, and for a