Make great documentation goal 1.2, and plan the README's reorganisation and the nested-template gaps #33

Open
lilleman wants to merge 966 commits from worktree-todo-relative-dates-exact-counts into main
Showing only changes of commit d8887e0ea1 - Show all commits
+36 -5
View File
@@ -22,10 +22,39 @@ Shape 5.8, Self-sufficiency 5.7), every seat capped by Locality, all nine naming
`drawWalk.walk` and the four path walks among the hardest; 5.8 on 2026-09-29 `drawWalk.walk` and the four path walks among the hardest; 5.8 on 2026-09-29
(Navigation 6.8, Locality 5.3, Shape 5.8, Self-sufficiency 5.7), seven seats capped (Navigation 6.8, Locality 5.3, Shape 5.8, Self-sufficiency 5.7), seven seats capped
by Locality, all nine naming `drawWalk.walk` hardest and eight the unit they would by Locality, all nine naming `drawWalk.walk` hardest and eight the unit they would
least modify. least modify; 5.7 on 2026-09-29 again (Navigation 6.6, Locality 5.2, Shape 5.9,
Self-sufficiency 5.8), four seats capped by Locality, six of the seven unit seats
ranking `readSurvey.walk` hardest and all seven the unit they would least modify.
This round, in order: This round, in order:
- Move `readSurvey`'s verdict — `check`, `checkFamilies`, `checkFamilyPair`,
`replayPairs`, `alternatives`, `conflict` and `overlapError` — from `drawfence.go`
into `readsurvey.go`: both architects looked for it beside the survey.
- Record each selector's table and spelling in `pathProbe.readRow`, and delete
`tableReadOf`'s second walk over the tail: it steps by `descendant` apart from
`route`, so a route that steps up to a parent row credits a selector to the wrong table.
- Move the render's read path — `readField`, `readReference`, `readHeld`, `traceRead`,
`renderLeaf`, `resolveChoice`, `renderOnce` and `expandAnew` — into `render.go`, and
merge what `hold.go` and `holdset.go` keep into one file: both architects followed one read
across three files.
- Give `prove`, `stepInto` and `columnItems` a case per node kind and panic through
`internalError` on the rest, and list every such switch in `node`'s doc: `prove`'s
default tells a typed column reading a bare table that it reads a null, and five seats
found `node` naming four switches of seven.
- Replace `disagreements`' ten keys with the rule they encode: a declared fix holds one
datatype, a read one is `readTyped` where proven and `readAsText` otherwise, a text one
is `otherAsText` beside an unproven read and `declare` otherwise. Five seats could not
see why each key gets its fix.
- Drop `table.fields` for `formatTemplate.fields`: one map held in two fields.
- Rename `arm.key` to `head`, as `template.head` reads it, leaving `key` the table's key
column; give `renderScope.row` a type that is not `tablePin`, since it pins nothing;
and name `value.go` by the `valueProof` it holds.
- Delete the prose three or more seats found empty: "kept whole on purpose"
(`format.go`, `calc.go`), the second copy of the concrete-session rationale
(`table.drawRow`, `pick`), the doc comments restating `isSelector`, `selectorOf`,
`checkPath`, `checkColumnDraws`, `compileTable` and `isOption`, and the `compose.yaml`
and `Dockerfile` preambles restating the README's Development.
- Run the nine-seat panel again and file what it names here. - Run the nine-seat panel again and file what it names here.
### Data ### Data
@@ -203,8 +232,8 @@ by a `data-import/` script, as README goal 12 asks.
first in Go's map order. first in Go's map order.
- Report a CRLF rows file holding only its header as having no rows: `parseRows` - Report a CRLF rows file holding only its header as having no rows: `parseRows`
answers "line 2 is empty". answers "line 2 is empty".
- Refuse a bare table read in a typed column with a reason naming the table: - Refuse a bare table read in a typed column with a reason naming the table, once
`prove`'s default arm says it reads a null. `prove` has a case per node kind.
- Keep one copy of the selector characters in `data-import/`: `httpmethod.py` and - Keep one copy of the selector characters in `data-import/`: `httpmethod.py` and
`protocol.py` each copy `inSelector`, and `tsv.py`'s `write` enforces neither. `protocol.py` each copy `inSelector`, and `tsv.py`'s `write` enforces neither.
- Refuse two whole reads of one table family in one render, which goal 5 promises is a - Refuse two whole reads of one table family in one render, which goal 5 promises is a
@@ -237,8 +266,10 @@ by a `data-import/` script, as README goal 12 asks.
- Read the tag through `git/ref/tags/{tag}` in `publish_release.py`: GitHub answers - Read the tag through `git/ref/tags/{tag}` in `publish_release.py`: GitHub answers
`tags/{tag}` with 404 whatever exists, so the burnt-version guard never fires and a `tags/{tag}` with 404 whatever exists, so the burnt-version guard never fires and a
release lands on a tag already pointing at another commit. release lands on a tag already pointing at another commit.
- Document `NewRecordTemplate` in the README's Library section, the one exported name - Document `NewRecordTemplate`, `ErrNoColumns`, `ErrNoData` and `MaxRepeat` in the
it does not name. README's Library section, which names none of them.
- Build on a manual run of `test.yml`: `workflow_dispatch` leaves `github.event.before`
empty, so the diff compares `HEAD` with itself and skips `docker build`.
- Rewrite `CHANGELOG.md`'s `[Unreleased]` as what v0.1.0 holds: nothing has shipped, so - Rewrite `CHANGELOG.md`'s `[Unreleased]` as what v0.1.0 holds: nothing has shipped, so
"no longer paths", "where it used to fail" and "where it used to be an empty string" "no longer paths", "where it used to fail" and "where it used to be an empty string"
describe versions no reader can have installed. describe versions no reader can have installed.