diff --git a/docs/comprehension-history.md b/docs/comprehension-history.md index fcca8f6..3e56b64 100644 --- a/docs/comprehension-history.md +++ b/docs/comprehension-history.md @@ -563,3 +563,70 @@ Inherited architect, decided by: - Locality: `internal/datafiles/datafiles.go:34` `Mounted`: a second call is a silent no-op and at lives twice; where it rots first - Shape: `cmd/fejkdata/main.go:12` `main`: the binary is one line over a library package, where the base bound the CLI to data.Modules() inside the flag handling - Locality: `cli/cli.go:667` `report`: rewrites the library's prefix inside the joined error text, a string-level contract with another package + +## 2026-10-12T16:29:54Z, PR #216 at 52e0304, against 90ffcff + +Ruling: better + +| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall | +|---|---|---|---|---|---| +| Mid A | same | better | better | better | better | +| Inherited architect | same | better | same | same | better | + +Mid A, decided by: + +- Locality, Overall: `fejkdata.go:101` `New`: the seed is plain input, where the base drew it from crypto/rand through the swappable package-level randomBytes and drawSeed +- Self-sufficiency, Shape: `fejkdata.go:129` `config.misuse`: one named unit collects every option mistake, and errNoSeed tells the caller what to write +- Shape: `fejkdata.go:40` `config.dataGiven`: the name says what it tracks now that seeded sits beside it +- Self-sufficiency: `cli/cli.go:26` `usage`: --help states the --seed default and stays true for a custom CLI +- Self-sufficiency: `internal/jsonvalue/jsonvalue.go:29` `located`: a JSON syntax error names its line and column +- Shape: `record.go:216` `errChoiceRecord`: an inline errors.New became a named sentinel FakeRecord treats alike +- Locality: `Dockerfile:14` `release-tooling`: a /tested sentinel copy is an indirection, though its comment explains it + +Inherited architect, decided by: + +- Locality, Overall: `fejkdata.go:101` `New`: the seed is a required input and the package-level randomBytes global is gone; New reads straight through options, misuse, load, build +- Locality: `fejkdata.go:129` `misuse`: the base's two early returns become one unit joining every option mistake before any data loads +- Locality: `cli/cli.go:593` `run`: the CLI's fallback seed is a systemSeed parameter drawn once in Main, so everything that changes the output arrives through run's signature + +## 2026-10-12T16:30:06Z, PR #216 at 52e0304 + +| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall | +|---|---|---|---|---|---| +| Junior A | 7 | 5.5 | 6.5 | 6 | 6 | +| Mid A | 7 | 6 | 6.5 | 6.5 | 6.5 | +| Maintainability senior | 7 | 5.5 | 6.5 | 6.5 | 6 | +| Inherited architect | 7 | 6 | 6 | 7 | 6.5 | +| Mean | 7.00 | 5.75 | 6.38 | 6.50 | 6.25 | + +Junior A, hardest first: + +- `pick.go:179` `readName`: six pieces of state, with keptInPick's decision made at load through addressedKeys +- `path.go:190` `drawSteps`: climbed carries state between steps and pins swap mid-loop +- `table.go:253` `table.route`: six-field tableRoute plus fromRow and pinnedBelow held at once +- `node.go:65` `template`: filled in four phases by different files, with a change-together set +- `AGENTS.md:109` `misc.loglevel`: the decision title says keyed by keyword, the JSON keys by code + +Mid A, hardest first: + +- `pick.go:9` `pickKey`: keys built at load must match keys built at render, with heap-escape rules mixed in +- `render.go:146` `readField`: four read paths, and the name undersells it +- `path.go:190` `drawSteps`: order-dependent climbed and stepDownPins +- `datatype.go:230` `columnReadOf`: three spellings of a column read, with a four-function change-together contract +- `AGENTS.md:109` `misc.loglevel`: the decision title contradicts the JSON + +Maintainability senior, hardest first: + +- `render.go:146` `readField`: choosing named, kept or fresh needs env.pick, pickAt, under, levels and addressed at once +- `env.go:71` `enter`: frames pushed here must be found by frameOf later, order dependence across three files +- `path.go:190` `drawSteps`: climbed carries state from stepParent to the next stepChild +- `path.go:145` `compiledPath.walkEvery`: a capacity-clipping alias with no comment on why it is safe +- `index.go:109` `loadReached`: lazy loading mutates the shared tree and rolls back with putBack + +Inherited architect, would restructure first: + +- `pick.go:371` `keptInPick`: string pickKeys rebuilt at render must match addressedKeys built at load, and a miss silently draws afresh +- `node.go:253` `template`: one struct for six concepts, filled in four stages by four files +- `calc.go:219` `checkCalcFields`: calc lives in five places, and the root calc.go holds only load fences +- `datatype.go:222` `columnRead`: column-read resolution sits in datatype.go +- `cli/cli.go:505` `isPath`: copies the path grammar, the CLI's first rot point diff --git a/docs/decisions.md b/docs/decisions.md index a921a1f..e60919c 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -901,6 +901,8 @@ Valid while names are read only inside the category binding them. By the maintainer's decision of 2026-10-09, every 0.1.0 chunk ships under the floor, including the chunk that holds the release's scoring run, so that 0.1.0 can ship features. Items 170 to 175 and 177 move to 0.2.0. Item 178 plans first how item 107 regroups the engine. A paired ruling that rules worse still blocks a merge. Valid until 0.1.0 is cut. +Shipped under that decision: item 89, the last of 0.1.0, at 52e0304. Its paired ruling against 90ffcff was better. The release's scoring run read Navigation 7.00, Locality 5.75, Shape 6.38, Self-sufficiency 6.50 and overall 6.25; its seats named places items 170 to 172 and 178 hold, and `isPath`, filed as item 251. + Shipped by the maintainer's decision of 2026-10-11 with its ratchet waived: item 182, the shipped data as Go packages, at a632a92. Its last paired ruling against bf1becb was same overall, Mid A better and Junior A worse, with Shape fallen, three seats against the namespace mount in `internal/datafiles/mount.go` and the `at` field of `datafiles.Source`; the scoring run that would rule it worse under the floor was not run. `todo.md` item 197 replaces that mount. Shipped under the floor before that 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. diff --git a/todo.md b/todo.md index 8833b93..6f3e32e 100644 --- a/todo.md +++ b/todo.md @@ -6,7 +6,7 @@ `Bar = 9` -`Next ID = 251` +`Next ID = 252` | Goal | W | |---|---| @@ -154,6 +154,7 @@ | 42 | 0.2.0 | | **Refuse a struct tag's `datatype` other than its Go type's before proving its values, as the README's Library section promises.** | 2 | 2 | 4 | 6 | 6 | 14.5 | | 32 | 0.2.0 | | **Add `misc.browser` as the parent of `misc.useragent`, so `misc.browser[Chrome].useragent` resolves.** | 3 | 3 | 4 | 6 | 4.1 | 14.4 | | 127 | 0.2.0 | | **Give a Swedish street only postal codes whose delivery digit means street or rural delivery, dropping codes whose delivery digit is 9, or record why they stay.** | 3 | 3 | 4 | 6 | 4 | 14.4 | +| 251 | 0.2.0 | | **Export from the library whether a reference body is a lone path, so the CLI's `isPath` stops copying the path grammar.** | 2 | 2 | 3 | 6 | 3.2 | 14.3 | | 242 | 0.2.0 | | **Add `sv_SE.bloodtype`, weighted by Sweden's distribution.** | 1 | 2 | 4 | 4 | 2 | 14.1 | | 22 | 0.2.0 | | **Give `url` and `email` a path that draws only domains nobody can register, keeping the wide set as the default.** | 3 | 4 | 7 | 8 | 16 | 14.0 | | 46 | 0.2.0 | | **Report the same error every load for a table with two bad options.** | 2 | 2 | 3 | 7 | 6, 10 | 14.0 | @@ -586,6 +587,10 @@ Require the path step to reach a sibling category. `docs/research/research-geo-se.md` reads delivery digit 0 or 1 as boxes, 2–4 and 6–7 as street, 5 as rural, 8 as reply mail and 9 as competitions or temporary, with exceptions in big cities. `street_delivery` drops 0, 1 and 8 and keeps 9. The panel of 2026-10-05 found it; whether a shipped street carries a 9 code is unchecked. +### 251. Export from the library whether a reference body is a lone path, so the CLI's `isPath` stops copying the path grammar. + +The inherited architect of the 0.1.0 scoring run on 52e0304 named `isPath` (`cli/cli.go`) the CLI's first rot point when the path grammar changes: it copies the grammar because the CLI reads only the library's public API. + ### 242. Add `sv_SE.bloodtype`, weighted by Sweden's distribution. geblod.nu's 2007 figures, via sv.wikipedia: A+ 37, O+ 32, B+ 10, A− 7, O− 6, AB+ 5, B− 2, AB− 1 (%). Item 15 plans a global `misc.bloodtype` from AABB. [Source research](docs/research/research-sources-se.md).