File the 2026-09-22 nine-seat panel run

This commit is contained in:
2026-09-22 22:21:20 +02:00
committed by Lillem4n
parent 7c8d3c2605
commit 021a95c114
+59 -13
View File
@@ -14,14 +14,52 @@ nine-seat one: the round is meant to buy architectural change, and the four-seat
scoring run names too little to steer one. A fresh run replaces the items below.
Scores, newest last: 5.9 on 2026-09-20 (Navigation 7.0, Locality 5.2, Shape 5.9,
Self-sufficiency 5.7), eight of nine seats capped by Locality or Self-sufficiency, all
nine naming `hold.go`, `draw.go` — now split into `holdset.go` and `drawfence.go` — and
`family.go` first for reading cost: 1,138 lines in which each file carried both a
load-time fence and render-time machinery, so no file name said whether a unit ran at
`New` or at `Fake`.
Self-sufficiency 5.7); 5.8 on 2026-09-22 (Navigation 6.7, Locality 5.0, Shape 5.9,
Self-sufficiency 5.6), every seat capped by Locality or Self-sufficiency. Eight of nine
named `drawWalk.walk` and `rowSet` or `checkFamilies` hardest and least wanted to modify:
a load-time copy of the pinning `hold.pin` and `hold.rowOf` do at render, tied to them
by nothing but tests, whose premise lives only in the README's Decisions.
This round, in order:
- Gather the family fence in `family.go`: `alternatives`, `rowSet` and `checkOwnFamily`
beside `checkFamilies`, and the `drawGroup` option parsing out of `drawfence.go`, so
one question about a family opens one file.
- Give render and the draw fences one pin model: a pin set `hold.pin`, `hold.rowOf`
and the fence's `rowSet` all use, so a change to how a render pins rows cannot leave
the fence proving the old rule, and `hold` stops being a proof scratchpad whenever its
session is nil.
- Move the README's Decisions section to `docs/decisions.md`, leaving a one-line index
of the titles in `AGENTS.md`, and drop the `AGENTS.md` line pointing decisions at the
README. Give each fence a bare link to the entry it enforces: every seat needed
"The rows of a table are alternatives", "The expansion hold and the render's draws
are two fences" or "A table read into is pinned" and found it by grepping 470 lines.
Carry the timezone weight's premise in with it: weighting by GeoNames city
population moved 300 seeded draws of `misc.territory[US].timezone` from 44 landing on
the four zones most Americans live in to 278, and dropped `America/Indiana/Petersburg`
(pop. 2,400) from 17 draws to 0. Carry in the decision `linkTemplateRefs`'s doc holds
today, which no entry records: a category is a unit, so a reference back into it
describes a draw other than the fields beside it, which is what goal 3 asks for.
- Keep reference bindings out of `template.fields`, so no walk over a template's fields
needs the `isRef` filter `named`, `paths`, `recordColumns` and `template.field` carry.
- Compile a template's format once: `compileFormat` runs again from `linkTemplateRefs`,
so `ops`, `bound` and `held` are provisional until linking and its fences run twice.
- Parse a format once and have the fences read `t.ops`: `eachToken` rescans the format
in `fieldTokens`, `operandTokens`, `boundReaders`, `renderEdges`, `loneRef`,
`operandReader`, `checkNoRepeatedRead` and `compileOps`, and function-versus-field is
decided by `indexOutside(body, '(')` in two of them and by `funcCall` in the rest.
- Name `pathWalk`'s modes: render, probe, check and cover are chosen today by which
callbacks are nil and whether `pins.s` is, and `walkChoice` returns `nil, nil` where
none is set.
- Register a transform once: `transforms` restates the `lowercase`, `uppercase` and
`ascii` entries in `builtins`, and `valueProof.template` classifies by the first while
render calls the second. Derive the numeric builtins `valueProof.template` lists in
its error text from `builtin.number` while there.
- Split `drawCheck.reads`'s six-term condition into named predicates.
- Rename what names two things: `template.go` holds the token grammar while `template`
is `node.go`'s type and `Template` `inline.go`'s; `kind` `'b'` is a brace body in
`ftoken` and a builtin in `op`; `hold`'s receiver is `d`; `drawAt.alt` holds the rows
a walk entered.
- Run the nine-seat panel again and file what it names here.
### Data
@@ -29,6 +67,10 @@ This round, in order:
Shape: T = table, t = template, c = choice. Read every factual list from a register
by a `data-import/` script, as README goal 12 asks.
- Place xlsx cells by their `r` reference in `data-import/xlsx.py`: a sheet omitting an
empty cell shifts every later column left.
- Spell `misc.creditcard`'s digit runs `{digits(n)}`, and refuse a repeat over a lone
`{digits(1)}` at `New`, naming that spelling: both render the same run.
- Add the remaining `misc` tables and templates, one row of the table below per chunk.
- Read `misc.emoji` from the Unicode `emoji-test.txt` register, and `misc.car` from an
international make and model source; vPIC and Mobility Sweden are national, so they
@@ -137,6 +179,8 @@ by a `data-import/` script, as README goal 12 asks.
### Library and CLI
- Report the same error every load for a table with two bad options:
`readTableOptions` returns on the first in Go's map order.
- Refuse two whole reads of one table family in one render, which goal 5 promises is a
load error: `{/sel}|{/sel}` panics out of `Fake` with "a fence should have refused this
at New" where the two draws land on rows whose cells select different rows of another
@@ -198,14 +242,11 @@ by a `data-import/` script, as README goal 12 asks.
### Release
- Move the README's Decisions section to `docs/decisions.md`, leaving a one-line index
of the titles in `AGENTS.md`, and drop the `AGENTS.md` line pointing decisions at the
README. Carry the timezone weight's premise in with it: weighting by GeoNames city
population moved 300 seeded draws of `misc.territory[US].timezone` from 44 landing on
the four zones most Americans live in to 278, and dropped `America/Indiana/Petersburg`
(pop. 2,400) from 17 draws to 0. Carry in the decision `linkTemplateRefs`'s doc holds
today, which no entry records: a category is a unit, so a reference back into it
describes a draw other than the fields beside it, which is what goal 3 asks for.
- 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
release lands on a tag already pointing at another commit.
- Document `NewRecordTemplate` in the README's Library section, the one exported name
it does not name.
- 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"
describe versions no reader can have installed.
@@ -246,6 +287,11 @@ because pairing a street with its exact postnummer rewrites shipped rows.
## Not release-bound
- Hold every change the charter says owes a `CHANGELOG.md` entry to one in CI: the
check covers `data` and `testdata/shipped_shape.txt` alone, where `AGENTS.md` adds a
flag, an exit code, an exported name, a fence, a builtin and the lowest Go.
- Measure the allocation gate over the shipped `geo` trees too: `hold.pins [8]` is sized
for them, and `perf_test.go` checks a synthetic five-deep tree only.
- Make a named draw group's hold lazy, `&hold{s: s}` in `renderScope.hold`: it escapes
to the heap anyway, so its two eager maps buy no stack and cost two allocations per
group that may never read through them. Check it against the alloc tests.