28 KiB
Comprehension history
2026-10-09T08:59:19Z, PR #190 at 17f732a, against ee4b40b
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
pick.go:9pickKey: the definition sits on the type, besidelevelKeys,addressedKeys,keptInPickandreadUnder, where four files held themrender.go:155readField: one named predicate,keptInPick, states the whole keep ruledatatype.go:217columnRead: beside the code that reads it
Inherited architect, decided by:
pick.go:9pickKey: the 3am path for a named pick now ends in one file, with its worked examplerender.go:155readField:keptInPickholds its own nil and reference checkspath.go:72compiledPath: the field no longer reuses the vocabulary word level
2026-10-09T09:24:31Z, PR #190 at 65a32db, against ee4b40b
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
pick.go:9pickKey: the definitions sit on the type, beside the functions that build and read the keysdatatype.go:217columnRead: besideitemDatatypeandcheckColumns, which consume itnode.go:70template.readsColumn: names the four readers that change together
Inherited architect, decided by:
pick.go:9pickKey: a pick-key bug needs one file, where it needed four and the vocabularyrender.go:155readField: one named predicate,keptInPick, states the keep rulepath.go:72compiledPath:headSpansis the costliest new read in the diff
2026-10-09T09:30:15Z, PR #190 at d9f0fc9, against ee4b40b
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
pick.go:9pickKey: the definitions and the code building and reading the keys share one filerender.go:155readField:keptInPickholds the whole keep rule and its own nil checkpath.go:74compiledPath:headSpansand the bare 0 its callers pass cost a second read
Inherited architect, decided by:
pick.go:9pickKey: the 3am mechanism reads in one file, in reading orderdatatype.go:217columnRead: beside its consumers, andnode.go:70names its four readerspath.go:119compileStep: six parameters, the one place that reads harder
2026-10-09T10:16:38Z, PR #193 at c27e8b7, against d74c0ed
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
data-import/geo.py:75fence: one named step states the locality row and drops childless parents level by level, wherewith_streetspruned localities alonedata-import/geo-us.py:174main: the county and region pruning no longer hides inside thetsv.writecomprehensionsdata-import/geo-se.py:186main: builds its rows before the fence, so it has the US script's shape
Inherited architect, decided by:
data-import/geo.py:75fence: the loader's parent-has-a-child rule is named in the import code and applied in one place at all three levelsdata-import/geo-us.py:174main: onefencecall before any write replaces filters buried in the writesdata-import/geo-se.py:186main: both scripts read alike, build rows, fence, write
2026-10-09T10:29:19Z, PR #193 at 8433689, against d74c0ed
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
data-import/geo.py:75fence: the parent-has-a-child rule lives in one function whose docstring states the rule, each argument's shape and what it returnsdata-import/geo-us.py:174main:zctasis built once and fenced, and every write reads fromkeptwith no filter of its owndata-import/geo-us.py:128zcta_localities: the name says it returns a ZCTA-to-place map, wherepostal_codespointed at the wrong output
Inherited architect, decided by:
data-import/geo.py:75fence: one unit owns the chain from locality to municipality to region, where the base spread it overwith_streetsand bothmainsdata-import/geo-us.py:128zcta_localities: the name and docstring say what it maps todata-import/geo-se.py:181main:region_namesandmunicipality_namessay they map codes to names, and the rows are built once before the fence
2026-10-07, scoring run at ad59967
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mean | 7.00 | 5.88 | 6.50 | 6.13 | 6.38 |
2026-10-09T11:04:29Z, PR #195 at b9d1af6
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Junior A | 7.5 | 6.5 | 7 | 7 | 7 |
| Mid A | 7.5 | 6 | 6.5 | 7 | 6.5 |
| Maintainability senior | 7.5 | 6 | 6.5 | 6.5 | 6.5 |
| Inherited architect | 7 | 5.5 | 6 | 7 | 6.5 |
| Mean | 7.38 | 6.00 | 6.50 | 6.88 | 6.63 |
Junior A, hardest first:
pick.go:70keptInPick: a level, a first-level key, that key moved underenv.pickAt, and the name's addressed set, held at oncenamefence.go:76refuseTwiceDrawnIn: mirrors the keep rule inkeptInPick, and nothing ties the two in code
Mid A, hardest first:
pick.go:79readUnder: a key built at load inaddressedKeysmust equal one built at render throughpickKey.under, and a mismatch is silentnode.go:70readsColumn: four functions in three files must change together
Maintainability senior, hardest first:
render.go:146readField: whether a read is kept in a pick rests on string keys from three places and onenv.pickcleared at the right momentpath.go:190drawSteps: a nilpinsormemonames the mode, andclimbedcarries state across iterations
Inherited architect, would restructure first:
pick.go:179readName: keeping one named pick needsname.go,pick.go,env.go,render.go,path.goandrecord.goheld at oncenode.go:52template: filled in four phases by four functions
2026-10-09T11:09:34Z, PR #195 at 344023d, against 1c342bc
Ruling: better
| Seat | Vote |
|---|---|
| Mid A | better |
| Inherited architect | better |
Mid A, decided by:
shipped.go:61loadCallerPath:FakeandFakeRecordget their segments from the one call that loads them, where each repeated the split and the loadnode.go:30choice: thesharedcomment says what the field counts, where it claimedListreads itdata-import/tsv.py:7write: its check and message match the loader's one-row rule
Inherited architect, decided by:
shipped.go:61loadCallerPath: the load-before-walk order is held by data flow, where a comment onloadShippedAtstated itnode.go:30choice: thesharedcomment no longer sends a--listbug to the wrong fieldREADME.md:163## Data: the opening names thegeotrees the section documents
2026-10-09T16:48:45Z, PR #201 at c3ef728, against 2652779
Ruling: same
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | same | same | same | same |
| Inherited architect | same | same | same | same | same |
2026-10-09T16:54:01Z, PR #201 at 8b5a972, against 2652779
Ruling: same
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | same | same | same | same |
| Inherited architect | same | same | same | same | same |
2026-10-09T17:21:57Z, PR #202 at 65b2de8, against 2652779
Ruling: worse
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | worse | same | same | worse |
| Inherited architect | same | worse | worse | worse | worse |
Mid A, decided by:
- Locality, Overall:
data.go:13loadSources: one pass mixes lazy and eager loading through before/after snapshots, aprovidesclosure and a reverse graph search, and the skip of the first source is unexplained - Locality:
data.go:107mergeFolder: a category must sit in one of two maps,childrenorunloaded, kept by deletes in four functions across two files - Locality:
internal/datafiles/datafiles.go:83embeddedManifests: a process-wide cache in a package that was otherwise pure
Inherited architect, decided by:
- Locality, Self-sufficiency:
data.go:13loadSources: nothing says why replaced paths drag their readers in, or what the!after[p]case covers - Locality:
index.go:113loadReached: its rollback claims the next call fails the same way, which holds only while no parent table was linked to a rolled-back child - Shape:
index.go:159reaching: four near-synonyms,reaching,reachedFrom,loadReachedandreferenced, andreferencedandcategoryUnderreturn loaded categories too - Shape:
data.go:40place: shares its name withcompileInto's parameter, and returns a closure answering one question two ways - Locality:
internal/datafiles/datafiles.go:83embeddedManifests: hidden global state for a small saving
2026-10-09T17:32:44Z, PR #202 at fdc6a04, against 2652779
Ruling: worse
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | worse | same | same | worse |
| Inherited architect | same | worse | worse | worse | worse |
Mid A, decided by:
- Locality, Overall:
index.go:175loadReached: one loop loads, puts back on failure, checks each entry before linking and again after the pipeline, and its rollback rests on an ordering invariant its comment argues - Locality:
data.go:13loadSources: whether a category loads in New means holding every source and every index entry together, throughstandingsnapshots anddependents - Shape:
index.go:36categoryAt: a near-synonym ofcategorySite, besidedependenciesanddependents, which differ by two letters and run in opposite directions
Inherited architect, decided by:
- Locality, Overall:
index.go:175loadReached: five jobs in one queue loop, with a cross-call ordering invariant to hold - Locality, Shape:
data.go:13loadSources: one source can make another load early through identity-compared snapshots and a reverse graph over index entries - Shape:
index.go:36categoryAt: two near-synonym types for where a category sits, and three near-identical function names - Self-sufficiency:
index.go:248staleEntry: its note on linking cannot be read without knowing the pipeline, andconfig.loadpoints 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:13loadSources: whether an indexed category loads in New depends on source order and what other sources hold, through before-and-after snapshots - Locality:
index.go:119affectedBy: trusts the manifest'sreadsto match the templates, with nothing beside the code checking it - Locality, Shape:
index.go:174loadReached: a rollback batch to reason about, with names that say less thanunloadedReadsandlinkedTablesdid - Shape:
index.go:16ErrLoad: a public error every entry point depends on, in a file named for the index - Shape:
internal/datafiles/datafiles.go:103decodeManifest: a hand-written strict decoder doubles the package's responsibilities
Inherited architect, decided by:
- Locality, Overall:
data.go:13loadSources: New's load set follows dependencies forward from templates and backward from the manifest'sreads, and a stalereadsleaves a broken reader for its first reach - Locality:
index.go:201batch.load: the unloaded entry is deleted three calls away, andputBackreverses it - Locality, Shape:
data.go:62standing: amap[string]anyof nodes and entries compared by identity - Shape:
index.go:1index.go: fifteen units under generic names in a file named for the index,ErrLoadamong them - Shape:
internal/datafiles/datafiles.go:103decodeManifest: a strict JSON decoder shares the tree walker's file with no seam
2026-10-10T09:09:41Z, PR #202 at d34cc42, against 2652779
Ruling: better
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | better | same | better |
| Inherited architect | same | better | same | same | better |
Mid A, decided by:
- Locality, Overall:
data.go:12loadSources: one path, each source indexed or walked then oneloadReached, whereconfig.loadswitched between a lazy and an eager mode - Locality:
index.go:107loadReached: a failed load puts back what it loaded and returns an error, whereloadShippedpanicked partway through - Locality, Shape:
node.go:31folder.put: two methods keep a name inchildrenorunloaded, never both - Shape:
index.go:29categoryAt:shipped.gois only the embed, andcategorySiteembedscategoryAtin place of a duplicatedunloadedCategory
Inherited architect, decided by:
- Locality:
data.go:12loadSources: one load path, whereconfig.loadhid a mode switch between lazy and eager loading - Locality:
index.go:107loadReached: returns a load error, and names a manifest entry drifted from its table, whereloadShippedpanicked on a hand-regenerated Go file - Locality:
node.go:23folder: the children-or-unloaded rule stated once and kept by two methods
2026-10-10T09:21:22Z, PR #202 at b77ec94, against 2652779
Ruling: better
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | same | same | better |
| Inherited architect | same | worse | same | same | worse |
| Maintainability senior | same | better | same | better | better |
| Junior A | same | better | better | same | better |
Mid A, decided by:
- Locality, Overall:
node.go:31folder.put: two methods keep a name inchildrenorunloaded, whereunloadedCategory.loadkept it by a separate delete - Locality, Overall:
data.go:22addSource: each source's own manifest decides how it loads, where adding any data path switched the whole shipped set to eager loading
Inherited architect, decided by:
- Locality, Overall:
index.go:109loadReached: one function serves New and first reach, rolls back throughputBack, and rests on facts held elsewhere - Locality:
index.go:22placeIndex: how sources merge depends on their order and on which kind each is, and the children-or-unloaded rule holds only whileputis the one writer
Maintainability senior, decided by:
- Locality, Overall:
data.go:12loadSources: every source goes through one path, whereconfig.loadbranched between two load paths of different eagerness - Locality:
index.go:15indexed: an unloaded entry carries its own source, whereunloadedCategory.loadwas wired to the globalshippedSource - Self-sufficiency, Overall:
internal/datafiles/manifest.go:56decodeManifest: the index is data checked strictly, whereshippedEntrytold the reader to empty a generated literal by hand
Junior A, decided by:
- Locality, Shape:
node.go:23folder:putandputUnloadedkeep a name in one map, wherecompileIntoandunloadedCategory.loadkept it as a pair - Locality, Shape:
data.go:12loadSources: one load path, whereconfig.loadforked andloadShippedwas a second, panic-only pipeline - Shape:
data.go:81categorySite: embedscategoryAt, whereunloadedCategoryrepeated its fields
2026-10-10T11:11:16Z, PR #203 at 421bb49, against bf1becb
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:
node.go:28folder.reads: a third per-name map beside children and unloaded with no invariant tying it to them; every placement site must remember a separate setReads call (data.go:36addSource,data.go:76mergeFolder,index.go:27placeIndex) - Locality, Shape:
resolve.go:96withReads: the manifest's reads travels through folder, categorySite.reads and templateSite.category to feed one error clause, four files to hold for one sentence of error text - Shape:
internal/datafiles/manifest.go:22Manifest.Reads: reads as a load dependency the loader acts on, though it only feeds error text, and "reads" already means a template reading a name or column - Shape:
data/geo/SE/fs.go:2SE: package names SE, US, en_US, sv_SE; in Modules SE.FS sits beside sv_SE.FS with nothing saying which is geography - Locality:
fejkdata.go:94New: loads exactly what the options name, easier than the hidden config{shipped: true} default, though config.given brings back a smaller flag
Inherited architect, decided by:
- Locality, Shape, Overall:
node.go:27folder.reads: a third per-name map that put and putUnloaded leave alone, so addSource, mergeFolder and placeIndex must each call setReads, and batch.load relies on placeIndex having done it; action at a distance for one error suffix - Locality:
resolve.go:94templateSite.withReads: reads travels folder, categorySite.reads, a *categorySite per template, then withReads, four hops across three files - Shape:
data/geo/SE/fs.go:2SE: bare package names SE and US do not say geography at WithDataFS(sv_SE.FS, SE.FS); the namespace-doubling rule lives only in README and test code - Shape, Self-sufficiency:
internal/datafiles/manifest.go:22Manifest.Reads: suggests it drives loading though it only feeds withReads; "by default" needs README goal 9.2 - Locality, Navigation:
data/modules.go:17Modules: the hidden shippedFS default is gone; Modules lists the modules, errNoData names the fix, and the CLI loads data.Modules() in plain sight - Locality:
fejkdata.go:40config.given: WithDataFS() with no arguments differs from no option, learnt only from its comment
2026-10-10T11:24:33Z, PR #203 at 70e552c, against bf1becb
Ruling: same
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | worse | same | same |
| Inherited architect | worse | worse | better | same | worse |
| Maintainability senior | worse | same | worse | same | worse |
| Junior A | same | worse | same | same | same |
Mid A, decided by:
- Locality:
fejkdata.go:94New: loads only the modules its options name or fails with errNoData; the base silently added the embedded shippedSource in config.load - Shape:
internal/datafiles/manifest.go:23Manifest.Reads: Reads and categorySite.defaultModules suggest a loaded dependency, though only a hint reads them, and "by default" is never set against anything - Locality, Shape:
data.go:12loadSources: default modules reach a category by two routes, the walked map and indexed.defaultModules, and templateSite gains a pointer only to carry them - Shape:
data/modules.go:18Modules: package names SE, US, sv_SE, en_US are unidiomatic, and every embedded path repeats itself
Inherited architect, decided by:
- Locality, Overall:
data.go:12loadSources: addSource fills a side map keyed by path that loadSources copies onto sites after the merge, so merge order and clashes must be reasoned about on the core load path - Locality, Shape:
data.go:92categorySite.defaultModules: the manifest's module list passes four carriers, set at two distant places and not by siteIn, so a future caller resolving siteIn sites gets a false "names no module" message - Navigation:
data/geo/SE/geo/SE/address.jsongeo.SE.address: every shipped file sits under a stuttered path - Shape:
fejkdata.go:65WithDataFS: the root no longer embeds data, datafiles.Source drops base, and data sits behind data/modules.go and five small packages - Navigation, Shape:
internal/datafiles/manifest.go:23Manifest.Reads: import paths that look resolved though nothing resolves them, generated by a test reached only through go:generate
Maintainability senior, decided by:
- Navigation, Overall:
data/geo/SE/geo/SE/address.jsongeo.SE.address: the path repeats the namespace inside the module, one extra hop from category to file, two for geo - Shape:
internal/datafiles/manifest.go:21Manifest.Reads: reads sounds like a loaded dependency, and the same list is also defaultModules and walked - Navigation, Shape:
data/modules.go:15go:generate: regenerating a module's manifest runs a test one package up - Shape:
data.go:20loadSources: defaultModules reaches categorySite by two routes, and siteIn leaves it empty
Junior A, decided by:
- Locality:
data.go:12loadSources: default modules pass through four files, an out-parameter map patched onto sites after the merge for walked sources and indexed.defaultModules copied in batch.load for indexed ones - Locality:
fejkdata.go:94New: reads straight through with no hidden default source, which only partly offsets the above
2026-10-11T09:52:08Z, PR #203 at 4c4bbcc, against bf1becb
Ruling: worse
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | same | worse | same | worse |
| Inherited architect | worse | same | worse | same | worse |
Mid A, decided by:
- Shape, Overall:
data/geo/SE/fs.go:2SE: each module embeds a tree repeating its own name, and the package names SE, US, en_US, sv_SE are unidiomatic; five thin packages plus a list replace one embed - Shape:
reference.go:124withDefaultModules: "default modules" suggests modules that load by default, though nothing loads them; "by default" is spelled out only in the README - Locality, Shape:
inline.go:40NewTemplate: errors are decorated twice, by hand, at four entry points - Locality:
fejkdata.go:101New: the hidden shipped default is gone, offsetting the above
Inherited architect, decided by:
- Navigation, Overall:
data/sv_SE/fs.go:8FS: every data file sits under a doubled folder, data/sv_SE/sv_SE/, data/geo/SE/geo/SE/, a stop at each hop of the 3am path - Navigation:
data/modules.go:15go:generate: the module list is written twice and the manifest writer lives in a root test run from the data package - Shape:
data/geo/SE/fs.go:2SE: a package named SE reads as Sweden beside sv_SE, and "module" means a Go package here - Shape:
reference.go:126withDefaultModules: one concept spelled reads, defaultModules and "read by default", the last defined only in the README - Locality:
fejkdata.go:114New: four call sites apply loadError, withDefaultModules and noDataNote in a fixed order, offset by the hidden shipped source being gone
2026-10-11T10:44:13Z, PR #203 at 36b5062, against bf1becb
Ruling: worse
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | worse | worse | worse | same | worse |
| Inherited architect | worse | worse | same | worse | worse |
Mid A, decided by:
- Locality, Shape, Overall:
index.go:110loadReached: a reads parameter runs through four layers only to add a note to an error, and reads already means a template's reads - Navigation:
internal/datafiles/datafiles.go:36Source.Mounted: a shipped module's broken file is labelled geo/SE/address.json, a path that no longer exists - Locality:
internal/datafiles/datafiles.go:77Source.Walk: Walk adds the mount and Load removes it, two forms of a folder path in one type - Locality:
fejkdata.go:68WithDataFS: the shipped data no longer loads silently, a partial offset - Shape:
reference.go:127withMissingModules: a typo in manifest-less data still gets a note about modules
Inherited architect, decided by:
- Locality, Overall:
index.go:110loadReached: reads threaded through six signatures for one error note - Navigation:
internal/datafiles/datafiles.go:36Source.Mounted: errors name sv_SE/address.json, a path that does not exist, where the base named the real data/sv_SE/address.json - Navigation, Self-sufficiency:
data/svse/.fejkdata.json:26namespace: a namespace no longer mirrors its folder, so the path alone no longer finds the file - Self-sufficiency:
internal/datafiles/manifest.go:23Manifest.Reads: its comment and withMissingModules' only make sense after the README - Locality:
internal/datafiles/datafiles.go:77Source.Walk: the mount is translated in opposite directions by Walk and Load
2026-10-11T11:30:01Z, PR #203 at 2a4694b, against bf1becb
Ruling: worse
Fell: Navigation. Under the floor of 7.0: Navigation 6.88, so the same ruling counts as worse.
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | worse | better | same | same | same |
| Inherited architect | worse | same | same | same | same |
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Junior A | 7 | 5.5 | 6 | 6 | 6 |
| Mid A | 7 | 5.5 | 6.5 | 6 | 6 |
| Maintainability senior | 7 | 6 | 6.5 | 6.5 | 6.5 |
| Inherited architect | 6.5 | 5.5 | 5.5 | 6.5 | 6 |
| Mean | 6.88 | 5.63 | 6.13 | 6.25 | 6.13 |
Mid A, decided by:
- Locality:
fejkdata.go:66WithDataFS: every module is named at the call site, where the base silently started each generator from a package-level embed - Navigation:
data/geose/fs.go:1geose: a dotfile manifest decides the namespace and the folder follows a lowered, no-separator rule, one translation step from a failing path to its file - Navigation:
internal/datafiles/datafiles.go:57Source.labelled: a shipped file's error prints sv_SE (address.json), where the base printed the openable data/sv_SE/address.json - Locality:
data.go:27addSource: where a category lands depends on a field in a hidden file, a partial offset
Inherited architect, decided by:
- Navigation:
data/svse/fs.go:1svse: the step from a dot path to a folder goes through the lowered-namespace rule, stated only in the README and each package doc - Navigation:
internal/datafiles/datafiles.go:57labelled: errors name sv_SE (address.json), not a path that opens as written - Locality:
fejkdata.go:99New: New loads exactly its options, cancelled bydata/svse/fs.go:1's dependency on geose that nothing in Go expresses
2026-10-11T13:08:34Z, PR #203 at fb2c809, against bf1becb
Ruling: better
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | same | same | better |
| Inherited architect | better | better | same | better | better |
Mid A, decided by:
- Locality, Overall:
fejkdata.go:66WithDataFS: the caller names every module and New refuses no data naming the fix, where the base prepended a package-level shippedSource behind config{shipped: true} - Locality:
data/sv_SE/fs.go:19Modules: sv_SE reading geo.SE is a Go import with a doc line, not only a template reference inside address.json - Shape:
internal/datafiles/mount.go:13mounted: a hand-built virtual fs.FS replaces a base string, balanced by Source losing a field and Walk, Load and Manifest turning path-agnostic
Inherited architect, decided by:
- Locality, Navigation, Overall:
data/sv_SE/fs.go:19Modules: a locale reading its country's places is a Go import, one hop in code where the base needed the README or a trace through JSON references - Locality, Self-sufficiency:
fejkdata.go:66WithDataFS: every source is named at the call site, and leaving them all out gives an error that spells the fix - Navigation:
data/modules.go:17Modules: shipped data has a Go home inside data/, each module's manifest beside its files - Shape:
internal/datafiles/mount.go:13mounted: seven small types fake the folders above the mount, balanced by Source keeping one form and truthful per-module packages - Self-sufficiency:
data/sv_SE/fs.go:1svse: each module says in code which namespace it supplies and what it reads