Narrow goal 5.7's decisions to the refusals that catch a mistake, list the change as shipped under the floor, and drop item 94

This commit is contained in:
2026-10-07 22:17:21 +02:00
committed by Lillem4n
parent f76008743e
commit 4930a2ac8d
3 changed files with 33 additions and 56 deletions
+22 -39
View File
@@ -65,14 +65,10 @@ can never collide with any of those spellings, and the leading `[` or `"` is gat
valid JSON so a stray copied bracket never swallows a tag — it names nothing, and says
so. Reserving the characters whole — though only a leading one
could collide — keeps one simple name rule instead of a leading-position special case.
The JSON string is what makes the library's own advice reachable: the error for an
object holding only a format names `"…"`, and that spelling has to work where it is
printed. On stdin and in `NewTemplate`, `"x {/a}"` and `x {/a}` render alike, and the
maintainer kept the JSON string on 2026-10-07, so goal 5.7 does not refuse it: its escapes,
`\t` and `\n`, carry what bare text cannot. A struct tag of one reference alone,
`{/users}`, is refused naming the path `users`: both render the same text, and only the
path names a record. A folder-relative `{.name}` or `{..name}` is refused naming
`{/name}`, since an inline template sits in no folder. `IsTemplate` exports the rule, so struct tags and any other caller read one.
A JSON string stays a template even where its bare text renders alike, `"x {/a}"` beside
`x {/a}`: its escapes put a tab or a newline on one `echo` line. A folder-relative `{.name}` or `{..name}` is refused naming
`{/name}`, since an inline template sits in no folder. `IsTemplate` exports the rule, so
struct tags and any other caller read one.
## The CLI renders exactly the template on its stdin, and adds nothing
@@ -86,9 +82,9 @@ bench of the README's personas picked this on 2026-10-07 over dropping a newline
adding one: a rule a user states in one sentence, at the cost of `printf` or a
`--separator` now and then.
A JSON template is its JSON: the maintainer ruled the whitespace around it no part of the
template, so goal 5.7 does not refuse it on stdin, while `NewTemplate` still refuses a
padded one. Stdin holding only whitespace is misuse, since an unset variable sends just a
A JSON template is its JSON, so the whitespace around it is no part of the template, per
the decision "Whitespace around a JSON template is dropped, in `NewTemplate` and on
stdin". Stdin holding only whitespace is misuse, since an unset variable sends just a
newline.
A lone reference, `{/users}` or `"{/users}"`, names the record `users` under `--format`,
@@ -110,14 +106,14 @@ The whole template is the spelling under test, and `NewTemplate` compiles, links
validates as one step. Under the CLI's `--format`, a lone reference to nothing exits 1
until item 129: it reads a path, and only the data is absent.
## `NewTemplate` rejects a padded JSON template, and the CLI's stdin drops the whitespace around one
## Whitespace around a JSON template is dropped, in `NewTemplate` and on stdin
2026-09-03, Lilleman auf Larv; the CLI's stdin 2026-10-07. Serves goal 5.7.
2026-10-07, Lilleman auf Larv. Applies KISS.
Padding is the one place the two readings disagree — a format string renders it, JSON
drops it — so `NewTemplate` names the spelling that renders rather than silently
choosing. On stdin the CLI drops it, per the decision "The CLI renders exactly the
template on its stdin, and adds nothing".
Padding is where the two readings disagree: a format string renders it, JSON drops it. A
template that parses as JSON is its JSON, so its padding is dropped, as `encoding/json`
drops it. Goal 5.7 refuses only a spelling that suggests a mistake, and padding around
JSON suggests none.
## `FakeTemplate` and `NewTemplate` both stay
@@ -169,10 +165,6 @@ from the one pick a name keeps.
- `{x as n}` binds a reference, or a field of the template binding it or a path into one,
`{place as p}`: an inline template, and a choice of rows inside one category, have no reference to
bind, and goal 4.1 holds there too.
- A name read once is refused where writing what it binds in its place draws the same, and
the error names that spelling (goal 5.7): `{/x as n}{n.y}` is `{/x.y}`. A calc cannot read
a reference or a path, so a calc's one read of a name bound to either is not refused, and
neither is a read inside a nested repeat, which keeps one pick on every line.
Valid while goal 5.2 has each `{…}` make a new pick.
@@ -191,8 +183,8 @@ naming the locale, so a folder renames and copies without editing its references
Data files, the CLI and the Go API are the public API, and a consumer must be able to
take a minor without an edit — so an added column is a major, since it changes the CSV
header and the `INSERT` column list, as is a removed value, which changes what a fixture
holds, and a new option, which reserves a field name. Goal 5.7's refusals grow by
tightening, so every fence invalidates some file. Each such release names the rejected
holds, and a new option, which reserves a field name. A new refusal tightens what
loads, so every new fence invalidates some file. Each such release names the rejected
spelling and its replacement in the changelog and in the load error, and that is the
whole migration: a fence rejects one spelling with one replacement, so the fix is local
to each site. A fence that would need a non-local rewrite ships a converter with its
@@ -291,14 +283,14 @@ is sometimes not a number loads, and prints `NaN` on each draw where it is not o
and `NaN` in a string column work against goals 6.1 and 4 until `todo.md` item 81
refuses them there too.
## In data, a default written out and a constant spelled as a sample are load errors
## In data, a constant spelled as a sample is a load error
2026-09-24, Lilleman auf Larv.
2026-09-24, Lilleman auf Larv; narrowed 2026-10-07. Serves goal 5.7.
`weight: 1`, `repeat: 1`, `separator: ""`, `datatype: "string"`, `int(5,5)`,
`float(1,1,2)`, `+5` and `05` each spell what a shorter form already spells, so each is
rejected naming that form. The CLI's numbers follow the shell instead: `--seed 007` and
`--repeat +3` are 7 and 3, as every command line reads them.
`int(5,5)` and `float(1,1,2)` draw nothing, which suggests a range typed wrong, so each is
rejected naming the constant. A default written out, `weight: 1`, `repeat: 1`,
`separator: ""` or `datatype: "string"`, and a number spelled `+5` or `05`, load as the
shorter form, as the CLI's `--seed 007` and `--repeat +3` do.
## Samples say what they emit, transforms what they do
@@ -516,15 +508,6 @@ lead to a row at every level below it, or a render could find nothing to draw. T
import script drops or fills such rows; the alternative, falling back to a free draw,
would break the consistency the link exists for without saying so.
## The choice-of-rows fence guards a data file's root, and requires string fields
2026-09-17, Lilleman auf Larv.
A table is a category with a TSV beside its file, so only a root choice has the spelling
the fence names; a nested choice of same-shaped templates and an inline one keep
loading. Fields must all be strings because a cell is a string node: a choice whose
items carry a nested choice is not one table but two linked ones.
## A table is a record of string columns
2026-09-17, Lilleman auf Larv.
@@ -865,7 +848,7 @@ Valid while names are read only inside the category binding them.
2026-10-04, Lilleman auf Larv. Serves goal 3 and applies KISS.
Shipped under the floor by the maintainer's decision of 2026-10-07: the CLI reading its template from stdin, with the scoring run and its ratchet waived for that chunk.
Shipped under the floor by the maintainer's decisions of 2026-10-07: the CLI reading its template from stdin, with the scoring run and its ratchet waived for that chunk; and narrowing goal 5.7 to the refusals that catch a mistake, dropping the rest.
Last scoring run, 2026-10-07, on commit ad59967: Navigation 7.00, Locality 5.88, Shape 6.50, Self-sufficiency 6.13, overall 6.38. The nine-seat panel at depth 1, run beside it: Navigation 7.17, Locality 6.06, Shape 6.67, Self-sufficiency 6.56, overall 6.56. Against the runs on ac6158e, the scoring run's overall rose from 6.25 and its Shape from 6.38, while its Self-sufficiency fell from 6.38; the panel's overall held, and its Locality and Self-sufficiency fell by 0.05 each. Locality is lowest again, as at every panel since 2026-09-22. All 13 seats named the named-pick read path hardest: `readField`, `readName`, `readUnder` and `keeps`, with the pick keys `levelKeys` and `addressedKeys` build at load; twelve kept `doc.go`'s vocabulary open beside it. What the two runs found is filed in `todo.md`, and `todo.md` item 153 runs both again. Valid while `AGENTS.md` gates goal 3 at 7.0.