Two gates the branch backlog turned red
Seven Driver citations came back with the merged branches. Each keeps its engineering reason and its date, and loses the speaker: the overlap report, the poster's legend rule, the network-change defect, the chart's provenance. check:plural-forms crashed rather than failed. It built its locale list by listing the catalogue directory, so a README.md moved in beside the locale folders became a 'locale', passed the exists check because a file does exist, and crashed readdirSync on a non-directory. It now filters to directories. The gate on development has the same line and only survives because that README is not there yet -- so this is a fix for development, not a merge artefact. Both found by running the full 103-gate chain; the shortened chain the merge produced ran neither.
This commit is contained in:
parent
023afcb55e
commit
d3cdc2c3bc
6 changed files with 12 additions and 9 deletions
|
|
@ -3,7 +3,7 @@
|
|||
* check-map-control-overlap — two controls pinned to the same corner of the dashboard map must not
|
||||
* land on top of each other.
|
||||
*
|
||||
* Driver, 2026-09-28 (test round 2, #3): "some map controls overlap each other".
|
||||
* Reported 2026-09-28 (test round 2, #3): some map controls overlap each other.
|
||||
*
|
||||
* WHAT HAPPENED, because it is the interesting part. The projection toggle (.rd-proj) sits at
|
||||
* top:8px and the zoom toolbar (.rd-zoomtools) was pinned at top:34px — a hand-tuned number chosen
|
||||
|
|
|
|||
|
|
@ -13,12 +13,15 @@
|
|||
* English string written "none | one | {n}" changes MEANING at n=0 under the map. Every pipe
|
||||
* key is rendered at 0 and must not regress.
|
||||
*/
|
||||
import { readFileSync, readdirSync, existsSync } from 'node:fs'
|
||||
import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs'
|
||||
import { join } from 'node:path'
|
||||
|
||||
const LOC_DIR = new URL('../library/i18n/locales/', import.meta.url).pathname
|
||||
const SRC_DIRS = [new URL('../plugin-designs/', import.meta.url).pathname, new URL('../library/', import.meta.url).pathname]
|
||||
const LOCALES = readdirSync(LOC_DIR).filter((d) => !d.startsWith('.'))
|
||||
// DIRECTORIES ONLY. This listed every entry, so a README.md beside the locale folders entered
|
||||
// the locale list, passed the existsSync below (a file does exist) and crashed readdirSync on a
|
||||
// non-directory. A note explaining a catalogue belongs beside it; the gate has to tolerate one.
|
||||
const LOCALES = readdirSync(LOC_DIR).filter((d) => !d.startsWith('.') && statSync(join(LOC_DIR, d)).isDirectory())
|
||||
const fail = []
|
||||
|
||||
// Collect every pipe-bearing catalogue value, as ns.key -> { locale: value }
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/**
|
||||
* check-poster-layout — the exported poster is a LAYOUT, not a map with things painted on it.
|
||||
*
|
||||
* Driver, 2026-09-28, on the Simple Research poster: the legend must sit BESIDE the map, never over
|
||||
* Required 2026-09-28, on the Simple Research poster: the legend must sit BESIDE the map, never over
|
||||
* it, with a proper header and footer.
|
||||
*
|
||||
* WHY BOTH ARMS. usePosterLayout.computeLayout has always produced the right geometry — it narrows
|
||||
|
|
@ -37,7 +37,7 @@ const px = (spec) => ({ width: Math.round(spec.widthIn * spec.dpi), height: Math
|
|||
|
||||
// ── ARM A: the geometry, on the sheets the two real callers actually ask for ──
|
||||
const SHEETS = [
|
||||
['Simple Research, landscape (the Driver\'s poster)', { widthIn: 11, heightIn: 8.5, dpi: 200, orientation: 'landscape' }],
|
||||
['Simple Research, landscape (the reference poster)', { widthIn: 11, heightIn: 8.5, dpi: 200, orientation: 'landscape' }],
|
||||
['Simple Research, portrait', { widthIn: 8.5, heightIn: 11, dpi: 200, orientation: 'portrait' }],
|
||||
['country-posters, A4 portrait @150', { widthIn: 8.27, heightIn: 11.69, dpi: 150, orientation: 'portrait' }],
|
||||
['a big 24x36 research poster @300', { widthIn: 24, heightIn: 36, dpi: 300, orientation: 'portrait' }],
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/**
|
||||
* check-retry-fetch — a runtime data fetch survives a transport blip, and a real error still fails.
|
||||
*
|
||||
* THE DEFECT (Driver, 2026-09-28): net::ERR_NETWORK_CHANGED killed an embedded UPG-100's load.
|
||||
* THE DEFECT (reported 2026-09-28): net::ERR_NETWORK_CHANGED killed an embedded UPG-100's load.
|
||||
*
|
||||
* ★ THE URLs IN HIS CONSOLE CANNOT BE FIXED, BECAUSE THEY DO NOT EXIST IN PRODUCTION. They were module
|
||||
* URLs — locale JSON with ?import, useOptionalT.js, useShadowStyles.js, useMapTheme.js. The build is
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/**
|
||||
* LanguageTreeChart.vue — every language family a roster belongs to, as a radial tree on a whiteboard.
|
||||
*
|
||||
* Promoted from gospel-internet's GiTree (Driver brief §B). It is deliberately THIN: the drawing is
|
||||
* Promoted from gospel-internet's GiTree (product brief §B). It is deliberately THIN: the drawing is
|
||||
* library/charts/whiteboard/tiered-points.js, the surface is library/maps/whiteboard-map.js, the
|
||||
* hierarchy is library/charts/whiteboard/language-tree-model.js and the camera is
|
||||
* library/charts/whiteboard/frame-target.js — all four tested headlessly. What is left here is wiring,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
* retryFetch.js — fetch(), with the same transient-blip retry the lazy components already get.
|
||||
*
|
||||
* ★ THE DEFECT AND WHAT IT IS NOT. The Driver hit net::ERR_NETWORK_CHANGED on an embedded UPG-100 and
|
||||
* ★ THE DEFECT AND WHAT IT IS NOT. A reader hit net::ERR_NETWORK_CHANGED on an embedded UPG-100 and
|
||||
* the load died. The URLs in his console were module URLs — locale JSON with ?import, useOptionalT.js,
|
||||
* useShadowStyles.js, useMapTheme.js — which look like lazy loads that need retrying. They are not: the
|
||||
* production build is IIFE with inlineDynamicImports (vite.config.js:216-220), so every one of those
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
* ★ BUT THE FAILURE CLASS IS REAL IN PRODUCTION, one layer down. A built bundle still makes runtime
|
||||
* requests — the boundaries geojson, the people-group list, the prayer statistics, a detail lookup, a
|
||||
* token service — and not one of them retried. The same wifi switch, VPN flap or sleep-wake that killed
|
||||
* the Driver's dev load takes out whichever of those happened to be in flight, and the feature is simply
|
||||
* a dev load takes out whichever of those happened to be in flight, and the feature is simply
|
||||
* absent: an empty map, a missing outline, a statistic that never arrives. No error a reader can act on.
|
||||
*
|
||||
* So this is the fetch-shaped sibling of retryableAsyncComponent, deliberately with the SAME policy —
|
||||
|
|
|
|||
Loading…
Reference in a new issue