diff --git a/docs/comprehension-history.md b/docs/comprehension-history.md index 8c780d1..5920501 100644 --- a/docs/comprehension-history.md +++ b/docs/comprehension-history.md @@ -224,3 +224,28 @@ Inherited architect, decided by: - Locality, Shape: `data.go:13` `loadSources`: one source can make another load early through identity-compared snapshots and a reverse graph over index entries - Shape: `index.go:36` `categoryAt`: two near-synonym types for where a category sits, and three near-identical function names - Self-sufficiency: `index.go:248` `staleEntry`: its note on linking cannot be read without knowing the pipeline, and `config.load` points at a paragraph-long decision anchor + +## 2026-10-09T17:39:40Z, PR #202 at 0bdb100, against 2652779 + +Ruling: worse + +| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall | +|---|---|---|---|---|---| +| Mid A | same | worse | worse | same | worse | +| Inherited architect | same | worse | worse | same | worse | + +Mid A, decided by: + +- Locality, Overall: `data.go:13` `loadSources`: whether an indexed category loads in New depends on source order and what other sources hold, through before-and-after snapshots +- Locality: `index.go:119` `affectedBy`: trusts the manifest's `reads` to match the templates, with nothing beside the code checking it +- Locality, Shape: `index.go:174` `loadReached`: a rollback batch to reason about, with names that say less than `unloadedReads` and `linkedTables` did +- Shape: `index.go:16` `ErrLoad`: a public error every entry point depends on, in a file named for the index +- Shape: `internal/datafiles/datafiles.go:103` `decodeManifest`: a hand-written strict decoder doubles the package's responsibilities + +Inherited architect, decided by: + +- Locality, Overall: `data.go:13` `loadSources`: New's load set follows dependencies forward from templates and backward from the manifest's `reads`, and a stale `reads` leaves a broken reader for its first reach +- Locality: `index.go:201` `batch.load`: the unloaded entry is deleted three calls away, and `putBack` reverses it +- Locality, Shape: `data.go:62` `standing`: a `map[string]any` of nodes and entries compared by identity +- Shape: `index.go:1` `index.go`: fifteen units under generic names in a file named for the index, `ErrLoad` among them +- Shape: `internal/datafiles/datafiles.go:103` `decodeManifest`: a strict JSON decoder shares the tree walker's file with no seam diff --git a/docs/decisions.md b/docs/decisions.md index 918d9d7..7e67314 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -174,9 +174,9 @@ replaced, so a replacement or a stand-in breaking a reader fails `New`. Goal 6.3 indexed source from anyone else may fail at first reach; `Fake` then returns the load's error, matching `ErrLoad`, the same every call. A first reach checks only a table's `parent` against its entry, so a table loads with its parent and a failed load puts -back whole. Proving the rest of an index is its author's, with the tool `todo.md` item -194 plans: checked against the merged tree, an entry's paths and reads would blame the -manifest for a table or a stand-in another source adds. +back whole. Proving the rest of an index is its author's, with the tool +`todo.md` item 194 plans: checked against the merged tree, an entry's paths and reads +would blame the manifest for a table or a stand-in another source adds. Valid while CI proves the shipped set whole and each category alone. diff --git a/todo.md b/todo.md index ec34a89..4625112 100644 --- a/todo.md +++ b/todo.md @@ -106,7 +106,7 @@ | 178 | 0.2.0 | | **Plan with the systems architect which `internal/` packages the engine splits into, by area, and how each type stops being written by more than one stage, then file the moves as items.** | 1 | 3 | 2 | 9 | 3, 3.2 | 18.4 | | 193 | 0.2.0 | decision | **Move the largest shipped packages into nested Go modules that keep their import paths, once item 192's gate fails.** | 6 | 6 | 6 | 7 | 2.3, 2 | 17.8 | | 92 | 0.2.0 | | **Name the hyphenated field in a `calc`'s refusal, and say to rename it: today `{calc(postal-code * 2)}` reports `no field "postal"`.** | 1 | 2 | 5 | 6 | 6 | 17.5 | -| 194 | 0.2.0 | | **Let a data author write and check their own `.fejkdata.json` index with the library or the CLI, and fail a load whose index leaves out a category file.** | 2 | 4 | 5 | 7 | 6.3, 9.1 | 17.5 | +| 194 | 0.2.0 | decision | **Let a data author write and check their own `.fejkdata.json` index with the library or the CLI, and fail a load whose index leaves out a category file.** | 2 | 4 | 5 | 7 | 6.3, 9.1 | 17.5 | | 53 | 0.2.0 | | **Let a table column carry a `datatype`, so `--format json` writes `"safe": true` and `--format sql` a boolean.** | 4 | 5 | 6 | 6 | 4 | 16.9 | | 55 | 0.2.0 | | **Document `NewRecordTemplate`, `ErrNoColumns` and `MaxRepeat` in the README's Library section.** | 1 | 2 | 6 | 7 | 12 | 16.8 | | 18 | 0.2.0 | | **Give the address records one column set across countries: `region` and `municipality` as columns on `geo.SE.address` too.** | 4 | 4 | 6 | 6 | 5 | 16.6 |