Answer prose round 2 in the docs: weights take 0, the node table states the record-column refusal once, the time refusal joins its list, CHANGELOG lists what now loads, decision titles state their whole ruling, and the JSON-string ruling folds into the struct-tag decision

This commit is contained in:
2026-10-08 12:32:10 +02:00
committed by Lillem4n
parent 9baa77c752
commit 5c0ac105b4
5 changed files with 54 additions and 51 deletions
+14 -24
View File
@@ -65,7 +65,9 @@ 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.
A folder-relative `{.name}` or `{..name}` is refused naming
A JSON string stays a template even where its bare text renders alike, `"x {/a}"` beside
`x {/a}`: inside the quotes `\t` and `\n` write a tab or a newline on one 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.
@@ -81,9 +83,7 @@ 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, 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 a template like any other, and renders it.
Stdin holding only whitespace is a format string, and renders as sent.
A lone reference, `{/users}` or `"{/users}"`, names the record `users` under `--format`,
one newline after it allowed, with `users` the default `--table`; one to nothing there
@@ -100,9 +100,9 @@ template per run.
2026-10-07, Lilleman auf Larv. Serves goal 9.6: a CLI carrying your own modules is a few
lines of Go and works just like `fejkdata`, so `fejkdata`'s own CLI is such a CLI and
imports nothing under `internal/`. It copies one reading the API does not export yet,
the lone reference: `isPath`, `hasEmptySegment` and `withoutSelectors` in `cmd/fejkdata`, pinned to the
grammar by a test, until `todo.md` item 129 moves that reading into the library.
its non-test code imports nothing under `internal/`. Until `todo.md` item 129 moves it into
the library, the CLI copies how the grammar tells a lone reference, in `isPath`,
`hasEmptySegment` and `withoutSelectors`, and a test pins the copy to the grammar.
## A template that does not compile is misuse (exit 2), including a reference that resolves to nothing, save a lone reference under the CLI's `--format` until item 129
@@ -112,7 +112,7 @@ 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.
## Whitespace around a JSON template is dropped, in `NewTemplate` and on stdin
## Whitespace around a JSON object, array, string or null is dropped, and a bare number or boolean is a format string
2026-10-07, Lilleman auf Larv. Applies KISS.
@@ -122,15 +122,6 @@ is dropped, as `encoding/json` drops it. `null` stays JSON, since it is how a te
renders nothing. A bare number or boolean gains nothing from the JSON reading, so it is a
format string, and `echo 42` prints its newline as `echo x` does (goal 5.1).
## A JSON string stays a template even where its bare text renders alike
2026-10-07, Lilleman auf Larv. Serves goal 5.7: whatever is well-formed and means one thing
loads.
`"x {/a}"` and `x {/a}` render alike on stdin, in `NewTemplate` and in a struct tag. The
quotes are no mistake: inside them `\t` and `\n` write a tab or a newline where the
template is one line of a Go string, a struct tag or a file.
## `FakeTemplate` and `NewTemplate` both stay
2026-09-03, Lilleman auf Larv.
@@ -345,16 +336,14 @@ handle is needed, as the cache already compiles once.
2026-09-16, Lilleman auf Larv; revised 2026-10-07. Serves goals 5.2 and 5.7.
A reference back into a category, `{/users.first}` inside `users`, is a fresh draw, as
every `{…}` is; only a cycle is refused. A value two fields share goes in its own
category, which one field binds to a name and both read (goal 4.1). A record's column
fences run at `New` too, so a category that loads renders as a value and as a record alike.
every `{…}` is; only a cycle is refused. A record's column fences run at `New` too, so a category that loads renders as a value and as a record alike.
## A record's column set is fixed before the first draw
2026-09-04, Lilleman auf Larv.
Only a category-level template is a record: a path descending into a field, or naming a
folder or a choice, errors. A tail may pass through a choice whose variants carry
folder or a choice of more than one item, errors. A tail may pass through a choice whose variants carry
different fields, so the columns — and with them the CSV header written once ahead of
every row — would vary per draw. A fixed column set is what the CSV and `INSERT`
contracts rest on, so the restriction holds even where a particular choice would happen
@@ -631,8 +620,9 @@ Table section teaches it.
2026-09-18, Lilleman auf Larv. Serves goal 5.6.
A layout may carry the comma that separates arguments,
`'January 2, 2006'`, a bare `2006-01-02` reads like a third date, and a double-quoted one
could be quotes printed in the output, so each is refused naming the single-quoted one. The layout is Go's reference time because the
`'January 2, 2006'`. A bare `2006-01-02` reads like a third date, and a double-quoted
layout could be quotes printed in the output, so both are refused, naming the
single-quoted spelling. The layout is Go's reference time because the
library renders with it and a Go caller already knows it; its names are English, and a
locale's own month and weekday names are data.
@@ -855,7 +845,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 decisions of 2026-10-07: the CLI reading its template from stdin, with the scoring run and its ratchet waived for that chunk; and goal 5.7 loading whatever is well-formed and means one thing, dropping every refusal that guessed at a mistake, with the scoring run and its ratchet waived for that chunk too.
Shipped under the floor by the maintainer's decisions of 2026-10-07, each with the scoring run and its ratchet waived: the CLI reading its template from stdin; and goal 5.7 loading whatever is well-formed and means one thing, dropping every refusal that guessed at a mistake.
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.