Cut the comments that restate the decision they sit under

This commit is contained in:
2026-09-21 16:59:41 +02:00
committed by Lillem4n
parent ad7a62b67d
commit d3f7207e74
5 changed files with 28 additions and 31 deletions
+2 -2
View File
@@ -19,8 +19,8 @@ replacement, and each removed path, column or flag.
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 cells are weighed row of, or two paths pinning different rows of one table. Two cells are weighed
against each other only where they can render together: not two rows of one table, and against each other only where they can render together: never two rows of one table,
not rows under different rows of a table a path pinned. nor rows under different rows of a table a path pinned.
- `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
+3 -3
View File
@@ -546,8 +546,8 @@ to, a chain of parents that closes, a table named like a column of any table abo
it, and a cell or format of a table that references a table of its own family, through it, and a cell or format of a table that references a table of its own family, through
any template, a `repeat` or a `drawGroup` included, since a row rendered whole would any template, a `repeat` or a `drawGroup` included, since a row rendered whole would
draw the family apart from itself: read the family from a template beside it, or add draw the family apart from itself: read the family from a template beside it, or add
the value as a column. Which reads a render must reconcile, a cell's included, is the value as a column. A cell's reads are the render's too; which pairs are weighed
under [Decisions](#decisions). against each other is under [Decisions](#decisions).
### Options and fields ### Options and fields
@@ -1105,7 +1105,7 @@ the Development section below, and who ships a register the four above then draw
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 read 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, and the ancestor rows it links to, for the render and group, as a table pins its row for the render and group, as a
reference path pins its level, and a bare `{/city}` draws a row each time and pins no 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 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 it. A bare table reference family is refused like a bare reference beside a path into it. A bare table reference
+5 -8
View File
@@ -297,14 +297,11 @@ type drawAt struct {
group string group string
route drawRoute route drawRoute
alt rowSet alt rowSet
drawn *table // only that table's own cells read it, which the own-family fence is what keeps true, so the visit keys leave it out drawn *table // left out of the visit keys: only this table's own cells compare against it, which the own-family fence keeps true
} }
// rowSet is the rows a walk entered, one per table: only one row of a table renders, so reads in // rowSet stands in at load for the rows (*draws).pin holds at render: a path read enters a row with
// two rows of one table never meet, while reads in one row, across its columns and whatever they // its ancestors, a whole read enters the drawn row alone.
// reach, do. It stands in for the rows the render pins, so a row a path read pins enters with the
// ancestors (*draws).pin pins alongside it, while a table read whole is drawn a row of and pins
// none.
type rowSet []tablePin type rowSet []tablePin
func (s rowSet) rowOf(t *table) (int, bool) { func (s rowSet) rowOf(t *table) (int, bool) {
@@ -316,8 +313,8 @@ func (s rowSet) rowOf(t *table) (int, bool) {
return 0, false return 0, false
} }
// enter is s with row r of t, where t is not in it yet, and, where pins says the render pins that // enter is s with row r of t, and with t's ancestors where the render pins that row rather than
// row rather than draws it, the ancestor rows it links to. The set is copied, since walks branch. // drawing it; the set is copied, since walks branch.
func (s rowSet) enter(t *table, r int, pins bool) rowSet { func (s rowSet) enter(t *table, r int, pins bool) rowSet {
if _, in := s.rowOf(t); in { if _, in := s.rowOf(t); in {
return s return s
+5 -7
View File
@@ -964,9 +964,8 @@ func TestAmbiguousNameNamesARunnablePath(t *testing.T) {
} }
} }
// TestRowSetSimulatesPinning proves the walk's row set answers what the render's pinning // TestRowSetSimulatesPinning holds the walk's row set to the render's pinning: drift between
// answers: a path read pins a row and the ancestors it links to, a whole read draws a row // the two is data that loads and then renders a family that disagrees.
// and pins none.
func TestRowSetSimulatesPinning(t *testing.T) { func TestRowSetSimulatesPinning(t *testing.T) {
f := newGenerator(t, writeFiles(t, geo()), WithSeed(1)) f := newGenerator(t, writeFiles(t, geo()), WithSeed(1))
var tables []*table var tables []*table
@@ -1012,10 +1011,9 @@ func TestRowSetSimulatesPinning(t *testing.T) {
} }
} }
// TestCellReadsMeetWhereTheRenderPairsTheRows pins which cells' reads are one render's to // TestCellReadsMeetWhereTheRenderPairsTheRows reads what the TSVs below do not show: region 01's
// reconcile: a path read pins the row's ancestors, so a cell of region 01 and a cell of a // note holds {/addr} and 1280's, under region 12, holds {/addr.city}, so the two meet only where
// municipality of region 12 never render together, while a whole read draws its row and pins // no read pins a region.
// no ancestor, so those same two cells do.
func TestCellReadsMeetWhereTheRenderPairsTheRows(t *testing.T) { func TestCellReadsMeetWhereTheRenderPairsTheRows(t *testing.T) {
cells := with(geo(), map[string]string{ cells := with(geo(), map[string]string{
"addr.json": `{"format":"{city}","city":["Lund","Malmö"]}`, "addr.json": `{"format":"{city}","city":["Lund","Malmö"]}`,
+13 -11
View File
@@ -6,8 +6,8 @@ Ordered as the releases that ship it.
### Comprehension, until the panel scores 7.0 ### Comprehension, until the panel scores 7.0
Nothing else ships while the score is under 7.0 — no feature, no category, no data — Nothing else ships while the score is under 7.0 — no feature, no category, no data — bar
bar a security fix and a dependency bump, per README goal 2. This section is one what `AGENTS.md` excepts, per README goal 2. This section is one
round, replayed: the `comprehension-panel` skill's nine-seat findings run at depth 1, round, replayed: the `comprehension-panel` skill's nine-seat findings run at depth 1,
a PR per item it names, then the run again, until the score passes. The run is the a PR per item it names, then the run again, until the score passes. The run is the
nine-seat one: the round is meant to buy architectural change, and the four-seat nine-seat one: the round is meant to buy architectural change, and the four-seat
@@ -165,12 +165,13 @@ by a `data-import/` script, as README goal 12 asks.
error names the category and the two columns but no row, so the author greps a error names the category and the two columns but no row, so the author greps a
register-sized file for the cell — and "name the fields you want instead" rewrites a register-sized file for the cell — and "name the fields you want instead" rewrites a
cell that is not the one to fix. cell that is not the one to fix.
- Stop the family fence naming a rewrite that cannot work: where the drawn table's rows - Have the family fence offer only a rewrite that works: where the drawn table's rows select
select more than one row of the family, every `write {/terr[NO].name}` it offers fails more than one row of the family, every `write {/terr[NO].name}` it offers fails the same
the same way, and only the `drawGroup` it also names is left. way, so 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 - Spell a table one way across `family.go`'s errors: `checkFamilyPair` names
`t.path` in the next, so one table is `territory` and `misc.territory`, and the short `drawn.category`, `pinRow` names `t.path` and `mustRow` panics with `t.category`, so one
spelling names no file where two folders hold that name. 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
@@ -186,9 +187,10 @@ by a `data-import/` script, as README goal 12 asks.
### Open questions to settle ### Open questions to settle
- Decide whether a goal 5 violation joins the comprehension gate's exception list, beside - Decide whether a goal 5 violation joins the comprehension gate's exception list: the
a security fix and a dependency bump: the panic above waits behind the whole round at `{/sel}|{/sel}` panic waits behind the whole round at 5.9, and
5.9, and `{/geo.SE.locality}|{/geo.SE.municipality}` mispairs the shipped data meanwhile. `{/geo.SE.locality}|{/geo.SE.municipality}` mispairs the shipped data meanwhile, though a
repair restoring behaviour the repo already claims may already pass the gate as written.
- Decide whether the README's Audience names the author who writes categories under - 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 `--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 ships a register upstream, while "Your own data" is a README section, `-d` is a