38 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
2026-10-11T13:18:20Z, PR #203 at 3d4131b, against bf1becb
Ruling: worse
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | worse | same | same |
| Inherited architect | same | worse | worse | same | worse |
| Maintainability senior | same | worse | same | same | worse |
| Junior A | same | worse | worse | better | worse |
Mid A, decided by:
- Shape:
internal/datafiles/mount.go:13mounted: a hand-built virtual fs.FS of five types replaces a base string joined in dirPath - Locality, Shape:
internal/datafiles/datafiles.go:34Source.Mounted: one field drives file reads, error labels and the manifest read, and a second Mounted call does nothing - Locality:
data/sv_SE/fs.go:19Modules: a locale reading its country's places is a Go import with a package comment - Locality:
fejkdata.go:99New: every source is named at the call site, where the base loaded shipped data implicitly - Shape:
data/modules.go:17Modules: six packages, five near-identical boilerplate
Inherited architect, decided by:
- Locality, Shape, Overall:
internal/datafiles/mount.go:13mounted: a fake fs.FS of five types with made-up folders above the mount, where the base had a base string; where it rots first - Locality:
internal/datafiles/datafiles.go:34Source.Mounted: the mount point kept in Source.at and mounted.at, and labelled undoes it through underMount - Locality, Self-sufficiency:
index.go:22placeIndex: index keys carry the full namespaced path, which only the mount maps back, stated nowhere at either site - Locality:
fejkdata.go:41config.given: every source explicit and errNoData names the fix, a partial offset - Navigation:
data/modules.go:14go:generate: the manifest generator lives in a test of the parent package
Maintainability senior, decided by:
- Locality, Overall:
internal/datafiles/mount.go:13mounted: a fake fs.FS inventing the folders above the mount, so tracing why a file opens means following three paths in Open, where the base prefixed one base string - Locality:
internal/datafiles/datafiles.go:56labelled: one field serves the manifest read, file opens and error labels, and labelled undoes the mount through code in mount.go - Locality:
fejkdata.go:99New: the hidden shipped default is gone, a partial offset
Junior A, decided by:
- Shape, Locality, Overall:
internal/datafiles/mount.go:13mounted: about 130 lines and five types fake folders so a module's root shows up under its namespace, where prefixing Category.Folders looks like the obvious alternative - Locality:
internal/datafiles/datafiles.go:34Source.Mounted: at changes both fsys and how errors label files, and a second Mounted call does nothing silently - Self-sufficiency:
data/sv_SE/fs.go:1svse: each package doc states its namespace and what it reads, and Modules names exactly what it pulls in - Self-sufficiency:
fejkdata.go:79errNoData: the error names the call that loads the shipped data
2026-10-11T18:50:05Z, PR #209 at fbe2fde, against d157e45
Ruling: better
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | same | same | better |
| Inherited architect | same | better | better | same | better |
Mid A, decided by:
- Locality, Overall:
cli/cli.go:318options: the modules a run loads come in through Main and run, where the base fetched data.Modules() inside the flag handling - Locality:
internal/datafiles/datafiles.go:56labelled: reads Source.at, where the base type-asserted the FS to recover the mount point - Locality, Shape:
internal/datafiles/mount.go:11mounted: two types and one helper, no hidden read flag, where the base held five - Locality:
internal/datafiles/datafiles.go:34Mounted: the mount point is stored twice, and a second call is silently ignored - Shape:
cli/cli.go:104no-shipped-data: in a custom CLI the flag drops whatever Main was given, which only Main's doc says - Shape, Self-sufficiency:
data-import/geo-us.py:219main: the street share is a bare positional float, and places is rebound partway
Inherited architect, decided by:
- Shape, Locality:
internal/datafiles/mount.go:8mounted: Open, ReadFile and ReadDir over one helper, where the base faked a tree in five types - Locality:
internal/datafiles/manifest.go:53ManifestPath: reads the explicit Source.at, though at is stored twice and only Mounted keeps them in step - Locality:
cli/cli.go:318options: the shipped set comes in through Main, run and options, where the base fixed it deep in the flag handling - Shape:
cli/cli.go:104no-shipped-data: once Main takes any modules, the flag's name promises less than it does - Shape:
data-import/geo-us.py:211main: places is rebound from every incorporated place to the shipped ones - Locality:
cli/cli.go:651moduleVersion: a pure function over the build info picks fejkdata's version by path
2026-10-11T19:02:27Z, PR #209 at 69af4c1, against d157e45
Ruling: better
| Seat | Navigation | Locality | Shape | Self-sufficiency | Overall |
|---|---|---|---|---|---|
| Mid A | same | better | better | same | better |
| Inherited architect | same | better | better | same | better |
Mid A, decided by:
- Shape, Locality:
internal/datafiles/mount.go:11mounted: serves Open, ReadFile and ReadDir with one stateless entry type, where the base faked a full tree with a read flag - Locality:
internal/datafiles/datafiles.go:18Source: the mount point is a field, where labelled and ManifestPath type-asserted the FS; a second Mounted is silently ignored - Locality:
cli/cli.go:321invocation.options: the modules and the command name arrive as parameters, where the base called data.Modules() in the flag logic - Shape:
cli/cli.go:678versionLine: the CLI is its own package and main is one line, partly offset by the version line's branches and the COMMAND placeholder
Inherited architect, decided by:
- Shape, Locality:
internal/datafiles/mount.go:11mounted: two types and one pure underMount, where the base faked an fs.File tree in five types with a read cursor - Locality:
internal/datafiles/manifest.go:53ManifestPath: the manifest reads through s.at whether called before or after Mounted, removing the base's order dependence - Locality:
internal/datafiles/datafiles.go:34Mounted: a second call is a silent no-op and at lives twice; where it rots first - Shape:
cmd/fejkdata/main.go:12main: 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:667report: 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:101New: 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:129config.misuse: one named unit collects every option mistake, and errNoSeed tells the caller what to write - Shape:
fejkdata.go:40config.dataGiven: the name says what it tracks now that seeded sits beside it - Self-sufficiency:
cli/cli.go:26usage: --help states the --seed default and stays true for a custom CLI - Self-sufficiency:
internal/jsonvalue/jsonvalue.go:29located: a JSON syntax error names its line and column - Shape:
record.go:216errChoiceRecord: an inline errors.New became a named sentinel FakeRecord treats alike - Locality:
Dockerfile:14release-tooling: a /tested sentinel copy is an indirection, though its comment explains it
Inherited architect, decided by:
- Locality, Overall:
fejkdata.go:101New: 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:129misuse: the base's two early returns become one unit joining every option mistake before any data loads - Locality:
cli/cli.go:593run: 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:179readName: six pieces of state, with keptInPick's decision made at load through addressedKeyspath.go:190drawSteps: climbed carries state between steps and pins swap mid-looptable.go:253table.route: six-field tableRoute plus fromRow and pinnedBelow held at oncenode.go:65template: filled in four phases by different files, with a change-together setAGENTS.md:109misc.loglevel: the decision title says keyed by keyword, the JSON keys by code
Mid A, hardest first:
pick.go:9pickKey: keys built at load must match keys built at render, with heap-escape rules mixed inrender.go:146readField: four read paths, and the name undersells itpath.go:190drawSteps: order-dependent climbed and stepDownPinsdatatype.go:230columnReadOf: three spellings of a column read, with a four-function change-together contractAGENTS.md:109misc.loglevel: the decision title contradicts the JSON
Maintainability senior, hardest first:
render.go:146readField: choosing named, kept or fresh needs env.pick, pickAt, under, levels and addressed at onceenv.go:71enter: frames pushed here must be found by frameOf later, order dependence across three filespath.go:190drawSteps: climbed carries state from stepParent to the next stepChildpath.go:145compiledPath.walkEvery: a capacity-clipping alias with no comment on why it is safeindex.go:109loadReached: lazy loading mutates the shared tree and rolls back with putBack
Inherited architect, would restructure first:
pick.go:371keptInPick: string pickKeys rebuilt at render must match addressedKeys built at load, and a miss silently draws afreshnode.go:253template: one struct for six concepts, filled in four stages by four filescalc.go:219checkCalcFields: calc lives in five places, and the root calc.go holds only load fencesdatatype.go:222columnRead: column-read resolution sits in datatype.gocli/cli.go:505isPath: copies the path grammar, the CLI's first rot point