State the pinned and whole rule once, and file what the errors leave unsaid

This commit is contained in:
2026-09-21 16:50:47 +02:00
committed by Lillem4n
parent f7f4960755
commit 1fdf23ecbd
3 changed files with 30 additions and 13 deletions
+3 -3
View File
@@ -18,9 +18,9 @@ replacement, and each removed path, column or flag.
`parent`, a name repeating inside one parent row, a name spelling another row's key, a table named like a column of any `parent`, a name repeating inside one parent row, a name spelling another row's key, a table named like a column of any
table above it, a table whose format or cell references its own family, and, table above it, a table whose format or cell references its own family, and,
within one render and draw group, a path drawing a table another path selects a within one render and draw group, a path drawing a table another path selects a
row of, or two paths pinning different rows of one table. Two reads are held to one row of, or two paths pinning different rows of one table. A read inside a cell is
draw only where both their rows can render together: a path read pins a row's weighed against another only where both rows can render together, which two rows of
ancestors with it, while a table read whole draws a row and pins none. one table, or rows under two different rows of an ancestor a path pinned, never can.
- `New` refuses a root choice of templates sharing one format and one set of string - `New` refuses a root choice of templates sharing one format and one set of string
fields, naming the rows TSV to write instead. fields, naming the rows TSV to write instead.
- `misc.territory`, `misc.currency`, `misc.language`, `misc.httpstatus` and - `misc.territory`, `misc.currency`, `misc.language`, `misc.httpstatus` and
+7 -6
View File
@@ -1103,9 +1103,10 @@ the Development section below, and who ships a register the four above then draw
a template beside the family under a selected row, is refused today; admitting it a template beside the family under a selected row, is refused today; admitting it
later is additive, since a refused spelling gains a meaning and no accepted one later is additive, since a refused spelling gains a meaning and no accepted one
changes, so the door stays open for the address records the plan describes. changes, so the door stays open for the address records the plan describes.
- **A table read into is pinned; a table rendered whole draws afresh.** A path into a - **A table read into is pinned; a table read whole draws afresh.** A path into a
table pins its row for the render and group, as a reference path pins its level, table pins its row, and the ancestor rows it links to, for the render and group, as a
and a bare `{/city}` draws each time, as a bare reference does; so a bare table reference path pins its level, and a bare `{/city}` draws a row each time and pins no
row of its family, as a bare reference does; so a bare table
beside a path into its family is refused like a bare reference beside a path into beside a path into its family is refused like a bare reference beside a path into
it. A bare table reference still counts as a read for a `drawGroup`, since the group it. A bare table reference still counts as a read for a `drawGroup`, since the group
is what draws it apart from the family's pins. is what draws it apart from the family's pins.
@@ -1140,9 +1141,9 @@ the Development section below, and who ships a register the four above then draw
- **The rows of a table are alternatives.** Only one row renders, so a cell in one - **The rows of a table are alternatives.** Only one row renders, so a cell in one
row and a cell in another never meet, and each may select its own row of another row and a cell in another never meet, and each may select its own row of another
table; the cells of one row, and whatever they reach, do meet, and so does the table; the cells of one row, and whatever they reach, do meet, and so does the
format beside them. The rule the fence applies is that two reads meet unless they format beside them. The rule the fence applies is that two reads meet unless they sit
sit in two rows of one table, or in rows that never render together: a path read in rows that never render together: two rows of one table, or rows under two different
pins a row's ancestors with it, while a table read whole draws a row and pins none. A rows of an ancestor a path pinned. A
choice's items get no such treatment yet: two items selecting different rows choice's items get no such treatment yet: two items selecting different rows
are still refused. are still refused.
- **A table never reaches its own family, by any route.** A `repeat` iteration and a - **A table never reaches its own family, by any route.** A `repeat` iteration and a
+20 -4
View File
@@ -153,10 +153,22 @@ by a `data-import/` script, as README goal 12 asks.
### Library and CLI ### Library and CLI
- Hold two whole reads of one table to one row, or refuse the pair: `{/region}|{/region}` - Refuse two whole reads of one table family in one render, which goal 5 promises is a
draws a row for each read, so cells of two rows render together while the fence counts load error: `{/sel}|{/sel}` panics out of `Fake` with "a fence should have refused this
them alternatives and compares neither — a bare `{/addr}` in one row beside at New" where the two draws land on rows whose cells select different rows of another
`{/addr.city}` in another is the overlap it refuses everywhere else. table, and `{/geo.SE.locality}|{/geo.SE.municipality}` renders a locality outside the
municipality beside it. Each read draws its own row, so cells of two rows render
together, where the fence counts them alternatives and compares neither.
- Name the cell a refused read sits in: where both reads come from TSV cells the overlap
error says `{area} with {/addr} renders a level that {where} with {/addr.city} reads a
path into`, naming neither table, row nor column, so the author greps a register-sized
file — and "name the fields you want instead" rewrites a cell that is not the one to fix.
- Stop the family fence naming a rewrite that cannot work: where the drawn table's rows
select more than one row of the family, every `write {/terr[NO].name}` it offers fails
the same way, and only the `drawGroup` it also names is left.
- Spell a table one way in an error: `family.go` names `drawn.category` in one message and
`t.path` in the next, 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]`, - 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" `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 and stop there, where a case-insensitive match could name the row that exists, and a
@@ -172,6 +184,10 @@ by a `data-import/` script, as README goal 12 asks.
### Open questions to settle ### Open questions to settle
- 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 - 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 path segment, so `misc/net/tld` is a rename a consumer pays for, and goal 13 promises
the directory keeps growing. the directory keeps growing.