diff --git a/internal/generate-tree.mjs b/internal/generate-tree.mjs index 8f15516dd..73a44169c 100644 --- a/internal/generate-tree.mjs +++ b/internal/generate-tree.mjs @@ -148,7 +148,7 @@ function assetsBaseFor(depth) { // depth is measured from the WEB-ROOT; the tree root is one level in, hence depth - 1. return DEST_CONFIG.assetsBaseUrl || `${'../'.repeat(Math.max(0, depth - 1))}assets` } -// design note 2026-07-11: the staging TOP must not mention deployment orgs (doxa/GO/...). The visible +// The staging TOP must not mention deployment orgs (doxa/GO/...). The visible // title is the PRODUCT title (config displayTitle, default org-free), never the deployment TREE_NAME // (TREE_NAME stays in URLs/paths where it is a folder name, not branding). const DISPLAY_TITLE = (typeof DEST_CONFIG.displayTitle === 'string' && DEST_CONFIG.displayTitle.trim()) diff --git a/internal/mobile-sheet-probe.mjs b/internal/mobile-sheet-probe.mjs index 6a81ba58d..4d02973be 100644 --- a/internal/mobile-sheet-probe.mjs +++ b/internal/mobile-sheet-probe.mjs @@ -14,7 +14,7 @@ * a rect×rect overlap of the sheet against .mapboxgl-ctrl-bottom-left/-right * (their VISIBLE children) in every sheet state. * - * WHY: "it feels wrong on my phone" is not evidence a fix can be checked against. This + * WHY: a sense that the sheet feels wrong on a phone is not evidence a fix can be checked against. This * probe turns the gesture into a per-step table (finger delta vs measured sheet height), * the release into an expected/actual state, and the attribution into overlap px² — * run it BEFORE a fix (baseline json) and AFTER (same json shape) and diff. diff --git a/library/components/legends/SemanticTreeLegend.vue b/library/components/legends/SemanticTreeLegend.vue index fef13d0a0..b00054419 100644 --- a/library/components/legends/SemanticTreeLegend.vue +++ b/library/components/legends/SemanticTreeLegend.vue @@ -233,7 +233,7 @@ const packetOpen = ref(false) const { scrimRef, scrimStyle } = useViewportScrim(exportMenuOpen) // Feature flag: show the Export affordance. Gated here in the SHARED legend so // one switch covers every bundle. It was false by an earlier coder decision; -// design note 2026-07-31 asked for the button back on the 100-list legend, and the +// the button came back on the 100-list legend (2026-07-31), and the // export path is functional (the menu emits 'export' with 'poster' | 'packet', // and a profile wires @export to a real download). // A profile STILL has to opt in with :export-enabled="true" — this flag only diff --git a/library/composables/useEdgeScrollAffordance.js b/library/composables/useEdgeScrollAffordance.js index a6893c5de..b3d6d99c4 100644 --- a/library/composables/useEdgeScrollAffordance.js +++ b/library/composables/useEdgeScrollAffordance.js @@ -21,7 +21,7 @@ * either edge can be summoned where you reach for it. A HOVERED strip is * pinned: it never auto-hides (even while you scroll) until you leave it. * - * RIGHT is the primary side on EVERY form factor (design note, 2026-07-30): people + * RIGHT is the primary side on EVERY form factor (since 2026-07-30): people * expect a scrollbar on the right, and a scroll hint that moves between edges * depending on device is the one thing it must not do. An earlier version flipped * to LEFT on mobile for thumb reach; consistency won. Both strips stay summonable @@ -71,7 +71,7 @@ export function useEdgeScrollAffordance(wrapper, opts = {}) { const show = (e) => { e.style.opacity = '1' } const hide = (e) => { e.style.opacity = '0' } - // Primary side: RIGHT on BOTH desktop and mobile (design note, 2026-07-30). + // Primary side: RIGHT on BOTH desktop and mobile (since 2026-07-30). // It used to flip to LEFT on mobile on a thumb-reach argument, but that made the // affordance appear on a different edge depending on device — the one place a // scroll hint must be predictable. People expect a scrollbar on the right, and diff --git a/library/layouts/app-wrapper-material/index.html b/library/layouts/app-wrapper-material/index.html index 0221bbf61..6475ae080 100644 --- a/library/layouts/app-wrapper-material/index.html +++ b/library/layouts/app-wrapper-material/index.html @@ -699,7 +699,7 @@ function drawSeg(){ const target = isMobile() ? 'mobile' : 'desktop' const tree = navForTarget(NAV, target) const open = new Map(tree.filter(n=>n.kind==='folder').map(n=>[n.id, !!n.open])) -// The profile shown on first load (design note: the prayer map is the first map they see). +// The profile shown on first load (the prayer map is the first map a reader sees). // Declared HERE, above its first use — a `const` further down the module would be in // the temporal dead zone at this point and throw. const DEFAULT_PROFILE = 'prayer-progress' diff --git a/library/scripts/research/build-language-resources.mjs b/library/scripts/research/build-language-resources.mjs index 3966f4fef..9796639be 100644 --- a/library/scripts/research/build-language-resources.mjs +++ b/library/scripts/research/build-language-resources.mjs @@ -30,7 +30,7 @@ // No church, believer, meeting-point or fellowship data of any kind. This maps // PUBLISHED RESOURCE AVAILABILITY per language — "does a translation exist" — which // is public bibliographic fact. It must never gain a field describing where -// Christians are. (design note boundary, 2026-08-01.) +// Christians are. (A standing boundary since 2026-08-01.) // // HONESTY RULE: a language absent from eBible is recorded `has_scripture:false` // with `checked_pools:['ebible']`. That means "not found in the pools we checked", diff --git a/library/scripts/research/derive-city-candidates.mjs b/library/scripts/research/derive-city-candidates.mjs index 61c3022dd..dfa3a9c42 100644 --- a/library/scripts/research/derive-city-candidates.mjs +++ b/library/scripts/research/derive-city-candidates.mjs @@ -122,7 +122,7 @@ const stats = { internet_researched: clusters.filter((c) => c.internet_access !== 'unknown').length, generated: '2026-08-01', scope_note: 'Scope is the full 2,106-record DX people-group corpus. No separate "2000 list" artefact exists on disk — verified by search — so this corpus IS the scope.', - safety_note: 'Contains NO gospel-resource, church or believer field, and must not gain one. That join is held pending design note architecture (separate store, never joined to UPG locations in a public artifact).', + safety_note: 'Contains NO gospel-resource, church or believer field, and must not gain one. That join is held pending a separate architecture (separate store, never joined to UPG locations in a public artifact).', }; if (!existsSync(OUT)) mkdirSync(OUT, { recursive: true }); diff --git a/library/scripts/research/verify-all.mjs b/library/scripts/research/verify-all.mjs index 1b1b05b62..41fb5c0b2 100644 --- a/library/scripts/research/verify-all.mjs +++ b/library/scripts/research/verify-all.mjs @@ -35,7 +35,7 @@ // Root cause: a one-element dfrac sweep + leaders still drawn beside // the numbered badges + a DENSE_AT threshold that exists only as a // comment. Fixing it changes the look of 41 posters in the SHARED -// template, which is a design note design call. +// template, which is a product design call. // ALSO expect ONE "no crossing count" failure for country-chn: it is // the 3x4 tier, built by a SEPARATE run, so the 173-country manifest // does not cover it. That is the guard refusing to call an unmeasured diff --git a/plugin-designs/country-posters/countries-map.vue b/plugin-designs/country-posters/countries-map.vue index 0814af716..cad088e8b 100644 --- a/plugin-designs/country-posters/countries-map.vue +++ b/plugin-designs/country-posters/countries-map.vue @@ -1446,8 +1446,8 @@ function switchTab(tabId) { // search query doesn't leak across tabs (qa-buildinng-round-1 Bug 11). // clearGeocoderProgrammatic uses its internal _geoBeingCleared to skip the legend- // deselect side effect — pure text reset. Flip the FEATURES flag to keep - // search queries across tabs (the user said "could go either way" — sticking - // with clear-on-switch as the default per A4). + // search queries across tabs (either behaviour is acceptable; clear-on-switch + // stays the default per A4). if (!FEATURES.geocoderPersistAcrossTabs) clearGeocoderProgrammatic() const tab = tabs.value.find(t => t.id === tabId) if (!tab || !map.value) return diff --git a/plugin-designs/doxa-research-map/research-map.vue b/plugin-designs/doxa-research-map/research-map.vue index 9ebd31443..b77f1cc64 100644 --- a/plugin-designs/doxa-research-map/research-map.vue +++ b/plugin-designs/doxa-research-map/research-map.vue @@ -1802,8 +1802,8 @@ function switchTab(tabId) { // search query doesn't leak across tabs (qa-buildinng-round-1 Bug 11). // clearGeocoderProgrammatic uses its internal _geoBeingCleared to skip the legend- // deselect side effect — pure text reset. Flip the FEATURES flag to keep - // search queries across tabs (the user said "could go either way" — sticking - // with clear-on-switch as the default per A4). + // search queries across tabs (either behaviour is acceptable; clear-on-switch + // stays the default per A4). if (!FEATURES.geocoderPersistAcrossTabs) clearGeocoderProgrammatic() const tab = tabs.value.find(t => t.id === tabId) if (!tab || !map.value) return diff --git a/plugin-designs/my-upg-100-list/upg-100-list.vue b/plugin-designs/my-upg-100-list/upg-100-list.vue index 2c3a6035d..79ad9ac96 100644 --- a/plugin-designs/my-upg-100-list/upg-100-list.vue +++ b/plugin-designs/my-upg-100-list/upg-100-list.vue @@ -242,7 +242,7 @@ const selCount = computed(() => selectedTerritories.value.length) const copyFlash = ref('') // transient "Copied!" / "Copy failed" label let countryNameMap = null // iso3→label, built from live records -// ── R1.2 PIVOT (design note 2026-06-11): MOBILE-FRIENDLY "Batch Select" mode ────── +// ── R1.2 PIVOT (2026-06-11): MOBILE-FRIENDLY "Batch Select" mode ────── // The selection INPUT GESTURE is a visible toggle button + plain taps — NO // shift/ctrl/meta (touch devices have no modifier keys; D-8 removes them). When // batchMode is ON a plain tap on a map `tapestry-fill` feature OR a legend row @@ -670,7 +670,7 @@ useShadowStyles( '.map-toolbar .mcb.upg-batch-on.dark{border-color:#34d399!important}' + // ── R1.3 (j): legend MULTI-SELECT marker (batch mode). The SHARED legend only // paints ONE .selected row (its internal single selectedId). In batch mode the - // design note selects 2+ rows, so the profile marks EVERY legend row that maps to a + // the reader selects 2+ rows, so the profile marks EVERY legend row that maps to a // selected zone with .upg-batch-row (applied profile-side by markLegendBatchRows // — we never edit the shared component). Emerald left-rail + tint so multiple // rows clearly read as selected at once; the dot gets an emerald ring. @@ -3343,7 +3343,7 @@ onBeforeUnmount(() => { /> -