From 8c4ee8362e0cf2fe8e5be81d9ec2536021f66e2f Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sun, 27 Sep 2026 16:59:37 +0200 Subject: [PATCH] Name the near miss by the row whose cell spells it, retire the rules the key-only selector makes false, and ask which key each table keeps --- docs/decisions.md | 21 ++++++++++----------- todo.md | 29 ++++++++++++++++++----------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/docs/decisions.md b/docs/decisions.md index ff220c4..3b7788d 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -342,10 +342,7 @@ a load error rather than a file silently ignored. `municipality[0180]` reads as selection to anyone who has indexed an array, and `[St. Louis]` keeps a name whole where a colon or a dot-separated spelling could not; zsh -needs the brackets quoted, which the README's examples show. A name that spells another -row's key is refused at load rather than shadowed: a key names one row by contract, so -the name could never select its own, and the check is one lookup per row against the key -index that already exists. +needs the brackets quoted, which the README's examples show. ## `parent` names the link column and the table alike @@ -397,7 +394,9 @@ parent. A row is selected or drawn alike. out, and a record's link column still holds the key, since it is a column, not a path. - A path may not step back down into a child table after a step up: `city[Oslo].country.city.name` could be Oslo or a city of Norway drawn afresh, so it is - refused, naming `city[Oslo].name` and `country[NO].city.name`. + refused, naming the path to the row it stepped up from, `city[Oslo].name`, and the path + down from the parent, `country[NO].city.name`; after a drawn row, `city.country.city.name` + names `city.name` and `country.city.name`. - A route through another row is another path to the same data, not a second spelling: `city[Oslo].country.name` and `country[NO].name` both load. @@ -407,10 +406,11 @@ the path ended. ## A selector names a row by its key alone -Decided 2026-09-27 by the maintainer, for goal 4's one spelling per result. A table with -a `key` selects by it alone: `country[NO]` loads, and `country[Norway]` is refused -naming `[NO]`, since a name could spell another row's key. A table with no `key` -selects by its `name` inside its parent, which is the key it has. +Decided 2026-09-27 by the maintainer, for goal 4's one spelling per result; valid while +every table either has a `key` or names its rows inside a parent. A table with a `key` +selects by it alone: `country[NO]` loads, and `country[Norway]` is refused naming +`[NO]`, found by the row whose cell spells the selector. A table with no `key` selects by +its `name` inside its parent, which is the key it has. ## A parent row with no child row is a load error @@ -632,8 +632,7 @@ claim fejkdata has no business making. A flat list of names carries neither the code a PRI encodes nor a selector reaching it, and goal 3 draws the two as one fact. The canonical spelling losing to the one its domain writes, above, settles the rest: a configuration writes `info`, so RFC 5424's -`Informational` stays the `severity` column, and the code and the keyword hold the two -selector slots. +`Informational` stays the `severity` column. ## `misc.tld` keys carry the leading dot, where other tables key on a bare code diff --git a/todo.md b/todo.md index c7ef426..9d2c2ca 100644 --- a/todo.md +++ b/todo.md @@ -179,10 +179,16 @@ by a `data-import/` script, as README goal 12 asks. README's `city[Oslo].country` example with `fejkdata -d ./mydata 'city[Oslo].country.name'`, rendering `Norway`. - Select a row by its key alone, as the decision "A selector names a row by its key - alone" states: `geo.SE.municipality[Lund]` and `misc.territory[Sweden]` select a row - today, where the error should name `[1281]` and `[SE]`. Refuse a `name` option beside - `key`, which then selects nothing, drop it from the shipped tables, and state the - README's selectors and `CHANGELOG.md`'s "a path selects a row by key or name" to match. + alone" states, once the open question on each table's key is settled: + `geo.SE.municipality[Lund]` and `misc.territory[Sweden]` select a row today. + - Have a selector that misses name the key of the row whose cell spells it, matched + without case, else say the table selects by its key: `misc.territory[Sweden]` and + `misc.territory[se]` name `[SE]`, `misc.protocol[tcp]` its key, `misc.tld[se]` + `[.se]`, and `misc.loglevel[Error]` the row a column spells `Error` in. + - Refuse a `name` option beside `key`, which then selects nothing, and drop it from + the shipped tables. + - Rewrite what selects by name: README.md lines 20, 174, 183, 193, 198, 255, 257, + 260, 473-491 and 499-504, and CHANGELOG.md lines 13-17 and 56. - Render selected rows as the decision "A selected row is fixed, not drawn, and an unnamed read beside it is refused" states: `New` refuses `{/misc.territory[SE].capital} / {/misc.territory[FI].capital}` today, and a choice @@ -217,13 +223,6 @@ by a `data-import/` script, as README goal 12 asks. `drawn.category`, `pinRow` names `t.path` and `mustRow` panics with `t.category`, so one table is `territory` and `misc.territory`, and the short spelling names no file where two folders hold that name. -- Name a spelling that works when a row selector misses: `misc.protocol[tcp]`, - `misc.httpmethod[get]` and `misc.territory[se]` all answer "no row … has key or name" - and stop there, where a case-insensitive match could name the row that exists, and a - table with no `name` column could say it selects by key alone. `misc.tld[se]` misses - on the leading dot its keys carry rather than on case, and `misc.loglevel[Error]` - misses although a column carries `Error`, so the near miss is worth naming whatever - shape it takes. - Let a table column carry a `datatype`, so `--format json` writes `"safe": true` and `--format sql` a boolean rather than the text `'true'`. Today only a JSON field takes one, so `misc.httpmethod`'s booleans are typed in Go and text @@ -232,6 +231,14 @@ by a `data-import/` script, as README goal 12 asks. ### Open questions to settle +- Decide which spelling each shipped table selects by, now a selector names its key + alone. Keeping today's key loses `geo.US.region[IL].locality[Springfield]` to a + numeric GEOID, `misc.loglevel[err]` to `[3]`, `misc.tld[.рф]` to `[.xn--p1ai]`, + `misc.currency[Euro]`, `misc.protocol`'s second spelling and + `geo.SE.region[Skåne län]`. The tables carrying both today: `geo.SE` and `geo.US` + region, municipality and US locality, `misc` currency, httpstatus, language, + loglevel, mimetype, protocol, territory and tld, and both locales' `sex`. Decide too + whether the `name` option, left meaning "the key inside a parent", keeps its name. - 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