diff --git a/backend/rudder-engine/main.go b/backend/rudder-engine/main.go
index 8ce37c51f..ee0b61c3c 100644
--- a/backend/rudder-engine/main.go
+++ b/backend/rudder-engine/main.go
@@ -423,7 +423,7 @@ func (e *engine) startWith(lang, device string, src *recorderProc, sink func(eve
recMu.Unlock()
writeMu.Lock()
// The streaming model holds back the last fraction of a second (its right context) until more audio
- // or a pause arrives, and a commit alone does not flush it (rega: a Stop mid-sentence lost "what
+ // or a pause arrives, and a commit alone does not flush it (measured: a Stop mid-sentence lost "what
// your country…"). 1.2 s of silence first lets it finish the words already spoken.
silence := make([]byte, 3200)
for i := 0; i < 12; i++ {
@@ -750,7 +750,7 @@ func (e *engine) startWith(lang, device string, src *recorderProc, sink func(eve
e.logs.add("speech server error: %s", string(msg))
emit(event{"type": "error", "message": string(msg)})
case t == "input_audio_buffer.committed":
- // The commit acknowledges Stop; the words for the audio before it can still follow (rega: a
+ // The commit acknowledges Stop; the words for the audio before it can still follow (measured: a
// Stop mid-word lost "what your country…"). Keep reading until the final text or 6 s of quiet (a loaded server can take seconds per backlog chunk).
committed = true
e.logs.add("speech server committed the stream; reading its last words")
diff --git a/data/posters/andean-caribbean.html b/data/posters/andean-caribbean.html
index 9d2eefa3d..9efb4229a 100644
--- a/data/posters/andean-caribbean.html
+++ b/data/posters/andean-caribbean.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-china-tibet-autonomous-region.html b/data/posters/asia-china-tibet-autonomous-region.html
index a0d84ed55..99e928c93 100644
--- a/data/posters/asia-china-tibet-autonomous-region.html
+++ b/data/posters/asia-china-tibet-autonomous-region.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-china-yunnan-province.html b/data/posters/asia-china-yunnan-province.html
index a2d332d98..99da2dbef 100644
--- a/data/posters/asia-china-yunnan-province.html
+++ b/data/posters/asia-china-yunnan-province.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-andhra-pradesh.html b/data/posters/asia-india-andhra-pradesh.html
index ed9d5690f..3c9a418f9 100644
--- a/data/posters/asia-india-andhra-pradesh.html
+++ b/data/posters/asia-india-andhra-pradesh.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-gujarat.html b/data/posters/asia-india-gujarat.html
index 2ae53480b..bddadca4a 100644
--- a/data/posters/asia-india-gujarat.html
+++ b/data/posters/asia-india-gujarat.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-karnataka.html b/data/posters/asia-india-karnataka.html
index a83823f0e..8327e9a71 100644
--- a/data/posters/asia-india-karnataka.html
+++ b/data/posters/asia-india-karnataka.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-kerala.html b/data/posters/asia-india-kerala.html
index f7fd6443b..a4e62aae5 100644
--- a/data/posters/asia-india-kerala.html
+++ b/data/posters/asia-india-kerala.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-madhya-pradesh.html b/data/posters/asia-india-madhya-pradesh.html
index 05290b99c..384eb3b93 100644
--- a/data/posters/asia-india-madhya-pradesh.html
+++ b/data/posters/asia-india-madhya-pradesh.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-odisha.html b/data/posters/asia-india-odisha.html
index 65b63bdc0..6dbe5fb49 100644
--- a/data/posters/asia-india-odisha.html
+++ b/data/posters/asia-india-odisha.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-rajasthan.html b/data/posters/asia-india-rajasthan.html
index 4bc19803c..90dac85a9 100644
--- a/data/posters/asia-india-rajasthan.html
+++ b/data/posters/asia-india-rajasthan.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-tamil-nadu.html b/data/posters/asia-india-tamil-nadu.html
index 6e5799b64..c31d78e8b 100644
--- a/data/posters/asia-india-tamil-nadu.html
+++ b/data/posters/asia-india-tamil-nadu.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-uttarakhand.html b/data/posters/asia-india-uttarakhand.html
index 36c1c8088..edb6bcbf9 100644
--- a/data/posters/asia-india-uttarakhand.html
+++ b/data/posters/asia-india-uttarakhand.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/asia-india-west-bengal.html b/data/posters/asia-india-west-bengal.html
index 21571eee4..bf86f019d 100644
--- a/data/posters/asia-india-west-bengal.html
+++ b/data/posters/asia-india-west-bengal.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/brazil.html b/data/posters/brazil.html
index c5d034725..f57ef2e18 100644
--- a/data/posters/brazil.html
+++ b/data/posters/brazil.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/central-africa.html b/data/posters/central-africa.html
index 0ff9d1b97..dbcc4d1e7 100644
--- a/data/posters/central-africa.html
+++ b/data/posters/central-africa.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/deaf.html b/data/posters/deaf.html
index d292aec1b..895714e6c 100644
--- a/data/posters/deaf.html
+++ b/data/posters/deaf.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/east-africa.html b/data/posters/east-africa.html
index 3529c1c23..18be09e8c 100644
--- a/data/posters/east-africa.html
+++ b/data/posters/east-africa.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/europe.html b/data/posters/europe.html
index 395879d04..e3bfd8127 100644
--- a/data/posters/europe.html
+++ b/data/posters/europe.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/laos.html b/data/posters/laos.html
index 81dc0802b..99120598a 100644
--- a/data/posters/laos.html
+++ b/data/posters/laos.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/maghreb-egypt.html b/data/posters/maghreb-egypt.html
index 9bf1142dd..36940361e 100644
--- a/data/posters/maghreb-egypt.html
+++ b/data/posters/maghreb-egypt.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/mainland-se-asia-philippines.html b/data/posters/mainland-se-asia-philippines.html
index c78e2f383..ef3f148f8 100644
--- a/data/posters/mainland-se-asia-philippines.html
+++ b/data/posters/mainland-se-asia-philippines.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/middle-east-core.html b/data/posters/middle-east-core.html
index c15d889d5..66dc9d16f 100644
--- a/data/posters/middle-east-core.html
+++ b/data/posters/middle-east-core.html
@@ -194,7 +194,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -214,8 +214,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -286,15 +286,13 @@
-
-
-
-
diff --git a/data/posters/oceania-indonesia.html b/data/posters/oceania-indonesia.html
index 3479edbe8..148ffbf3a 100644
--- a/data/posters/oceania-indonesia.html
+++ b/data/posters/oceania-indonesia.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/southern-africa-islands.html b/data/posters/southern-africa-islands.html
index 1b519f434..818b284c1 100644
--- a/data/posters/southern-africa-islands.html
+++ b/data/posters/southern-africa-islands.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/sudan.html b/data/posters/sudan.html
index 4fad73687..a7375e018 100644
--- a/data/posters/sudan.html
+++ b/data/posters/sudan.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/uncovered-nas-a.html b/data/posters/uncovered-nas-a.html
index e3ad15a9c..fe0e0896e 100644
--- a/data/posters/uncovered-nas-a.html
+++ b/data/posters/uncovered-nas-a.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/uncovered-scatter.html b/data/posters/uncovered-scatter.html
index 3cc3eea59..3deb99bdb 100644
--- a/data/posters/uncovered-scatter.html
+++ b/data/posters/uncovered-scatter.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/data/posters/west-africa.html b/data/posters/west-africa.html
index 261e2c041..7e5b5f253 100644
--- a/data/posters/west-africa.html
+++ b/data/posters/west-africa.html
@@ -184,7 +184,7 @@
.hseries{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:14px;fill:#7E7562;letter-spacing:.01em}
.hseries-em{font-weight:700;fill:#6B4A78}
.hseries-dim{fill:#A79E8A}
- /* The site reference on its OWN line — Brief: "so that it is less wide". A
+ /* The site reference on its OWN line, so the series block is less wide. A
single long line was forcing the series block wider than the map. */
.hseries-dim2{font-family:Lato,'Segoe UI',system-ui,sans-serif;font-size:12px;
fill:#A79E8A;letter-spacing:.02em}
@@ -204,8 +204,8 @@
the map's width (~1100px); the band is now 1388px, so the type follows.
15px measures ~1263px — fills the band while keeping headroom over the width
estimator's error rather than sitting one glyph from overflow. */
- /* 13.5px bold. Brief: "this is too large, it should not span full width —
- there needs to be gaps." At 15px bold it measured 1396px of the 1448px band,
+ /* 13.5px bold. At full width it was too large: the line needs gaps at both
+ ends. At 15px bold it measured 1396px of the 1448px band,
i.e. touching both rules; 13.5 measures ~1256px and leaves ~96px of paper at
each end, so the line reads as SET INSIDE the band rather than filling it.
Bold + dark ink still carry the weight. */
@@ -276,15 +276,13 @@
-
-
-
-
diff --git a/internal/backend-dev-plugin.mjs b/internal/backend-dev-plugin.mjs
index b1ad5554b..1fa3f1a62 100644
--- a/internal/backend-dev-plugin.mjs
+++ b/internal/backend-dev-plugin.mjs
@@ -194,7 +194,7 @@ export function backendDevPlugin(root, env = process.env) {
name: 'dx-backend-dev',
apply: 'serve',
configureServer(server) {
- // ENGINE NOT RUNNING, QUIETLY (dx-shepherd, R500): with no backend process the proxy answered
+ // ENGINE NOT RUNNING, QUIETLY (R500): with no backend process the proxy answered
// 500 ECONNREFUSED, which every page showed as console errors. While a backend is down its routes get
// well-formed answers instead: /events streams ONE status event saying the engine is offline (the
// plugin renders its own "engine not running" state from it), anything else returns an empty JSON
diff --git a/internal/browser-slot.sh b/internal/browser-slot.sh
index 8ba711cbc..19a7a475f 100755
--- a/internal/browser-slot.sh
+++ b/internal/browser-slot.sh
@@ -168,7 +168,7 @@ done
# Everything busy: keep POLLING EVERY SLOT until the deadline, and report a timeout as UNMEASURED
# rather than as a verdict. This used to queue on slot 1 alone (flock -w on slot 1), so a slot that
-# freed up was never taken: measured 2026-09-25 (dx-shepherd), ten waiters were piled on slot 1 while
+# freed up was never taken: measured 2026-09-25, ten waiters were piled on slot 1 while
# slot 2 sat free, and with slot 1 held 12 s and slot 2 freed at ~3 s a caller waited 11.5 s — the
# two-slot semaphore had collapsed into ONE queue. Polling takes the first slot that frees (~4 s in
# the same test). Trade-off, accepted: polling is not first-come-first-served, so under heavy
diff --git a/internal/check-approx-pin-note.mjs b/internal/check-approx-pin-note.mjs
index e6f3bd90c..007a5a18f 100644
--- a/internal/check-approx-pin-note.mjs
+++ b/internal/check-approx-pin-note.mjs
@@ -30,7 +30,7 @@ check('a GeoJSON feature is matched to rows on the same point', colocatedWith(id
check('a lone point shares with nobody', colocatedWith(idx, rows[3]).length === 0, colocatedWith(idx, rows[3]))
check('a row without a position is ignored', colocatedWith(idx, rows[4]).length === 0, colocatedWith(idx, rows[4]))
// A click hands over the RENDERED feature: the engine rebuilt its geometry from tile coordinates, so it is
-// near the roster point but not equal to it: ~0.001 degree at low zoom (rega, row 46, a shared point that never matched).
+// near the roster point but not equal to it: ~0.001 degree at low zoom (a browser check, row 46: a shared point that never matched).
const rendered = { type: 'Feature', properties: { name: 'Koraga' }, geometry: { type: 'Point', coordinates: [75.2486, 12.8431] } }
check('a rendered (tile-rounded) feature still finds its co-located groups', colocatedWith(idx, rendered).sort().join() === 'Godda,Maila', colocatedWith(idx, rendered))
// The same people in two countries: the nearest roster row wins, not the first.
@@ -39,7 +39,7 @@ const renderedFar = { type: 'Feature', properties: { name: 'Koraga' }, geometry:
check('a repeated name resolves to the nearest roster point', colocatedWith(twin, renderedFar).join() === 'Other', colocatedWith(twin, renderedFar))
// The rows a map DRAWS are normalized people groups (name + latitude/longitude, no geometry), and every
// map built on useMapData must offer them to its legends: the prayer map did not, so its legends read the
-// raw API cache and neither the shared-point sentence nor the standing note appeared (rega, row 46 at 835ec1ac).
+// raw API cache and neither the shared-point sentence nor the standing note appeared (a browser check, row 46 at 835ec1ac).
const drawn = [{ name: 'A', latitude: 12.85, longitude: 75.25 }, { name: 'B', latitude: '12.85', longitude: '75.25' }]
const clickedA = { type: 'Feature', properties: { name: 'A' }, geometry: { type: 'Point', coordinates: [75.2504, 12.8497] } }
check('normalized rows (no geometry) index and match a clicked pin', colocatedWith(buildColocationIndex(drawn), clickedA).join() === 'B', colocatedWith(buildColocationIndex(drawn), clickedA))
diff --git a/internal/check-composite-embed-knobs.mjs b/internal/check-composite-embed-knobs.mjs
index 150ef38bd..d1f5d233a 100644
--- a/internal/check-composite-embed-knobs.mjs
+++ b/internal/check-composite-embed-knobs.mjs
@@ -111,8 +111,8 @@ if (!targets.length) {
// The token to hand the partner page is the one the tree already bakes into its own leaves: this
// gate must not invent a key, and a token that is not this tree's would 401 and look like our bug.
// The tree bakes no token since the auto engine (the repo ships none), so every tk case SKIPPED and every
-// provider case went UNMEASURED: a hollow PASS (rega, ded4b3c1). A seat that has a real public token passes
-// it as TEST_MAPBOX_TOKEN (as rega's checks do); otherwise a baked one is still used if a tree has it.
+// provider case went UNMEASURED: a hollow PASS (measured at ded4b3c1). A seat that has a real public token passes
+// it as TEST_MAPBOX_TOKEN (as the browser checks do); otherwise a baked one is still used if a tree has it.
const bakedToken = process.env.TEST_MAPBOX_TOKEN || (() => {
for (const b of manifest.bundles || []) {
for (const p of b.profiles || []) {
@@ -170,10 +170,10 @@ try {
lines.push(` · ${t.element} [${c.knob}] SKIPPED — no baked token in this tree to hand the host`)
continue
}
- // The composite's OWN profile rides with the knob under test (rega, 1a761741: gospel-resources,
+ // The composite's OWN profile rides with the knob under test (measured at 1a761741: gospel-resources,
// my-upg-100-list, regions-dashboard and two more drew no map under a knob-only config, because a
// multi-profile element needs to be told which profile is the composite). A knob still wins.
- // A composite that opens on a non-map view must be told to show its map (exp-shepherd: country-posters-mfe
+ // A composite that opens on a non-map view must be told to show its map (country-posters-mfe
// reads profile-config `view`), or there is no canvas to measure.
const VIEW = { 'country-posters-mfe': { view: 'map' } }
const cfg = JSON.stringify({ profile: t.profile, ...(VIEW[t.element] || {}), ...c.config(bakedToken) }).replace(/'/g, ''')
diff --git a/internal/check-composite-freshness.mjs b/internal/check-composite-freshness.mjs
index eb28a3513..41c431c11 100644
--- a/internal/check-composite-freshness.mjs
+++ b/internal/check-composite-freshness.mjs
@@ -11,7 +11,7 @@
*
* ★ WHY IT NOW REBUILDS AND COMPARES BYTES, NOT MTIMES (2026-09-25). The first version compared
* the newest child SOURCE mtime with the parent BUNDLE mtime. File times are not build facts:
- * a git merge or checkout rewrites sources with checkout-time mtimes, so rega's publish of
+ * a git merge or checkout rewrites sources with checkout-time mtimes, so a publish of
* beb13da3 stopped on "doxa-maps-spa / plugin-studio / stack-demo STALE vs gospel-resources /
* research-dashboard" although a rebuild reproduced the committed bytes exactly — and two of
* those parents mount their children BY TAG at runtime, so they compile none of the child in
@@ -61,7 +61,7 @@ const TREE = join(ROOT, 'public', TREE_NAME)
const argv = process.argv.slice(2)
const oi = argv.indexOf('--only')
const ONLY = oi >= 0 && argv[oi + 1] ? new Set(argv[oi + 1].split(',')) : null
-// NOT ONLY COMPOSITES (rega, 2026-09-25): a library change merged into main reached prayer-walk-planner,
+// NOT ONLY COMPOSITES (measured 2026-09-25): a library change merged into main reached prayer-walk-planner,
// which composes nothing, so this gate could not see it was stale. --all checks EVERY bundle; --bundles a,b
// checks those (the landing precondition passes the ones a landing can have changed).
const ALL = argv.includes('--all')
diff --git a/internal/check-composite-interop.mjs b/internal/check-composite-interop.mjs
index 33248dea6..291fbac11 100644
--- a/internal/check-composite-interop.mjs
+++ b/internal/check-composite-interop.mjs
@@ -26,7 +26,7 @@
*
* NOT A SUBSTITUTE FOR A BROWSER. Both ends existing is necessary, not sufficient: UPG-100's
* select-zone listener exists and still loses the first click, because the lazy Map pane attaches it
- * too late (rega, 2026-09-26). The runtime half is check:gallery-embed's `linked` phase.
+ * too late (measured 2026-09-26). The runtime half is check:gallery-embed's `linked` phase.
*
* NEGATIVE-TESTED (2026-09-26, main 521f8b18, PASS with 17 links and the 3 LATE_KNOWN sites), each FAILS:
* a receiver renamed in source ('map-filtered' -> 'map-filter' in research-map-plus-grid.vue);
diff --git a/internal/check-composite-token-url.mjs b/internal/check-composite-token-url.mjs
index 3495c1187..1757c7843 100644
--- a/internal/check-composite-token-url.mjs
+++ b/internal/check-composite-token-url.mjs
@@ -19,7 +19,7 @@
* `tk` to a baked-in child, at production stage. See the comment at the scan below.
*
* Source-level and headless BY DESIGN: the behavioural twin (check:composite-embed-knobs) needs a
- * browser and only rega may run one. Exit 0 pass · 1 fail.
+ * browser, and this gate runs without one. Exit 0 pass · 1 fail.
*/
import { readFileSync, existsSync } from 'node:fs'
import { resolve, dirname, join } from 'node:path'
diff --git a/internal/check-composites-mount.mjs b/internal/check-composites-mount.mjs
index 656135e59..ebcfb7cf7 100644
--- a/internal/check-composites-mount.mjs
+++ b/internal/check-composites-mount.mjs
@@ -10,7 +10,7 @@
* and Simple Research, both in the Research Gallery). Every structural gate passed. This gate runs
* the thing that failed: the composite's own setup, and its mounted hooks.
*
- * HOW. No browser (fleet policy: only rega launches one). Vite loads each composite .vue through
+ * HOW. No browser (by design: this gate runs headless). Vite loads each composite .vue through
* ssrLoadModule with the repo's alias and the same vue({ customElement: true }) plugin, and
* @vue/runtime-core mounts it on a no-op renderer. The SSR compile gives the component an
* ssrRender rather than a render, so the renderer draws nothing and no CHILD is set up: this
diff --git a/internal/check-element-bootstrap.mjs b/internal/check-element-bootstrap.mjs
index 0880c25f4..f8336281d 100644
--- a/internal/check-element-bootstrap.mjs
+++ b/internal/check-element-bootstrap.mjs
@@ -12,7 +12,7 @@
*
* Nothing throws, because the t() shim falls back to its key. So it reads as "a few strings not
* translated yet" and it survived in country-posters, key-cities, gospel-resources, cities-internet and
- * my-upg-100-list simultaneously — confirmed independently by regions-plugin, who censused all 19 entry
+ * my-upg-100-list simultaneously — confirmed independently by a census of all 19 entry
* files and found the same five and no sixth.
*
* ★ AND A CENSUS THAT COUNTED FUNCTION BODIES SAW FOUR OF SIXTEEN. That is why this gate greps for the
diff --git a/internal/check-embed-url-absolute.mjs b/internal/check-embed-url-absolute.mjs
index bb0f2546d..b18a2bb6d 100644
--- a/internal/check-embed-url-absolute.mjs
+++ b/internal/check-embed-url-absolute.mjs
@@ -4,7 +4,7 @@
*
* THE DEFECT (2026-09-28, found testing live): the link copied from Simple Research was
* `research-map-plus-grid/research-map-plus-grid/index.html` while the page was
- * `http://127.0.0.1:5192/#f=…` — "the perfect example of how embeddability is not working".
+ * `http://127.0.0.1:5192/#f=…`, a clear case of an embed that could not work.
*
* WHY IT SURVIVED SO LONG, and it is the reason this is a gate rather than a fix: a relative share link
* WORKS WHEN CLICKED. The browser resolves it against the page you copied it from, so the person testing
diff --git a/internal/check-facet-changes-map.mjs b/internal/check-facet-changes-map.mjs
index ee9af37fb..40194f67a 100644
--- a/internal/check-facet-changes-map.mjs
+++ b/internal/check-facet-changes-map.mjs
@@ -196,7 +196,7 @@ const run = async () => {
const f = __srcFeatures(m, 'rd-bubbles'); return !!(f && f.length > 0);
})()`, { timeout: 90000 })
} catch (e) {
- // ★ DISTINGUISH "I CANNOT MEASURE THIS ENGINE" FROM "THE PRODUCT IS BROKEN".
+ // ★ DISTINGUISH "THIS ENGINE CANNOT BE MEASURED HERE" FROM "THE PRODUCT IS BROKEN".
// This gate reads the source's CURRENT GeoJSON off `_data`, a private Mapbox internal. MEASURED
// on one dashboard, one build, only the engine differing, by calling the app's own setData() to
// shrink 2107 features to 5:
diff --git a/internal/check-frozen-labels.mjs b/internal/check-frozen-labels.mjs
index a7e3b7893..c01c6f64a 100644
--- a/internal/check-frozen-labels.mjs
+++ b/internal/check-frozen-labels.mjs
@@ -38,7 +38,7 @@ import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs'
import { join, relative, resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
import { TREE_NAME } from './_tree-name.mjs'
-// ★ SHARED WITH check:hardcoded-english (regions-plugin). Two gates must agree about WHICH files are
+// ★ SHARED WITH check:hardcoded-english (the same file list). Two gates must agree about WHICH files are
// in scope even when they disagree about what they find in them; a second copy would drift on exactly
// the pair-form / transitive / cycle details below, and the drift would be silent.
import { effectiveStages, stageReason } from './lib/effective-stage.mjs'
@@ -73,7 +73,7 @@ function findFrozen(ast, aliases) {
if (name && (TRANSLATORS.has(name) || aliases.has(name))) {
// tStatic(path, EXPLICIT_LOCALE) — the caller pinned it deliberately.
const pinned = name === 'tStatic' && node.arguments.length > 1
- // ★ tStatic IS NEVER LIVE, WHEREVER IT SITS (exp, 2026-09-28). It resolves the locale via
+ // ★ tStatic IS NEVER LIVE, WHEREVER IT SITS (2026-09-28). It resolves the locale via
// getRuntimeLocale(), which reads a PLAIN window property — not a Vue ref — so a computed()
// wrapping it has NO reactive dependency and never invalidates. computed(() => tStatic(x))
// is strictly WORSE than the naked call: it looks like the fix, so nobody looks again.
@@ -153,7 +153,7 @@ const DEAD_LOCALE_GETTER = /\b(getRuntimeLocale|detectLocale|localeFromUrl)\s*\(
/**
* Is offset `at` inside the parentheses of a computed()/watch()/watchEffect() that tracks the locale?
*
- * ⚠ BRACE DEPTH, NOT A LOOKBACK WINDOW (gospel, GOS-FROZEN-SR). The first version of this asked
+ * ⚠ BRACE DEPTH, NOT A LOOKBACK WINDOW (GOS-FROZEN-SR). The first version of this asked
* whether a wrapper appeared in the preceding 260 characters. gospel hit exactly this in GiDrawer.vue
* — the enclosing `computed(` opens at line 35 and the call sites are at 95-100 — and reported SIX
* false positives on working code, nearly "fixing" it. Measured on the same shape here: 2,600
@@ -206,7 +206,7 @@ function findStoredTreeFreeze(code) {
// function RETURNS A STRUCTURE whose values come from the translator — an options object or a
// node list — which a caller then stores. So require the translator call to sit inside a
// returned object/array literal, not merely somewhere in the body.
- // ★ THE MECHANISM IS "BUILT CORRECTLY, THEN PARKED", not "built once at setup" (gospel, on
+ // ★ THE MECHANISM IS "BUILT CORRECTLY, THEN PARKED", not "built once at setup" (found on
// upg100's legendOpts). That function re-reads t() correctly on EVERY call — its own comment
// says the function shape is deliberate — and the freeze is one level out: the RESULT is
// assigned into a ref and nothing re-fills it. A rule that only looked for a translator outside
@@ -282,7 +282,7 @@ function findDeadGetterComputed(code) {
}
/**
- * SHAPE 3 — labels evaluated inside a provide() literal (gospel, GOS-FROZEN-SR; real in GiCombos.vue).
+ * SHAPE 3 — labels evaluated inside a provide() literal (GOS-FROZEN-SR; real in GiCombos.vue).
*
* provide('dashboardConfig', { facets: { access_level: { label: T('…') } } })
*
@@ -388,7 +388,7 @@ const CASES = [
['GOOD inside an arrow', () => scanSource("const { t } = useI18n()\nconst f = () => t('a.b')").length, 0],
['GOOD tStatic with explicit locale', () => scanSource("const x = tStatic('a.b', 'en')").length, 0],
['GOOD watch(() => t())', () => scanSource("const { t } = useI18n()\nwatch(src, () => t('a.b'))").length, 0],
- // ★ exp's false negative: a computed cannot make tStatic live.
+ // ★ A known false negative: a computed cannot make tStatic live.
['BAD computed(() => tStatic()) is STILL frozen', () => scanSource("const X = computed(() => tStatic('a.b'))").length, 1],
// A function BODY re-reads the global on every call (useOptionalT:74 returns such an arrow),
// so it is NOT frozen. Only a reactive wrapper caches it. I had this case backwards at first.
diff --git a/internal/check-gospel-embed-contract.mjs b/internal/check-gospel-embed-contract.mjs
index 460568b55..999ff235c 100644
--- a/internal/check-gospel-embed-contract.mjs
+++ b/internal/check-gospel-embed-contract.mjs
@@ -171,7 +171,7 @@ try {
the data was right and the feature was dead. */
/* ⚠ THE NAME, CASE-FOLDED, ANYWHERE IN THE CARD. This asserted `text.includes(slug.split('-')[0])`
— "abai" against a rendered "Abai Sungai" — and reported a false negative on a card that was
- rendering correctly, which cost rega a round. A slug fragment is not the name; the roster has
+ rendering correctly, which cost a review round. A slug fragment is not the name; the roster has
the name, so the roster is what it compares. */
const anyRow = (JSON.parse(readFileSync(resolve(PUBLIC, TREE_NAME, 'assets/tables/doxa-people-groups.json'), 'utf8')).rows || [])
.find((r) => r.slug && r.mapped)
diff --git a/internal/check-gospel-engine-contract.mjs b/internal/check-gospel-engine-contract.mjs
index 050f5db62..2af07629d 100644
--- a/internal/check-gospel-engine-contract.mjs
+++ b/internal/check-gospel-engine-contract.mjs
@@ -2,7 +2,7 @@
* check-gospel-engine-contract.mjs — the map must use the engine it was ASKED for, or say nothing
* at all. Never a different one.
*
- * THE DEFECT THIS IS WRITTEN AGAINST (regions' C3 read + upg100's addendum, 2026-09-26).
+ * THE DEFECT THIS IS WRITTEN AGAINST (the C3 review and its addendum, 2026-09-26).
* resources-map resolved its engine as `engineGlobal(provider) || window.mapboxgl`. engineGlobal
* already defaults to mapbox, so that fallback could only fire for provider 'maplibre' — and then
* it returned MAPBOX. A page that chose the keyless engine silently got the one that needs a
diff --git a/internal/check-gospel-english-leaks.mjs b/internal/check-gospel-english-leaks.mjs
index 06428bf12..96b9a3eb2 100644
--- a/internal/check-gospel-english-leaks.mjs
+++ b/internal/check-gospel-english-leaks.mjs
@@ -1,7 +1,7 @@
/**
* check-gospel-english-leaks.mjs — a translated key must not render in English.
*
- * THE METHOD, from rega by way of dx-shepherd. A string is a LEAK when the catalogue has a
+ * THE METHOD, taken from the browser review. A string is a LEAK when the catalogue has a
* DIFFERENT value for the locale and the page still shows the English one. That is a render
* or wiring fault, and it is a different thing from an untranslated string, which is a
* catalogue gap. Only the first is this check's business.
@@ -75,7 +75,7 @@ try {
/* ═══ WHOLE LABELS, NOT SUBSTRINGS — the third correction, and the last ═══════════
* Substring matching over the rendered blob reported keys that were never rendered at
* all: "Language" matched inside the DATA — the people-group language "Sign Language" —
- * and "Region" inside a region name. Those are exactly the data strings rega's method
+ * and "Region" inside a region name. Those are exactly the data strings the method
* excludes, and no amount of length filtering separates a label from a word that
* happens to sit inside one.
* So the unit is an ELEMENT'S OWN LABEL: the trimmed text a leaf element renders. A
diff --git a/internal/check-gospel-rtl-shaping.mjs b/internal/check-gospel-rtl-shaping.mjs
index 302360830..5b5c08c00 100644
--- a/internal/check-gospel-rtl-shaping.mjs
+++ b/internal/check-gospel-rtl-shaping.mjs
@@ -39,7 +39,7 @@ import { fileURLToPath } from 'node:url'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const PORT = Number(process.env.RTL_SHAPE_PORT || 5393)
const POISON = process.argv.includes('--poison')
-// ⚠ PARAMETERISED, not forked. dx-shepherd routed this gate to the other RAW-map owners
+// ⚠ PARAMETERISED, not forked. This gate was routed to the other RAW-map owners
// (cities-internet, key-cities, upg-100-list, RegionCountryMap) — copying it would give each of
// them their own drifting copy of the pan-first logic and the poison arm, which are the two parts
// that took corrections to get right. The leaf is the only thing that differs.
diff --git a/internal/check-gospel-set-fit.mjs b/internal/check-gospel-set-fit.mjs
index 733b07cbc..a9a58c6ae 100644
--- a/internal/check-gospel-set-fit.mjs
+++ b/internal/check-gospel-set-fit.mjs
@@ -6,7 +6,7 @@
* to zoom out past the point where ONE WORLD fills the canvas WIDTH. That puts a hard floor under the
* zoom at log2(canvasWidth/512) — and on a WIDE, SHORT figure that floor is too close for the
* drawing's own height, so the outermost groups fall outside the frame. minZoom does not help; the
- * width constraint wins. rega measured it at 1440: 54 groups outside in ar and 97 in en, which is
+ * width constraint wins. A browser check measured it at 1440: 54 groups outside in ar and 97 in en, which is
* what proved it was the WIDTH and never RTL.
*
* WHAT IT ASSERTS. For every layout the charts actually get, the drawing's vertical extent at the
@@ -45,11 +45,11 @@ export function neededHeightPx(extent, fraction, canvasWidth) {
return worldFraction * 512 * Math.pow(2, floorZoom(canvasWidth))
}
-// The canvases the charts are actually given: rega's measured figures at 1440 and 1280, the embed
+// The canvases the charts are actually given: the measured figures at 1440 and 1280, the embed
// card, and two narrow ones so a phone cannot regress unnoticed.
const LAYOUTS = [
- { name: '1440 board (rega measured)', w: 796, h: 249 },
- { name: '1280 board (rega measured)', w: 636, h: 220 },
+ { name: '1440 board (measured)', w: 796, h: 249 },
+ { name: '1280 board (measured)', w: 636, h: 220 },
{ name: 'embed card', w: 1198, h: 560 },
{ name: 'tablet', w: 380, h: 300 },
{ name: 'phone', w: 340, h: 240 },
@@ -77,13 +77,13 @@ for (const chart of CHARTS) {
}
// ★ NEGATIVE CONTROL. The 0.17 default is the value that was measured FAILING on the page, so if
-// this arm does not fail the calculation is not measuring what rega measured and a pass means
+// this arm does not fail the calculation is not measuring what the browser measured and a pass means
// nothing. Asserted on the tightest real layout.
const poison = neededHeightPx(CENTERED_EXTENT, 0.17, 796)
ok(
'NEG CONTROL: the old 0.17 fraction still does NOT fit 796x249',
poison > 249 - 2 * FIT_PADDING,
- `0.17 needs ${poison.toFixed(0)}px of ${249 - 2 * FIT_PADDING}px — the defect rega measured`,
+ `0.17 needs ${poison.toFixed(0)}px of ${249 - 2 * FIT_PADDING}px — the measured defect`,
)
// The two charts must share one footprint, or the same population reads as a different size when a
diff --git a/internal/check-grid-image-loading.mjs b/internal/check-grid-image-loading.mjs
index 24158d752..e7f4c8b86 100644
--- a/internal/check-grid-image-loading.mjs
+++ b/internal/check-grid-image-loading.mjs
@@ -2,13 +2,13 @@
/**
* check-grid-image-loading — the people-group cards must not fetch 24 photos during boot.
*
- * THE MEASUREMENT (rega, SR-LOAD on 21ebb4f26): a cold load of Simple Research downloaded 24
+ * THE MEASUREMENT (SR-LOAD on 21ebb4f26): a cold load of Simple Research downloaded 24
* people-group photos, 5.3 MB, DURING BOOT — competing with the map engine and the API data on the
* same connection. Nothing was wrong with any single image; there was simply no instruction about
* WHEN to fetch them, so the browser fetched them all at once.
*
* ★ WHY A GATE AND NOT JUST THE FIX. This component is being MERGED with the regions list right now
- * (a settled decision, regions-plugin building it), and a merge rewrites markup. Four attributes on
+ * (a settled decision, built by the regions plugin), and a merge rewrites markup. Four attributes on
* one
are exactly the kind of thing that survives a review and not a rewrite — and losing them
* is invisible: the page still works, it just costs 5.3 MB again on every cold load.
*
@@ -36,7 +36,7 @@ if (!m) {
const tag = m[0]
if (!/:loading=/.test(tag)) {
fails.push('the card image has no loading attribute, so every photo is fetched during boot — '
- + 'rega measured 24 of them, 5.3 MB, competing with the map and the API data.')
+ + 'a cold load measured 24 of them, 5.3 MB, competing with the map and the API data.')
}
if (!/decoding="async"/.test(tag)) fails.push('the card image does not decode off the main thread (decoding="async").')
if (!/\bwidth=/.test(tag) || !/\bheight=/.test(tag)) {
diff --git a/internal/check-hardcoded-english.mjs b/internal/check-hardcoded-english.mjs
index 0a1a6b7c5..bb5830c52 100644
--- a/internal/check-hardcoded-english.mjs
+++ b/internal/check-hardcoded-english.mjs
@@ -24,8 +24,8 @@
* by whether the lookup it guards actually works. `msg !== 'messages.engineMissing' ? msg : 'English'`
* is treated as a fallback — but if the key is looked up with the wrong prefix, the lookup ALWAYS
* misses and the English arm becomes the NORMAL path, in every locale, while this gate stays quiet.
- * That is exactly what exp-shepherd found in cities-internet after I triaged the same line as "not a
- * leak". A hardcoded-English scan cannot see a misconfigured lookup; check:i18n-keys-exist and a
+ * That is exactly what a later review found in cities-internet after the same line had been triaged as
+ * "not a leak". A hardcoded-English scan cannot see a misconfigured lookup; check:i18n-keys-exist and a
* locale render are what catch that. Treat a guarded fallback as "not a leak HERE", never as "this
* string is not reaching users".
*
@@ -59,7 +59,7 @@ const ALLOW = [
{ why: 'HTML fragments: these plugins build popup markup in template literals, so a quasi is often '
+ 'a tag, or the seam between two attributes ("\" alt=\"" / "\" loading=\"lazy\">")',
test: (s) => /<\/?[a-zA-Z][^>]*>?/.test(s)
- // dir and lang join the list (exp, END-EXP-SR-DIRLANG): `'" dir="'` is the seam between two
+ // dir and lang join the list (SR-DIRLANG): `'" dir="'` is the seam between two
// attributes in a print page assembled by concatenation, and every RTL-aware page writes both.
// They are the same class as class= and href= — attribute NAMES, not text a reader sees.
|| /\b(class|href|src|alt|loading|width|height|style|id|target|rel|dir|lang)\s*=/.test(s)
@@ -91,7 +91,7 @@ const ALLOW = [
test: (s) => /^[a-z-]+\($/.test(s)
|| /^[,)\s]*[a-z-]+\([^)]*\)[,)\s]*$/.test(s)
|| /^[,)\s]+$/.test(s) },
- // ★ DECLARATION SEAMS, the other half of the same split (exp, I18N-EXP-PLAN). Splitting
+ // ★ DECLARATION SEAMS, the other half of the same split (I18N-EXP-PLAN). Splitting
// `width:${w}px;height:${h}px` leaves the quasi "px;height:" — a seam BETWEEN two declarations,
// carrying the tail of one value and the head of the next property. It has a colon but no value
// and no brace, so every CSS shape above misses it. exp measured these as false leaks in
@@ -351,7 +351,7 @@ function isDataComparison(node, parent) {
// resource not found means NOT FOUND in the pools checked" is a sentence that happens to be used as
// a key, and that is a real leak — gospel found twelve defects hiding in exactly that kind of
// already-classified bucket. Anything with sentence punctuation stays loud whatever its value is.
-// ★ REGION IDENTITIES, EXEMPT ONLY WHILE THEY ARE TRANSLATABLE (studio's judgement, R26).
+// ★ REGION IDENTITIES, EXEMPT ONLY WHILE THEY ARE TRANSLATABLE (R26).
// legend-tree's REGION_OF maps a zone slug to a region NAME, and that name is an identity: node ids
// derive from it, and every surface that shows one translates it at render through REGION_KEY —
// upg-100-list.vue:440 `REGION_KEY[english] ? t(\`poster.${…}\`) : english`, poster-wall.vue:129 the
@@ -1009,7 +1009,7 @@ const RENDERED = { africa: 'A sentence the reader actually sees here', asia: 'An
// names, values that are prose a reader sees: the keys must STILL count, because this is a
// label table, not a join table. Without this case the allData guard can be removed and every
// test still passes — measured by poisoning it.
- // ★ REGION IDENTITIES (studio, R26): exempt ONLY while REGION_KEY names them. A region added
+ // ★ REGION IDENTITIES (R26): exempt ONLY while REGION_KEY names them. A region added
// without a key falls through `|| english` and renders English in eleven locales — the defect
// upg100 already shipped once with Americas and Europe. The conditional IS the rule.
{
@@ -1068,7 +1068,7 @@ const a = greeting + 'Welcome to the prayer map'
`
ok(scanSfc(CAT, 'concat.vue').some((f) => f.text === 'Welcome to the prayer map'),
'COUNTS a sentence built by CONCATENATION — only an equality test means "compared against data"')
- // ★ exp's CSS DECLARATION SEAMS (I18N-EXP-PLAN), tested on the SHAPE rather than through a fixture.
+ // ★ CSS DECLARATION SEAMS (I18N-EXP-PLAN), tested on the SHAPE rather than through a fixture.
// A seam like "px;height:" only exists as a separate string if a quasi is judged alone, and this
// gate deliberately judges a split template literal as ONE string — so a .vue fixture can never
// produce one, and an assertion written that way passes whether or not the rule exists. I wrote
@@ -1081,7 +1081,7 @@ const a = greeting + 'Welcome to the prayer map'
'prose ending in a colon is NOT — the seam shape needs a semicolon-separated declaration')
ok(!allowedBy('Pools checked; nothing found:'),
'prose with a semicolon AND a colon is NOT — the segments must be property:value pairs')
- // ★ exp's HTML ATTRIBUTE SEAM (END-EXP-SR-DIRLANG). `''`
+ // ★ HTML ATTRIBUTE SEAM (SR-DIRLANG). `''`
// leaves the quasi `" dir="`, an attribute seam rather than a declaration seam. dir and lang were
// the only standard attributes missing from the HTML shape. Asserted on the shape for the same
// reason as the CSS seam: the gate judges a split literal as ONE string, so no fixture reaches it.
diff --git a/internal/check-instance-config-keys.mjs b/internal/check-instance-config-keys.mjs
index 90e280dfd..18c7639c3 100644
--- a/internal/check-instance-config-keys.mjs
+++ b/internal/check-instance-config-keys.mjs
@@ -1,7 +1,7 @@
/**
* check-instance-config-keys.mjs — a preset's profile-config keys must be keys the profile READS.
*
- * ★ THE DEFECT (rega RQ20): people-groups-grid's "driven" preset declares "show-search":"false" and
+ * ★ THE DEFECT (RQ20): people-groups-grid's "driven" preset declares "show-search":"false" and
* "show-filters":"false", and the page renders the search box and the filters bar anyway. Nothing
* errored — 0 console errors — because nothing was wrong at runtime. The key simply never reached
* the component:
diff --git a/internal/check-leaf-engine-per-provider.mjs b/internal/check-leaf-engine-per-provider.mjs
index 3fb82dbb9..ed9dde948 100644
--- a/internal/check-leaf-engine-per-provider.mjs
+++ b/internal/check-leaf-engine-per-provider.mjs
@@ -2,7 +2,7 @@
/**
* check-leaf-engine-per-provider — a leaf loads the engine its PROVIDER asks for, and no other.
*
- * THE BUG (card BUG-LEAF-PAGES-PRELOAD-MAPBOX-EVEN-UNDER-MAPLIBRE; measured by exp-shepherd at
+ * THE BUG (card BUG-LEAF-PAGES-PRELOAD-MAPBOX-EVEN-UNDER-MAPLIBRE; measured at
* 577149af). generate-tree chose a leaf's engine peer at BUILD time, from the instance config, and
* baked it into as static tags: mapbox-gl.css, the geocoder css, mapbox-gl.js and the geocoder
* js, all from api.mapbox.com. The provider is chosen at RUNTIME (resolveMapProvider:
diff --git a/internal/check-leaf-english-leaks.mjs b/internal/check-leaf-english-leaks.mjs
index 527215966..0b2b6ab62 100644
--- a/internal/check-leaf-english-leaks.mjs
+++ b/internal/check-leaf-english-leaks.mjs
@@ -2,7 +2,7 @@
/**
* check-leaf-english-leaks — a translated key must not render in English, on ANY leaf.
*
- * THE METHOD is rega's, by way of dx-shepherd, and is already proven in
+ * THE METHOD comes from the browser review and is already proven in
* check-gospel-english-leaks.mjs. A string is a LEAK when the catalogue has a DIFFERENT value
* for the locale and the page still shows the English one. That is a render or wiring fault,
* and it is a different thing from an untranslated string, which is a catalogue gap.
@@ -145,7 +145,7 @@ for (const t of TARGETS) {
// {value:'unengaged', label:'Unengaged'}, 2 distinct values, 100% populated, and
// dashboard.config.js:132 counts 2,081 Unengaged / 27 Engaged. They are API VALUES
// that happen to equal a catalogue string.
- // That is the population rega's method excludes by name ("DATA, the people-group and
+ // That is the population the method excludes by name ("DATA, the people-group and
// place names that come from the publishers"). Whole-label matching stops a substring
// impersonating a label; it cannot stop a DATA CELL rendering the same text. So the
// table body is excluded by ROLE, the way prose already is.
diff --git a/internal/check-legend-data-contract.mjs b/internal/check-legend-data-contract.mjs
index c17822cb3..21eb505cd 100644
--- a/internal/check-legend-data-contract.mjs
+++ b/internal/check-legend-data-contract.mjs
@@ -7,7 +7,7 @@
* fmtCount }. There is no `rows`. Two plugins independently read `legend.rows` anyway, and because
* JavaScript answers `undefined` rather than complaining, each failure wore a different costume:
*
- * - countries-map: Export poster THREW (exp-shepherd's NE-17, fixed in d6916e05e)
+ * - countries-map: Export poster THREW (NE-17, fixed in d6916e05e)
* - research-map: provide('legendRows', legend.rows) provided undefined; the poster fallback
* `legend?.rows?.value || []` could only ever be []; and the packet's legend slot was
* `rows: legend?.rows?.value || []` with no second source, so that poster printed NO legend at
diff --git a/internal/check-legend-logical-insets.mjs b/internal/check-legend-logical-insets.mjs
index b365b4484..d8c1cfdf4 100644
--- a/internal/check-legend-logical-insets.mjs
+++ b/internal/check-legend-logical-insets.mjs
@@ -5,7 +5,7 @@
* WHY: the shared legend (.stl-panel, its reopen button, the detail buttons, the tree-guide hairlines) used
* `left: 8px`. MapToolbar uses `inset-inline-end`, which mirrors under dir="rtl"; a physical `left` does not.
* So in Arabic the controls moved left onto a legend that stayed left, on three production maps at once
- * (Simple Research, Prayer Progress, UPG-100; rega's survey at 52eeb0db). The fix is inset-inline-start /
+ * (Simple Research, Prayer Progress, UPG-100; a browser survey at 52eeb0db). The fix is inset-inline-start /
* inset-inline-end; this gate keeps a physical left/right from coming back.
*
* WHAT IT READS: every CSS declaration in library/components/legends/*.vue (comments stripped). A
diff --git a/internal/check-legend-top-offset.mjs b/internal/check-legend-top-offset.mjs
index 42140d365..8c93c48c1 100644
--- a/internal/check-legend-top-offset.mjs
+++ b/internal/check-legend-top-offset.mjs
@@ -12,7 +12,7 @@
*
* ★ BUT showsFlyTools() DESCRIBES THE LEGEND TYPE, NOT WHETHER THE TOOLBAR EXISTS. Fly + Clusters are
* leaf-only: the composite — which is what a reader calls "Simple Research" — passes legendTools:false,
- * so the toolbar is never drawn there and the 56px reserved a slot for nothing. rega measured it at
+ * so the toolbar is never drawn there and the 56px reserved a slot for nothing. A browser check measured it at
* 1440x900 on main e1d0bc20: the band from the map's top edge (y 44) to the legend card (y 100) is 56px
* of empty map on both tabs, no toolbar anywhere in the strip.
*
diff --git a/internal/check-list-selection.mjs b/internal/check-list-selection.mjs
index e3514afc1..390a2b170 100644
--- a/internal/check-list-selection.mjs
+++ b/internal/check-list-selection.mjs
@@ -44,11 +44,11 @@ const MISSING = [
'asia-china-xinjiang-uyghur-autonomous-region',
'asia-india-bihar',
]
-// asia-india-madhya-pradesh WAS here and is now FILED. upg100 hit this arm while filing it, and
-// did the right thing with it: they reported the red instead of editing my expectation to make
-// their change green — "editing someone else's pinned expectation to make my own change green is
-// precisely the move that hollows out a guard". dx-shepherd then ruled that their data and this
-// fixture land TOGETHER, which is the only ordering where neither of us is red in between.
+// asia-india-madhya-pradesh WAS here and is now FILED. The filing change hit this arm, and the
+// red was reported instead of the pinned expectation being edited to turn the change green: editing
+// another owner's pinned expectation to make one's own change green is precisely the move that hollows
+// out a guard. The data and this fixture landed TOGETHER, the only ordering where neither side is red
+// in between.
ok(leavesOf(TREE[0]).map((l) => l.id).join(',') === 'z1,z2,z3', 'leavesOf walks NESTED children, not one level')
@@ -85,7 +85,7 @@ const naive = TREE // what a region-grouped tree gives you, unaugmented
ok(!zoneIdsIn(naive).has('asia-china-xinjiang-uyghur-autonomous-region'),
'NEG CONTROL: the unaugmented tree really does omit xinjiang, so the bucket is not decoration')
-// ── a region sweep is NOT a zone sweep (gospel, END-GOS-VLG2) ───────────────────────────────────
+// ── a region sweep is NOT a zone sweep (gospel-resources) ───────────────────────────────────
// ★ The consequence of the bucket that neither of us should leave implicit: ticking every REGION
// still does not select every ZONE, because the unfiled zones have no region BY DEFINITION.
// Nothing on screen would say so — the reader just gets a smaller total, which is the exact
@@ -113,7 +113,7 @@ ok(selectedId(leavesOf(EMPTYZONE[0])[0]) === 'z9', 'and it still emits its own i
ok(withUnassigned(EMPTYZONE, ['z9']).length === EMPTYZONE.length,
'presence is by ID, not by member count, so an unresolvable zone is not ALSO dumped in the bucket')
-// ── the gap is REAL TODAY, not just real in my fixture (gospel, END-GOS-VLG3) ───────────────────
+// ── the gap is REAL TODAY, not just real in a fixture (gospel-resources) ───────────────────
// ★ EVERY ASSERTION ABOVE RUNS AGAINST A FIXTURE. That proves the MODULE behaves, and it proves the
// fixture models a gap — it does not prove the gap still exists in the data we ship. So the negative
// control above could stay green forever while the bucket quietly became dead code, or while a FIFTH
@@ -148,7 +148,7 @@ ok(realGap.join(',') === MISSING.join(','),
realGap.join(',') === MISSING.join(',')
? 'and it is exactly the four this check names, so the fixture above models the shipped data rather than a story about it'
: `THE GAP MOVED — re-derive. shipped now: [${realGap.join(', ')}] but this check asserts: [${MISSING.join(', ')}]. A zone ADDED here is groups that just became unreachable; a zone REMOVED got filed and the fixture is stale. Either way the numbers in the commit body are no longer true.`)
-// ── the zones that got FILED stay filed (dx-shepherd RG12) ─────────────────────────────────────
+// ── the zones that got FILED stay filed (RG12) ─────────────────────────────────────
// The gap arms watch the BAD direction. Filing is the good one, and it is exactly as revertible:
// drop a key from zone-regions and those groups leave the region tree again, silently, with the
// bucket the only thing still carrying them. Two of these three were never visible to the gap arms
@@ -163,7 +163,7 @@ for (const z of FILED) {
ok(joinable.has('asia-china-xinjiang-uyghur-autonomous-region') && !filed.has('asia-china-xinjiang-uyghur-autonomous-region'),
'xinjiang specifically: joinable in admin-to-list, absent from zone-regions — its 100 groups are reachable ONLY through the bucket')
-// ── the id ambiguity that is masked by a data coincidence (gospel, END-GOS-VLGC) ────────────────
+// ── the id ambiguity that is masked by a data coincidence (gospel-resources) ────────────────
// ★ REGION IDS AND ZONE IDS SHARE ONE NAMESPACE. selectedId emits one bare string with no kind, and
// the two sets OVERLAP in the shipped data. gospel found it while wiring and I re-measured it here
// rather than taking the report: 33 zone ids, 7 region ids, intersection exactly {europe}, whose
diff --git a/internal/check-map-attribution.mjs b/internal/check-map-attribution.mjs
index 285817f5f..4d8c15335 100644
--- a/internal/check-map-attribution.mjs
+++ b/internal/check-map-attribution.mjs
@@ -2,7 +2,7 @@
/**
* check-map-attribution — the credit line names the basemap of the engine that actually drew the map.
*
- * WHY (licence credit, rega's row 28 at ccc2b1bb): addMapAttribution always credited "Mapbox ·
+ * WHY (licence credit, row 28 at ccc2b1bb): addMapAttribution always credited "Mapbox ·
* © OpenStreetMap". Under MapLibre the tiles are OpenFreeMap's (OpenMapTiles on OpenStreetMap), so
* gospel-resources, key-cities and cities-internet credited Mapbox, which served nothing, and omitted
* the OpenMapTiles credit. Headless: the real module against stand-in map classes and a minimal DOM.
diff --git a/internal/check-map-unmount-guard.mjs b/internal/check-map-unmount-guard.mjs
index f5e6a9fa7..d8d8c95f4 100644
--- a/internal/check-map-unmount-guard.mjs
+++ b/internal/check-map-unmount-guard.mjs
@@ -1,4 +1,4 @@
-/* check-map-unmount-guard — the fast, browser-free half of the unmount-race proof (by gospel-plugin,
+/* check-map-unmount-guard — the fast, browser-free half of the unmount-race proof (by the gospel-resources owner,
adopted into internal/ by the studio lane; the end-to-end half is check-map-unmount-mid-init.mjs).
Proves the guard by REPRODUCING the race against the real file: take the shipped source,
diff --git a/internal/check-mobile-gating.mjs b/internal/check-mobile-gating.mjs
index d3a52acfe..cdbbf5ac1 100644
--- a/internal/check-mobile-gating.mjs
+++ b/internal/check-mobile-gating.mjs
@@ -17,7 +17,7 @@
* (f) ProfileLoader stops mounting the notice, or the rule stops staying quiet inside the Gallery;
* (g) a flagged profile's element is mounted by neither ProfileLoader nor its own useScreenGate —
* dashboard-plus-grid defines its element without ProfileLoader, so its leaf carried
- * "desktop-only" and mounted the map on a phone anyway (rega, 390px).
+ * "desktop-only" and mounted the map on a phone anyway (measured at 390px).
* `--self-test` plants one bad case per rule and proves each can fail before a pass is trusted.
*/
import { readFileSync, existsSync, readdirSync } from 'node:fs'
diff --git a/internal/check-no-credentials-omit.mjs b/internal/check-no-credentials-omit.mjs
index e71ef1d7d..c69226460 100644
--- a/internal/check-no-credentials-omit.mjs
+++ b/internal/check-no-credentials-omit.mjs
@@ -2,7 +2,7 @@
/**
* check-no-credentials-omit.mjs — no data fetch in library/ or plugin-designs/ may use credentials:'omit'.
*
- * WHY (dx-shepherd, 2026-09-27): behind any login gate (basic auth, a session cookie, OIDC) the Research
+ * WHY (2026-09-27): behind any login gate (basic auth, a session cookie, OIDC) the Research
* Gallery said "Could not load Big Picture", because doxa-maps-spa fetched its SAME-ORIGIN manifest with
* credentials:'omit', so the gate's cookie never went and the request was refused. 'same-origin' (the fetch
* default) sends credentials only to the page's own origin: a cross-origin CDN or token service still
diff --git a/internal/check-no-silent-engine-substitution.mjs b/internal/check-no-silent-engine-substitution.mjs
index 9bdc45a99..c790343da 100644
--- a/internal/check-no-silent-engine-substitution.mjs
+++ b/internal/check-no-silent-engine-substitution.mjs
@@ -3,7 +3,7 @@
* check-no-silent-engine-substitution — a profile must never fall back to a DIFFERENT map engine than
* the one its provider asked for.
*
- * THE DEFECT, found by regions' C3 read and routed by dx-shepherd (END-SHEP-C3C, 2026-09-26):
+ * THE DEFECT, found by the C3 review (2026-09-26):
*
* const gl = engineGlobal(provider) || window.mapboxgl
*
@@ -72,7 +72,7 @@ function scan(text) {
// documented what they removed in a /* */ block whose second line begins with a BACKTICK:
// `engineGlobal(grProvider) || window.mapboxgl`. engineGlobal already defaults to mapbox, so
// The prefix test saw no comment marker, matched the quoted pattern, and reported gospel as the last
- // remaining offender at main 9df086e5. I relayed that to dx-shepherd as fact and it was wrong: the
+ // remaining offender at main 9df086e5. That was relayed as fact and it was wrong: the
// line number had also moved three times (1490 -> 1505 -> 1509) purely because their file grew, which
// is what made a stale card look like a live defect.
// ★ A GATE THAT FAILS ON THE EXPLANATION OF A FIX IS WORSE THAN NO GATE. It tells the one person who
diff --git a/internal/check-one-scroll-container.mjs b/internal/check-one-scroll-container.mjs
index 47a75dd77..8aa4c0214 100644
--- a/internal/check-one-scroll-container.mjs
+++ b/internal/check-one-scroll-container.mjs
@@ -21,7 +21,7 @@
* (2) is the half that matters over time: a fixed shell plus a plugin that adds .foo{min-height:700px}
* next month is the same bug again, and nobody would connect it to this.
*
- * Source-level and headless BY DESIGN. Only rega runs a browser here, and the browser proof is rega's
+ * Source-level and headless BY DESIGN. This gate runs no browser, and the browser proof is a separate
* scroll-container count. This is the cheap guard that keeps the class from coming back between runs.
* ★ THIS GATE IS RED ON PURPOSE AT LANDING, and is NOT wired into gates:pre yet. gospel-internet's
* .gb still carries min-height:640px; that fix belongs to its owner, not to me, and wiring a red gate
@@ -103,7 +103,7 @@ for (const bundle of readdirSync(DESIGNS)) {
//
// ★ THIS IS GATED BECAUSE IT WAS ALREADY PORTED ONCE AND ARRIVED SHORT. doxa-maps-spa's .dms-pane was
// copied from VerticalTabsLayout's .vtl-host -- its own comment says "porting the same proven shape" --
-// and took the first two lines. rega measured the result: 12 of 16 gallery tabs overflowing by exactly
+// and took the first two lines. A browser check measured the result: 12 of 16 gallery tabs overflowing by exactly
// the DX-life header height, on plugins with no floor of their own. Two thirds of a fix reads as a
// whole one in review, which is precisely why a reviewer cannot be the check.
for (const [file, label] of [
diff --git a/internal/check-optional-t-equivalence.mjs b/internal/check-optional-t-equivalence.mjs
index 46b09f5e6..5780922c8 100644
--- a/internal/check-optional-t-equivalence.mjs
+++ b/internal/check-optional-t-equivalence.mjs
@@ -1,6 +1,6 @@
#!/usr/bin/env node
/* check-optional-t-equivalence.mjs — `bun run check:optional-t-equivalence`. Source-only, headless.
- EVERY LATER C4 WAVE EXTENDS THIS FILE (dx-shepherd, REGC4G): a wave that migrates a site without
+ EVERY LATER C4 WAVE EXTENDS THIS FILE (REGC4G): a wave that migrates a site without
adding its row here is a wave whose behaviour nobody re-checks. Sections 1-6 are the helper's own
contract; section 7 is the per-site register. */
// C4: does useOptionalT() behave like the twenty hand-written guarded translators it replaces?
@@ -122,11 +122,11 @@ const SITES = [
['library/components/hints/PinHint.vue', 'useOptionalI18n', 'PINHINT_FALLBACK[key]'],
['plugin-designs/pplr-data-maps/src/composables/usePplrT.js', 'useOptionalT', null],
['plugin-designs/upg-neighbor/src/composables/useNeighborT.js', 'useOptionalT', null],
- // wave 3a — gospel-resources (owner: gospel-plugin). All four fell back to enLookup, i.e. the
+ // wave 3a — gospel-resources. All four fell back to enLookup, i.e. the
// SHIPPED ENGLISH, not the locale-aware catalogue; each passes that enLookup in, so a bare host
// still renders English. Switching them to the catalogue default would make a bare host honour
- // ?lang=ar — a real improvement, and gospel-plugin's to make, not this migration's.
- // ★ gospel-plugin CHOSE the locale-honouring catalogue fallback (2026-09-26) rather than keeping
+ // ?lang=ar — a real improvement, and its owner's to make, not this migration's.
+ // ★ gospel-resources' owner CHOSE the locale-honouring catalogue fallback (2026-09-26) rather than keeping
// enLookup's English: "most partners will drop a custom element or an iframe and never install
// vue-i18n ... an Arabic ministry site embedding this map serves its readers English while the
// bundle already carries all 11 catalogues. That is a bug, not a decision." So these four take NO
@@ -143,13 +143,13 @@ const SITES = [
// wave 3b — cities-internet. All three were byte-identical in the guard block; each keeps its own
// enLookup fallback, so a bare host renders the same English. Their local fill() used `k in params`,
// so the shared fillParams also removes a way for them to print the literal "null".
- // ★ exp-shepherd, as cities-internet's owner, took the locale-honouring default (2026-09-26): "the
- // bundle already carries all 11 catalogues, so a bare host getting English would be a bug". So these
+ // ★ cities-internet's owner took the locale-honouring default (2026-09-26): the bundle already
+ // carries all 11 catalogues, so a bare host getting English would be a bug. So these
// three pass NO fallback, and their English-only enLookup + per-area catalogue import are deleted.
['plugin-designs/cities-internet/connectivity-list.vue', 'useOptionalT', null],
['plugin-designs/cities-internet/connectivity-map.vue', 'useOptionalT', null],
['plugin-designs/cities-internet/data-tables.vue', 'useOptionalT', null],
- // wave 3d — all-people-groups. Treated as UNOWNED (studio agreed), so the conservative reading wins:
+ // wave 3d — all-people-groups. Treated as UNOWNED, so the conservative reading wins:
// its inline EN map stays the fallback rather than switching to the catalogue, because nobody is
// available to decide that this bundle should start honouring the locale on a bare host -- THEN
// the locale-honouring fallback was RULED for everywhere (2026-09-27; the goal: a bare-host
@@ -162,11 +162,11 @@ const SITES = [
// the inline EN map. Taking a SITES array wholesale from another branch re-asserts ITS view of every
// file in it, including the ones you changed; the gate caught it, which is the only reason it is right.
['plugin-designs/all-people-groups/all-people-groups.vue', 'useOptionalI18n', null],
- // wave 3c — my-upg-100-list (owner: upg100-plugin). No namespace, since callers pass full keys.
+ // wave 3c — my-upg-100-list. No namespace, since callers pass full keys.
// ⚠ THE THIRD COLUMN IS null, NOT 'humanizeKey(k)', and that is a DEPARTURE from 4c05e589, which
- // kept the fallback. Correct as regions-plugin wrote it; wrong the moment dx-shepherd took the
+ // kept the fallback. Correct as first written; wrong the moment the owner took the
// product call (UPGHK, 2026-09-27) to delete it. A row asserting a fallback the code no longer
- // passes fails by design — the same hole regions flagged to me in the opposite direction.
+ // passes fails by design — the same hole flagged earlier in the opposite direction.
// ★ WHY IT WAS DELETED. humanizeKey rendered a key's last segment title-cased, failing two ways: on
// the messages keys it printed "Upg100 Wall Intro" where a whole sentence exists (wrong even in
// English), and on the tabs keys it printed the RIGHT English by coincidence — those keys are named
@@ -175,7 +175,7 @@ const SITES = [
// someone changes locale.
// The premise for keeping it ("these keys are not fully catalogued") was MINE and was FALSE: seven
// keys across both files, all string literals, every one present in all eleven locales, 0 gaps.
- // Same class of decision gospel-plugin took for its four sites above, and the OPPOSITE of the 3d
+ // Same class of decision gospel-resources' owner took for its four sites above, and the OPPOSITE of the 3d
// reading directly above — which is right, because that file is unowned and these two are not.
['plugin-designs/my-upg-100-list/poster-wall.vue', 'useOptionalT', null],
['plugin-designs/my-upg-100-list/upg-100-mfe.vue', 'useOptionalT', null],
@@ -188,11 +188,11 @@ const SITES = [
// third bare call — a new unguarded translator — still fails this gate.
// ★ DELIBERATELY NOT IN THIS REGISTER, so nobody "completes" C4 by converting it:
// plugin-designs/pplr-data-maps/src/components/SemanticTreeLegend.vue
-// It still hand-rolls the guard, and exp-shepherd asked for it to stay that way: the file is carded for
+// It still hand-rolls the guard, and its owner asked for it to stay that way: the file is carded for
// retirement (RETIRE-PPLR-SEMANTICTREELEGEND) in favour of the library component, so converting it is
// work that gets thrown away. A migration whose value expires before it lands is not worth the diff.
// Two more sites are their owners' to cut, not absent by oversight: country-posters-mfe.vue
-// (exp-shepherd, into its single posters landing) and key-cities/cities-map.vue (exp-shepherd, gated).
+// (into its single posters landing) and key-cities/cities-map.vue (gated).
const ALLOWED_BARE = { 'plugin-designs/gospel-resources/resources-map.vue': 2 }
for (const [file, helper, fallbackFrag] of SITES) {
@@ -221,13 +221,13 @@ for (const [file, helper, fallbackFrag] of SITES) {
// Which sites were MOVED to the catalogue by a decision, vs which always resolved there. Saying "as it
// always did" about a moved file is a false statement inside a gate message, the one place a reader has
// no reason to doubt. gospel-resources and cities-internet moved by their owners' decisions,
- // my-upg-100-list by dx-shepherd's product call (UPGHK) deleting humanizeKey, and all-people-groups by
+ // my-upg-100-list by a product call (UPGHK) deleting humanizeKey, and all-people-groups by
// the embed-contract ruling (locale-honouring everywhere, 2026-09-27).
const MOVED_BY = {
- 'gospel-resources': "gospel-plugin moved it here from enLookup's English",
- 'cities-internet': "exp-shepherd moved it here from enLookup's English",
- 'my-upg-100-list': 'upg100-plugin moved it here from humanizeKey, a title-cased key segment',
- 'all-people-groups': "dx-shepherd's embed-contract ruling moved it here from its inline English map",
+ 'gospel-resources': "its owner moved it here from enLookup's English",
+ 'cities-internet': "its owner moved it here from enLookup's English",
+ 'my-upg-100-list': 'its owner moved it here from humanizeKey, a title-cased key segment',
+ 'all-people-groups': "the embed contract moved it here from its inline English map",
}
const mover = Object.keys(MOVED_BY).find((d) => file.includes(d))
ok(!/fallback:/.test(code), mover
@@ -236,7 +236,7 @@ for (const [file, helper, fallbackFrag] of SITES) {
}
}
-// ── 7b. gospel-plugin's ASKED-FOR ROW, against the REAL catalogue ───────────────────────────────
+// ── 7b. gospel-resources' ASKED-FOR ROW, against the REAL catalogue ───────────────────────────────
// Their words: "a BARE host (no vue-i18n) with ?lang=ar must render pins.approximate in Arabic — not
// the key, not gospel.pins.approximate, not English." It covers their conditions 1 and 2 together: a
// namespace would corrupt the key, and an EN-only fallback would serve English to an Arabic reader.
diff --git a/internal/check-package-json-unique-keys.mjs b/internal/check-package-json-unique-keys.mjs
index a9cf62eec..2118f889d 100644
--- a/internal/check-package-json-unique-keys.mjs
+++ b/internal/check-package-json-unique-keys.mjs
@@ -5,7 +5,7 @@
* WHY: JSON.parse keeps the LAST of two equal keys and says nothing, so a duplicate silently kills the
* first entry. "check:religion-label-not-value" sat twice in //scripts, one description dead, while
* check:doc-scripts passed (it reads the parsed object, where only one survives). It was a merge artifact:
- * the landing tooling unions both sides' package.json additions. Found by regions-plugin; only Bun's parser
+ * the landing tooling unions both sides' package.json additions. Found during a landing; only Bun's parser
* warned, while running something unrelated.
*
* HOW: a small JSON scanner that tracks every object's keys by position, so it sees what JSON.parse
diff --git a/internal/check-packet-charts.mjs b/internal/check-packet-charts.mjs
index e96094e73..17b8b7fc7 100644
--- a/internal/check-packet-charts.mjs
+++ b/internal/check-packet-charts.mjs
@@ -129,7 +129,7 @@ ok(Math.round(per / 100) * 100 === 40200,
// it: 32 contiguous cells fill most of row 1 of 52, so the page printed as one solid bar across the
// header — the ordinary chart the life grid exists to avoid — and the existing gate asserts only
// that the shaded COUNT is between 0 and 5,200, which is equally true of a bar and of a scatter.
-// A count cannot distinguish a distribution. rega's eyes caught it; nothing else could have.
+// A count cannot distinguish a distribution. A visual review caught it; nothing else could have.
const picked = scatterCells(5200, 32, 'upg-100')
const spread = scatterSpread(picked, 52)
ok(spread.cells === 32, '32 shaded cells are picked, distinct')
diff --git a/internal/check-packet-render.mjs b/internal/check-packet-render.mjs
index 722832dbd..a4a734752 100644
--- a/internal/check-packet-render.mjs
+++ b/internal/check-packet-render.mjs
@@ -33,7 +33,7 @@ import { pathToFileURL, fileURLToPath } from 'node:url'
import { requirePathInThisCheckout } from './_serves-this-tree.mjs'
// ★ --expect-funnel TURNS AN OPTIONAL PAGE INTO A DECLARED REQUIREMENT, and it exists because of a
-// real near-miss (regions-plugin, 2026-09-26, reported unprompted). A merge resolved with
+// real near-miss (2026-09-26, reported unprompted). A merge resolved with
// `git checkout --ours` silently deleted the printPacket call site that supplies the funnel data —
// 60 lines — AND EVERY GATE STAYED GREEN. It had to: the funnel page is optional by design
// (buildPacket omits it when the arg is null), so a packet with no page 2 is not malformed, just
@@ -274,8 +274,8 @@ const r = await page.evaluate(() => {
})(),
funnelEq: document.querySelectorAll('.funnel-eq').length,
funnelSteps: document.querySelectorAll('.funnel-mine').length,
- // ★ MEASURED SO THE GATE CAN REPORT WHAT IT ASSERTED. rega: "the gate prints no funnel line, even
- // with --expect-funnel ... a reader cannot see WHAT it asserted about page 2." A silent pass is
+ // ★ MEASURED SO THE GATE CAN REPORT WHAT IT ASSERTED. A review found the gate printed no funnel line, even
+ // with --expect-funnel, so a reader could not see WHAT it asserted about page 2. A silent pass is
// the mirror of a printed-but-unasserted number: the check is real and the evidence is invisible.
// ⚠ ZERO POPULATION IS COUNTED ON PURPOSE. The reader's row printed "0 people" in every packet
// (Number(null) is 0, so the finite-number guard admitted a deliberate no-data marker). Fixed in
@@ -302,10 +302,10 @@ const r = await page.evaluate(() => {
.filter((d) => /^0(\.0+)?\s+\D/.test(d.textContent.trim())).length
})(),
funnelShare: (document.querySelector('.funnel-share')?.textContent || '').trim().slice(0, 80),
- // ★ LATIN RUNS ON A NON-LATIN SHEET, which is the one gap rega named and I left open: "the gate
- // passed: it counts rows, not the row's language." It asserted the funnel page's STRUCTURE and
- // nothing about whether its prose reached the reader's language — my own standing rule turned on
- // my own gate.
+ // ★ LATIN RUNS ON A NON-LATIN SHEET, the one gap a review named and that was left open: the gate
+ // passed because it counted rows, not the rows' language. It asserted the funnel page's STRUCTURE
+ // and nothing about whether its prose reached the reader's language, the standing rule turned on
+ // this gate itself.
//
// ⚠ IT ONLY WORKS IN A NON-LATIN-SCRIPT LOCALE, and that is why it is worth having rather than
// aspiring to a general "is this translated?" test, which is not decidable. On a hi/ar/ru/zh sheet
@@ -749,7 +749,7 @@ if (r.lifeSheets) {
}
}
// ⚠ AND THE SHADE MUST BE SCATTERED, NOT STACKED — the assertion that would have caught what three gates
-// and a passing suite did not. rega's contact sheet (2026-09-28) showed page 3 reading as ONE SOLID BAR:
+// and a passing suite did not. A contact sheet (2026-09-28) showed page 3 reading as ONE SOLID BAR:
// 32 contiguous cells fill most of row 1 of 52, so the page said "a big green block" where the
// intent is 32 boxes lost in 5,200. Every assertion passed, because they all measured the COUNT.
// Half the grid height is a deliberately loose floor: a genuine scatter of even a few cells spans most of
@@ -793,7 +793,7 @@ if (r.funnel && !r.funnelSteps) {
// ★ AND IF THE CALLER DECLARED IT, ITS ABSENCE IS A FAILURE. See the --expect-funnel note at the top:
// a lost call site produces a packet that is CORRECT but missing page 2, which is why nothing caught
// a merge deleting one.
-// ★ EVERY FUNNEL ROW MUST HAVE A BAR. rega measured the first version: the reader's step had no bar,
+// ★ EVERY FUNNEL ROW MUST HAVE A BAR. A browser check measured the first version: the reader's step had no bar,
// so the funnel never visibly narrowed to "yours" — a funnel whose final term is not drawn as part of
// the funnel fails at the one thing it is for. Rows and bars are counted separately so the next
// regression is a mismatch rather than an invisible omission.
@@ -805,8 +805,8 @@ if (r.funnel && r.funnelRows !== r.funnelBars) {
// because Number(null) is 0 and the renderer's guard tested finiteness rather than PRESENCE. A people
// group with no people is not a fact; it is missing data wearing a number's clothes.
// ★ AND ON A NON-LATIN SHEET, THE FUNNEL'S PROSE MUST BE IN THE READER'S SCRIPT. See funnelLatinRuns
-// above for why this is only meaningful in hi/ar/ru/zh. This is the gap rega named after the ?list=
-// render: "the gate passed: it counts rows, not the row's language", and it was right — the English
+// above for why this is only meaningful in hi/ar/ru/zh. This is the gap a review named after the ?list=
+// render (the gate passed because it counted rows, not the rows' language), and it was right — the English
// list label sat among Devanagari and every assertion here was green.
//
// ⚠ THE ALLOWLIST IS TWO ENTRIES AND BOTH ARE DECISIONS, NOT BOOKMARKS:
diff --git a/internal/check-packet-variants.mjs b/internal/check-packet-variants.mjs
index 1d4375d1c..87d3db713 100644
--- a/internal/check-packet-variants.mjs
+++ b/internal/check-packet-variants.mjs
@@ -189,7 +189,7 @@ ok(count(light, /sheet-sets-(bounded|centered)/g) === 0, 'lightweight still carr
// "rows close on the bottom margin" one already deleted from check-profile-table. A printed sheet
// is simply much taller than gospel's constrained pane, which is why their bug is not ours.
// The real protection is the empty-ring filter asserted above (ten rows is the ceiling) plus
- // rega's rendered check; a headless budget with 790px of slack would be decoration.
+ // the rendered browser check; a headless budget with 790px of slack would be decoration.
}
// An unknown variant must print the FULL packet. A typo that printed a SHORTER packet would look
@@ -204,7 +204,7 @@ ok(/printPacketAs[\s\S]{0,600}prints\.printPacket\(/.test(WALL),
'printPacketAs does not call prints.printPacket — the Prayer List caret would print the columnar LIST again, not the packet')
ok(/variant/.test(PRINTS.match(/async function printPacket\([^)]*\)/)?.[0] || ''),
'usePosterPrints.printPacket does not accept a variant — the caret\'s choice would be silently dropped')
-// printList itself STAYS (dx-shepherd: don't delete it, just stop the button calling it).
+// printList itself STAYS (by decision: keep it, just stop the button calling it).
ok(/function printList\(/.test(PRINTS) && /printList,/.test(PRINTS),
'printList was removed — it must remain exported for any surface that still wants the columnar list')
diff --git a/internal/check-packets-all.mjs b/internal/check-packets-all.mjs
index 52f4af07a..6cc0fda48 100644
--- a/internal/check-packets-all.mjs
+++ b/internal/check-packets-all.mjs
@@ -132,7 +132,7 @@ const gate = join(HERE, 'check-packet-render.mjs')
// ★ THE FUNNEL PAGE IS REQUIRED HERE, and this line is the half of the fix that was missing.
// check-packet-render gained --expect-funnel after a merge deleted the call site supplying the funnel
-// data and every gate stayed green (regions-plugin, 2026-09-26). But a DECLARABLE expectation that
+// data and every gate stayed green (2026-09-26). But a DECLARABLE expectation that
// nothing declares is not a closed hole — it is an invisible defect traded for a visible obligation.
// I said as much to regions and then owed the second half.
//
diff --git a/internal/check-pane-config-reforward.mjs b/internal/check-pane-config-reforward.mjs
index 745ebcb63..82f64da64 100644
--- a/internal/check-pane-config-reforward.mjs
+++ b/internal/check-pane-config-reforward.mjs
@@ -3,7 +3,7 @@
* check-pane-config-reforward — a composite's panes keep following the outer config for the whole
* session, and a locale change never rewrites a filter into a display name.
*
- * ★ THE BUG THIS GUARDS, measured by rega on development 92ca8b6e6 across FOUR composites
+ * ★ THE BUG THIS GUARDS, measured on development 92ca8b6e6 across FOUR composites
* (regions-mfe, upg-100-mfe, country-posters-mfe, research-map-plus-grid). The outer element's
* profile-config reached locale 'ar' by +1.5 s — attribute AND property, same node — while every
* NESTED host carried NO locale key at boot and still none at +15 s. Text per composite at +15 s:
@@ -15,7 +15,7 @@
* ★ IT RUNS THE SHIPPED HELPER WITH REAL VUE. usePaneConfig is imported, not re-typed, and driven
* by real refs through a real watchEffect — the dependency-tracking hole this gate's case 3 covers
* (a plain array leaves a LATER entry's getter untracked) is invisible to any test that fakes
- * reactivity, and it was found by studio only because their test used real Vue.
+ * reactivity, and it was found only because a test used real Vue.
*
* ★ AND IT ASSERTS THE DOM, NOT THE RETURN VALUE. Every case reads the attribute back off the
* element, because "the helper decided to write" and "the pane was told" are different claims and
@@ -76,7 +76,7 @@ const cfgOf = (el) => {
paneConfig.dispose()
}
-// ── 1b. NO LOCALE KEY AT BOOT IS THE REAL BEFORE-STATE, not a stale one. rega measured the nested
+// ── 1b. NO LOCALE KEY AT BOOT IS THE REAL BEFORE-STATE, not a stale one. A browser check measured the nested
// hosts carrying no locale key at all, so the first re-forward is absent -> 'ar'.
{
const outer = ref({ apiBaseUrl: '/api' })
@@ -225,7 +225,7 @@ const cfgOf = (el) => {
// gridLanguage() falls back to `linked.language.value || linked.language.label`, and `label` is a
// DISPLAY NAME. The grid's valueMatches() compares whole normalised values, so a name fetched in
// one language matches no row in another — the failure that took the grid 2,107 -> 0 and read as
-// "no results" (rega, 2026-09-26). This asserts the CLASS, not today's instance.
+// "no results" (measured 2026-09-26). This asserts the CLASS, not today's instance.
{
const locale = ref('en')
// A language whose display label follows the locale, as the API returns it, but whose code does not.
diff --git a/internal/check-pin-selection.mjs b/internal/check-pin-selection.mjs
index 2985faec1..5c5dd59a0 100644
--- a/internal/check-pin-selection.mjs
+++ b/internal/check-pin-selection.mjs
@@ -11,7 +11,7 @@
* this._data = typeof options.data === 'string' ? { url: options.data } : { geojson: options.data }
*
* so `data.features` was undefined and the reader returned an EMPTY LIST on MapLibre — the keyless
- * engine the public builds use. Measured by rega on 2026-09-28: a language-family selection and a
+ * engine the public builds use. Measured on 2026-09-28: a language-family selection and a
* prayer selection both logged "0 pin(s) selected" with the pins plainly on screen.
*
* ★ THE FAILURE MODE IS WHY A TEST IS THE ONLY GUARD. Every caller is written to NO-OP when it finds no
@@ -79,7 +79,7 @@ for (const [label, src] of [['mapbox', { _data: COLLECTION }], ['maplibre', { _d
eq('expressions are ANDed', matchesExpression(['all', ['==', ['get', 'uniqueId'], 'a'], ['==', ['get', 'languageFamily'], 'Indo-European']], FEATURES[0].properties), false)
// ── PACKETSEL: the prayer count is LIVE, so the packet must read feature-state ──────────────────
-// rega, RQ3(b): the packet's "Has Prayer" selection showed 50 of 997 where the legend row said 699.
+// RQ3(b): the packet's "Has Prayer" selection showed 50 of 997 where the legend row said 699.
// The legend is right. Polling writes each pin's current count with setFeatureState() and
// prayer-progress.js:94 colours from ['feature-state','peoplePraying']; the GeoJSON property is
// whatever was true at page load. Reading the property selects the wrong people to pray for, which is
diff --git a/internal/check-poster-card-fits.mjs b/internal/check-poster-card-fits.mjs
index 3f9f08936..98edc6d40 100644
--- a/internal/check-poster-card-fits.mjs
+++ b/internal/check-poster-card-fits.mjs
@@ -108,9 +108,9 @@ async function measure(width, lang) {
await page.waitForTimeout(10000)
// ★ HOVER IS INVISIBLE TO A STATIC PROBE, which is exactly how the blue outline stayed
- // unbuilt for so long. Repeated reports asked to "restore the blue outline around the poster";
+ // unbuilt for so long. A blue outline around the hovered poster was reported missing more than once;
// measuring the loaded page found `outline:none` on all 136 framed elements and concluded it had
- // never existed — true, and useless, because the affordance being asked for only exists WHILE
+ // never existed — true, and useless, because the affordance in question only exists WHILE
// THE POINTER IS OVER THE CARD. The pointer has to actually move.
//
// ⚠ AND IT MUST NOT MOVE ANYTHING. The whole rest of this gate asserts where the print row sits.
diff --git a/internal/check-poster-layout-optin.mjs b/internal/check-poster-layout-optin.mjs
index 8414ad6d8..01408da11 100644
--- a/internal/check-poster-layout-optin.mjs
+++ b/internal/check-poster-layout-optin.mjs
@@ -3,7 +3,7 @@
* check-poster-layout-optin — the composed poster layout is OPT-IN, and every caller that does not
* ask for it gets byte-for-byte what it got before.
*
- * WHY THE OPT-IN EXISTS (dx-shepherd's ruling, from upg100's check). The renderer used to raster the
+ * WHY THE OPT-IN EXISTS (a decision that followed upg-100-list's check). The renderer used to raster the
* map at FULL PAGE size and composite the title, legend and footer on top of it, so the legend lay
* over the map it describes. usePosterLayout had always computed the correct geometry and nothing
* consumed it. Fixing that unconditionally would have broken a different product: country-posters
diff --git a/internal/check-poster-render-pinned.mjs b/internal/check-poster-render-pinned.mjs
index 9f2c0c05b..682ededf2 100644
--- a/internal/check-poster-render-pinned.mjs
+++ b/internal/check-poster-render-pinned.mjs
@@ -83,7 +83,7 @@ ok(typeof html === 'string' && html.length > 10000 && /