Answer architecture round 10: the paired ruling at fb2c809 is better; a mounted module names its manifest from its files' root, and the mount wrapper returns nothing beside an error
This commit is contained in:
@@ -449,3 +449,26 @@ Inherited architect, decided by:
|
|||||||
- Navigation: `data/svse/fs.go:1` `svse`: 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: `data/svse/fs.go:1` `svse`: 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:57` `labelled`: errors name sv_SE (address.json), not a path that opens as written
|
- Navigation: `internal/datafiles/datafiles.go:57` `labelled`: errors name sv_SE (address.json), not a path that opens as written
|
||||||
- Locality: `fejkdata.go:99` `New`: New loads exactly its options, cancelled by `data/svse/fs.go:1`'s dependency on geose that nothing in Go expresses
|
- Locality: `fejkdata.go:99` `New`: New loads exactly its options, cancelled by `data/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:66` `WithDataFS`: 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:19` `Modules`: 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:13` `mounted`: 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:19` `Modules`: 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:66` `WithDataFS`: every source is named at the call site, and leaving them all out gives an error that spells the fix
|
||||||
|
- Navigation: `data/modules.go:17` `Modules`: shipped data has a Go home inside data/, each module's manifest beside its files
|
||||||
|
- Shape: `internal/datafiles/mount.go:13` `mounted`: 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:1` `svse`: each module says in code which namespace it supplies and what it reads
|
||||||
|
|||||||
+1
-1
@@ -38,7 +38,7 @@ func TestPackageImports(t *testing.T) {
|
|||||||
"data/misc": nil,
|
"data/misc": nil,
|
||||||
"data/sv_SE": {"data/geo/SE"},
|
"data/sv_SE": {"data/geo/SE"},
|
||||||
"internal/builtinfunc": {"internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/proven"},
|
"internal/builtinfunc": {"internal/datatype", "internal/drawstate", "internal/grammar", "internal/invariant", "internal/proven"},
|
||||||
"internal/datafiles": {"internal/grammar", "internal/invariant", "internal/jsonvalue"},
|
"internal/datafiles": {"internal/grammar", "internal/jsonvalue"},
|
||||||
"internal/datatype": nil,
|
"internal/datatype": nil,
|
||||||
"internal/drawstate": nil,
|
"internal/drawstate": nil,
|
||||||
"internal/grammar": nil,
|
"internal/grammar": nil,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -49,7 +50,12 @@ func (s Source) Manifest() (Manifest, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ManifestPath is the manifest's path as errors name it.
|
// ManifestPath is the manifest's path as errors name it.
|
||||||
func (s Source) ManifestPath() string { return s.labelled(ManifestFile) }
|
func (s Source) ManifestPath() string {
|
||||||
|
if m, isMounted := s.fsys.(mounted); isMounted {
|
||||||
|
return s.labelled(path.Join(m.at, ManifestFile))
|
||||||
|
}
|
||||||
|
return s.labelled(ManifestFile)
|
||||||
|
}
|
||||||
|
|
||||||
// decodeManifest decodes a manifest, refusing any key or shape it does not define, and
|
// decodeManifest decodes a manifest, refusing any key or shape it does not define, and
|
||||||
// reports every mistake: first each entry's own, in path order, then each parent naming
|
// reports every mistake: first each entry's own, in path order, then each parent naming
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ func (m mounted) Open(name string) (fs.File, error) {
|
|||||||
}
|
}
|
||||||
if ok {
|
if ok {
|
||||||
f, err := m.fsys.Open(".")
|
f, err := m.fsys.Open(".")
|
||||||
return mountRoot{File: f, name: path.Base(name)}, err
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return mountRoot{File: f, name: path.Base(name)}, nil
|
||||||
}
|
}
|
||||||
if next, ok := m.towards(name); ok {
|
if next, ok := m.towards(name); ok {
|
||||||
return &mountDir{name: path.Base(name), next: next}, nil
|
return &mountDir{name: path.Base(name), next: next}, nil
|
||||||
@@ -70,7 +73,10 @@ type mountRoot struct {
|
|||||||
|
|
||||||
func (r mountRoot) Stat() (fs.FileInfo, error) {
|
func (r mountRoot) Stat() (fs.FileInfo, error) {
|
||||||
info, err := r.File.Stat()
|
info, err := r.File.Stat()
|
||||||
return renamed{FileInfo: info, name: r.name}, err
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return renamed{FileInfo: info, name: r.name}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r mountRoot) ReadDir(n int) ([]fs.DirEntry, error) {
|
func (r mountRoot) ReadDir(n int) ([]fs.DirEntry, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user