From 2cde9c09183353d342d8ab3ed620c34be5f0ff7b Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Tue, 29 Sep 2026 09:46:59 +0000 Subject: [PATCH] people-groups-grid: keep the reasons, drop the speaker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fourteen references, each rewritten to state the requirement directly. Every date, measurement and pixel coordinate is kept — the y=1827/y=1865 redundancy that prompted the count line, the 2026-09-22 interoperability report behind the Language and Status props, the 220x130 letterbox the square image replaced, the dev-server path that showed "view more information" reaching the wrong page, and the India click that left the grid unchanged. Thirteen were found by a case-sensitive search and a fourteenth was not: a line in capitals, carrying a verbatim quote, which `grep -w Driver` cannot see. The check that catches both is `grep -wi driver`, and it now reports 0. Two sentences broke in the first pass and were found by re-reading every changed line rather than by the reference count: one left "the control the" with its object removed, and one left a quotation with an unclosed quote when the surrounding attribution went. The count was correct while the prose was wrong, which is why the count is not the check. check:no-new-driver-references passes. research-map-plus-grid and dashboard-plus-grid both rebuild byte-identical. --- .../people-groups-grid/people-groups-grid.vue | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/plugin-designs/people-groups-grid/people-groups-grid.vue b/plugin-designs/people-groups-grid/people-groups-grid.vue index 60af8f511..41aab945e 100644 --- a/plugin-designs/people-groups-grid/people-groups-grid.vue +++ b/plugin-designs/people-groups-grid/people-groups-grid.vue @@ -23,7 +23,7 @@ * …the four dropdown axes (Region / Block / People-Group / Religion) PLUS Country. * Precedence = internal control (when shown) ELSE the incoming prop (local-else-prop). * - * ★ COUNTRY IS PROP-ONLY, NOT A FIFTH DROPDOWN. The Driver's exclusion of Country was + * ★ COUNTRY IS PROP-ONLY, NOT A FIFTH DROPDOWN. The exclusion of Country was * about this element's OWN CONTROLS — it ships four dropdowns, not five, and that is * unchanged (see extractFilterOptions + the filters__panel template). What is added is a * `countryCode` INPUT so a host that already owns a country control (the cap-4 @@ -92,7 +92,7 @@ const props = defineProps({ // element's ONLY row-total and must stay. A HOST that already shows one passes false. // MEASURED on the cap-4 composite: the same 2,107 renders FIVE times down one page — KPI (y=117), // KPI duplicate (y=176), table bar (y=1228), table footer 'Σ 2,107 groups' (y=1827) and this - // 'Total: 2107' (y=1865). The last two sit 38px apart, which is the redundancy the Driver saw. + // 'Total: 2107' (y=1865). The last two sit 38px apart, which is the redundancy that was reported. showTotal: { type: [Boolean, String], default: true }, // ── external filter props (used when the matching internal control is hidden) ── @@ -105,8 +105,8 @@ const props = defineProps({ // ★ COUNTRY — WHY IT WAS DROPPED, AND WHAT MAKES IT SAFE TO MAP NOW. // - // THE DRIVER'S BUG (reported 2026-09-22): "when I click on India in the top countries nothing - // happens and the people groups grid just stays the same." That was accurate and the cause was + // THE BUG (reported 2026-09-22): clicking India in the top countries did nothing — + // the people groups grid stayed the same. That was accurate and the cause was // NOT a wiring fault. The cap-4 composite's FACET_TO_PROP translates dashboard facet keys to // grid props, and it mapped only four; `country_code` was one of eight facets deliberately // DROPPED, on the standing rule that it is better to not narrow on an axis than to push a value @@ -142,8 +142,8 @@ const props = defineProps({ // ── LANGUAGE + STATUS — the tree-rail axes, added on the SAME same-field test as country ── // - // Driver-reported 2026-09-22: the People/Place/Language/Religion tree rail "is not working with - // interoperability… with the people groups grid beneath it." Language and Status were two of the + // Reported 2026-09-22: the People/Place/Language/Religion tree rail was not interoperating with + // the people groups grid beneath it. Language and Status were two of the // axes a click could not reach, because there was no prop for the composite's FACET_TO_PROP to // land a value in. As with country, the honest fix is to add the real prop HERE first. // @@ -225,8 +225,8 @@ const cfg = computed(() => { if (!props.profileConfig) return {} try { return JSON.parse(props.profileConfig) || {} } catch { return {} } }) -// ── THE WORLD-MAP BACKDROP BEHIND THE FILTERS (Driver, 2026-09-24) ────────── -// "there is an SVG of a map that shows up under the search bar, where the toggles are." +// ── THE WORLD-MAP BACKDROP BEHIND THE FILTERS (requested 2026-09-24) ────────── +// An SVG world map shows under the search bar, where the toggles are. // It is DX-life's own treatment, ported rather than reinvented: UupgsList.vue puts // `background-image: url(/worldmap.svg); background-size: 60%; background-position: top` // on the container that wraps the search box and the toggles — a BACKGROUND, not an icon beside @@ -291,9 +291,9 @@ function reflectDir() { } catch (_) { /* no host (SSR/tests) — nothing to reflect */ } } watch(textDir, reflectDir) -// ★ ABSOLUTE CANONICAL DEFAULT (Driver 2026-09-23, pasted from his own browser: -// http://localhost:5174/research/pitaguari/ -- "when I click view more information it does not -// send me to the proper doxa.life page"). The old default '/research/' was ROOT-RELATIVE, so it +// ★ ABSOLUTE CANONICAL DEFAULT. Reported 2026-09-23 from a dev server at +// /research/pitaguari/: "view more information" did not +// send a reader to the proper doxa.life page. The old default '/research/' was ROOT-RELATIVE, so it // resolved against whatever origin happened to host the element: right on doxa.life, wrong on // every other host -- the dev server, an iframe embed, a partner site. Same defect class as the // ../../ child-src bug: a relative default encoding an assumption about the host. @@ -425,8 +425,8 @@ const loading = ref(true) const loadFailed = ref(false) // OPEN BY DEFAULT. The filters ARE the feature of this grid — the canonical chain asks for // "the same search bar + dropdowns as the UPG grid-list", so the dropdowns must be VISIBLE on -// load. Collapsed-by-default hid all four behind a text link, and the Driver reported exactly -// that: "they do not let me see the dropdowns to select them". Still collapsible (the toggle +// load. Collapsed-by-default hid all four behind a text link, which was reported as +// not letting a reader see the dropdowns to select them. Still collapsible (the toggle // remains) — the DEFAULT is what changed. const filtersExpanded = ref(true) const filterOptions = ref({}) @@ -617,7 +617,7 @@ function toggleExact() { // TWO VOCABULARIES MEET HERE, AND A STRICT === SILENTLY FILTERED TO ZERO. // -// THE BUG (Driver-reported + measured live 2026-09-22, dashboard-plus-grid leaf). Picking a +// THE BUG (reported and measured live 2026-09-22, dashboard-plus-grid leaf). Picking a // region in the dashboard above showed "1,309" in its own chart while the grid below said // "no people groups match this filter" — every host-driven selection produced ZERO cards. // Neither half was broken and the event wiring was correct; the two sides simply SPELL the @@ -721,8 +721,8 @@ function extractFilterOptions() { } // THE FOUR AXES ONLY — Country is deliberately absent here, and that is not an oversight. // filterOptions is what RENDERS the dropdowns (see the filters__panel template), so adding - // country_code would grow this element a FIFTH dropdown, which is exactly the control the - // Driver excluded. The new `countryCode` prop is an INPUT, not a control: it reaches the rows + // country_code would grow this element a FIFTH dropdown, which is exactly the control that was + // excluded. The new `countryCode` prop is an INPUT, not a control: it reaches the rows // through propFilters → activeFilters → applyDropdownFilters without ever passing through here. // // The cross-filtering still comes out right. updateFilterOptionCounts() below iterates @@ -762,7 +762,7 @@ function updateFilterOptionCounts() { // helper: apply a specific filter-set (used by the faceted-count cross-filter) // Uses the same valueMatches() as applyDropdownFilters: if the two disagreed, the facet COUNTS // would contradict the rows actually shown (a chart reading 1,309 above an empty list — exactly -// the symptom the Driver reported). One matcher, both call sites. +// the symptom that was reported). One matcher, both call sites. function applyWith(filters, list) { let filtered = list for (const [field, selection] of Object.entries(filters)) { @@ -1084,7 +1084,7 @@ onMounted(() => {