All notable changes to SurvEye (Stata command surveye) and its former
development names are documented here. The format follows
Keep a Changelog, and releases use
semantic versioning.
- Pooled-scale datasets exhausted the Java heap while loading the CSV —
31 million cells stored as 31 million separate string objects — so
builds died with
OutOfMemoryError: Java heap spaceinside Stata's default ceiling. The CSV reader now interns repeated cell values into shared strings: a 150,000-row regression fixture builds inside a deliberately capped 160 MB heap. When memory does run out, the bridge error now states the remedy (set java_heapmax 4g, permanently, then restart Stata), and the help file gained a Troubleshooting entry. - Per-chart compare-by splits truncated high-cardinality groupers
silently and arbitrarily: the first 14 levels in dataset order, which
for a country-sorted pooled file meant Afghanistan through Belize.
Splits now rank groups by weighted frequency, show the largest 20, and
disclose the truncation in the stat line ("largest 20 of 40 groups",
localized). For all-groups views,
tableby()and country filters remain the right tools. - Pooled legacy datasets (surveys aggregated from pre-Stata 14 files) can
carry extended-ASCII bytes in value labels and string cells; the
engine's strict UTF-8 readers died on the first such byte with the
opaque
surveye: Input length = 1(a Java MalformedInputException) before any status was written. Config and CSV reads now decode leniently (invalid bytes become U+FFFD), and the Stata wrapper additionally repairs label text withustrfix()at the emission source, so a stray en dash from 2006 can never kill a 2026 build. Regression-tested with raw0x96/0xE9bytes in both files.
surveye configure using "questionnaire"writes a self-contained, offline HTML configurator: the parsed questionnaire (Survey Solutions preview, SurveyCTO form definition, or SurveyCTO printable) opens as a searchable, section-grouped item list with type badges and repeat flags, and point-and-click builders assemble the full command — variable selection, chart-type overrides, variable groups offered only across compatible single-selects, comparisons with the 2–5 level rule enforced as you click, filters, weights, USD conversion, titles, byline, language, and theme — composing a ready-to-runsurveyecommand line (copy or download as a .do file) plus an engine config TSV for advanced pipelines. Selections persist locally per questionnaire.
Reader-facing feature release. Every addition works inside the existing
self-contained HTML output; no new Stata options and no runtime network
dependency are introduced. The release-specific engine is now
surveye_2_2_0.jar.
surveye,surveye describe, andsurveye demonow accept SurveyCTO questionnaires alongside Survey Solutions previews, detected by content rather than file extension. The ODK XForm form definition (XML) is parsed precisely: titles, top-level groups as sections, nested groups as subsections, repeats (flagged), binds and types, inline choice items, itemsets over secondary instances, jr:itext translations (default language), notes (skipped), and calculate fields (charted when typed).- SurveyCTO split select_multiple exports (
field_1,field_2, ...) are reassembled into multiselect charts automatically; single_one filters, demo simulation, GPS candidates, and the profile table all work unchanged. - The printable SurveyCTO HTML form is read directly, certified against a
real production export: the printed Field/Question/Answer table, dark
top-level group rows as sections, breadcrumb subgroup rows (including
"(Repeated group)") as subsections with repeat scope, spacer-based
nesting depth, nested choice tables with codes and labels, relevance
captured as conditions, and hints kept out of labels. Printables do not
encode field types, so choice fields import as select_one and open,
note, or calculated fields as text; display-only notes drop
automatically when no data column matches, and one warning explains all
of it. Detection also recognizes the table layout structurally, so
exports that never mention SurveyCTO by name still parse. Panel
subtitles now show reader-facing type captions ("single-select",
"numeric decimal", "choice list") instead of internal tokens.
Unrecognized layouts fail with directions to the fully supported XML
definition.
tests/run_surveycto_tests.shcovers describe, build, demo, the printed table layout end to end, both negative paths, and Survey Solutions regression, and runs in CI.
- The README opens with a screenshot gallery (
docs/screenshots/): the Sri Lanka 2026 informal-sector fieldwork dashboard masthead (forest theme, byline, live filter count),surveye demoon the full B-READY 2025 Australia instrument with a simulated section of results, and an informal-sector module band whose chart values are simulated so no preliminary fieldwork results circulate.
- Every chart carries a Customize popover (⚙): switch between bars and a donut where the two are statistically equivalent (single-select and yes/no cards), pick an accent color, scale chart fonts, and toggle value labels, rewrite the chart title in place — the edited title shows on the card, feeds the PNG download, and survives reloads — and split any eligible chart by a filter variable with "Compare by": a categorical indicator becomes one 100% composition bar per group (city, gender, ...) with a shared legend, and a numeric indicator becomes the median per group, honoring weights and the currency toggle. The split respects every active filter except the grouping variable itself, so filtering to one city never collapses a by-city view, and clearing the split restores the original chart.
- A Chart size control (Compact / Default / Tall / Extra tall) resizes any chart's drawing area, and a sizing engine grows the area automatically when a preference demands room: switching a slim yes/no card to a donut, or splitting it by a filter variable, now gets a properly sized chart instead of a squeezed arc or overlapping labels crushed into the 42-pixel split-bar strip. Custom sizes persist, reset cleanly, and get a sane fixed height in print.
- The accent color now recolors every chart family: the affirmative series of yes/no cards and their compare-by splits (matched by the questionnaire's affirmative codes, not data order), the leading donut slice, the Answered side of completion cards, the date trend line, the primary (affirmative) series of grouped families, and the first level of configured comparisons — verified pixel-by-pixel across all nine chart kinds in a headless browser. Changes are presentation-only — estimates never move — apply instantly, persist per dashboard in the reader's browser, and can be reset per chart. Localized in English, Arabic, and Urdu; hidden in print.
- The per-chart PNG download was redesigned. It previously exported the bare canvas with a single clipped title line, so yes/no cards lost their headline percentage and legend (rendered in the page, not the canvas) and long questions were cut off. Downloads now compose a presentation-ready image at 2× resolution: the wrapped question title, a meta line with the variable name and live filtered statistics, the chart, the yes/no summary figure and legend where applicable, and a source footer with the dashboard title and date — all following the active theme and any per-chart customization. Labels are complete: titles wrap up to eight lines instead of clipping, bar axis labels wrap to three wider lines on comfortable density, donut downloads replace the space-shortened in-canvas legend with a full legend below the chart (every category written out with its share), and bar downloads append any label the axis still had to truncate, written in full. Export failures now surface on the browser console instead of failing silently.
- SurveyCTO printable forms cannot encode field types, so their open
fields import as text; the Stata side has always sent each selected
variable's storage type,
%tformat, and value labels, but the engine only consulted that metadata for variables absent from the questionnaire. Questionnaire-present questions now take those overrides too — gated so they only fill gaps: a printable's text-typed open field promotes to numeric, date, or labelled categories (disclosed as "typed …" in the panel caption), while types declared by an XML form or a Survey Solutions questionnaire remain authoritative and are never re-typed (a labelled numeric would otherwise flip a histogram into bars). Verified against SurveyCTO's rosters sample printable (JSI variant), whose colored-spacer depth encoding,#8C8C8Croster headers, and breadcrumb repeat markers are now a permanent parser fixture; the SurveyCTO suite grew to 9 checks. release.shverified its archives withunzip -Z1 | grep -qpipelines: underpipefail,grep -qexiting at the first match killsunzipwith SIGPIPE, so a file that was present could nondeterministically report as missing. Each archive is now listed once to a file and checked from that list. The SSC archive composition was also corrected to the official submission rules: onlysurveye.ado,surveye.sthlp,surveye_2_2_0.jar,example.do,LICENSE, andTHIRDPARTY-LICENSES.md-- neversurveye.pkgorstata.toc(the archive generates both) and never the GitHub-only genericsurveye.jar.tests/stata_smoke.donow runs underset varabbrev off, matching the SSC requirement, andSURVEYE_KEEP_STAGING=1preserves release staging for inspection.- Refreshing the GitHub repository through the web uploader (which never
deletes files) could leave the retired
surveye_2_1_3.jarand the old workflow in place, failing CI with a crypticcmpbyte difference.tests/check_package.shnow fails any stalesurveye_*.jarwith an explicit message and the web-UI removal steps, the workflow runs that check before the rawcmp, andGITHUB_UPLOAD.mddocuments the removed files, the hidden-.githubcaveat, and an exactgitmirror recipe. - The help file contained three physical lines over 244 characters, which
Stata's viewer corrupts by dropping 8-byte chunks at 256-byte boundaries
(rendering, e.g.,
digital_channelasdigi nel), plus one{it:...}directive spanning a line break, which SMCL forbids. All example commands are rewrapped with{cmd:...}closed and reopened per physical line, andtests/check_stata_source.shnow fails on any help line over 244 characters or any line that leaves an SMCL directive open. - Runtime dark mode now works under every theme and finish: the editorial
finish palette is scoped
:not([data-theme="dark"])so toggling dark on a default (editorial) build no longer mixes the cream palette into the dark one, and dark-specific overrides were added for the sticky top bar, active section-navigation pill, pressed filter chips, the mobile filter toggle, and the benchmark-row rule — all previously navy-on-near-navy. Toggling a dark-built dashboard switches to the light World Bank base and back.
byline("Label|Name|Role|Email")signs the masthead cover with a task-team attribution block (label pill, name, role, mailto link) in build and demo modes; all parts optional, Arabic-script aware, styled for print.- Emphasis syntax in
title()andsubtitle(): a pair of asterisks renders as a cyan accent in the title and bold in the subtitle, while the browser tab title and language detection see plain text. - The stratum profile table gains table-lens micro-bars under every share cell (absolute 0–100 scale; gold on the benchmark row) and a filled-navy uppercase header row; both restyle in dark mode and flatten for print with forced bar colors.
- The top bar carries a dim gold track that the cyan-to-gold reading-progress bar fills as the page scrolls, and section-navigation hover picks up the cyan tint.
- The dashboard typeface is now Public Sans (SIL OFL 1.1), embedded as a 34 KB
Latin variable-weight WOFF2 so files stay fully offline; true tabular
numerals now apply to every KPI, table, and axis. Arabic and Urdu interfaces
keep their Noto stacks, and the
typography(editorial|modern|system)finish options remain available as explicit overrides. - The hero is a deep-navy cover card with a faint sampling-grid graticule and an animated cyan-to-gold base rule; the same spectrum now forms the topline and the reading-progress bar. The sticky controls card straddles the cover's bottom edge.
- Warm archival paper (the SurvEye/ISES house
#FBFAF6) with warm hairlines and soft fills, under navy-keyed ink and shadows — the print-report ground the navy cover and gold accents sit on. Chart data colors are unchanged. Section numerals render as navy grid cells; serif display type is replaced by heavy-weight sans throughout. - Dark theme gains layered blue-black surfaces and a dark-specific cover treatment. Print output neutralizes the cover to ink-on-white; reduced-motion disables the rule animation; RTL mirrors the cover pattern and rule.
- Light/dark theme switch. A toggle in the sticky top bar lets readers
switch between the built theme and the dark theme at any time. Charts,
the profile table, and map point colors re-skin immediately, and the
choice persists across reopenings when browser storage is available.
Dashboards built with
theme(dark)start dark and can be switched to light. Interface strings are localized in English, Arabic, and Urdu. - Shareable view links. The active filters, the weighted/unweighted switch, the currency switch, and the search query are mirrored into the page URL. A Copy view link button in the control bar copies a link that reopens the dashboard in exactly the same state — useful when circulating a specific subgroup view by email or chat.
- Filtered-data CSV export. A Download data (CSV) button exports the currently filtered interviews. Categorical codes are written using their questionnaire labels, multi-select answers are joined with semicolons, the weight column is appended when the dashboard is weighted, and a UTF-8 byte-order mark keeps Excel rendering correct. Only data already embedded in the file is exported, so the feature adds no new disclosure surface.
- Per-chart PNG export. Each panel gains a small download control that saves the chart — composited on the current card background with the panel title — as a PNG named after the variable.
- Expand all / Collapse all. Two buttons at the end of the sticky
section navigation open or close every section at once; helpful on
large instruments built with
maxpanels(0). - Back-to-top button and reading-progress bar. A floating return-to-top control appears after scrolling, and a thin cyan-to-gold progress bar under the top bar shows position within the document. Both are RTL-aware and hidden in print.
- Keyboard shortcuts.
/opens the controls and focuses the indicator search from anywhere on the page;Escapeclears an active search.
- Chart palette colors are re-read from CSS custom properties whenever the theme changes, instead of being captured once at load.
- Editorial finish refinements: a restrained cyan/gold hero glow, gentle
hover elevation on panels and KPI cards, softer section-summary hover
states, styled thin scrollbars on internal scroll regions, and a
brand-tinted text-selection color. All motion respects
prefers-reduced-motion, and the new controls are excluded from print output.
- Version contract updated throughout:
surveye.pkg,stata.toclayout,MANIFEST.MF, the ado wrapper, the help file, and the release checks now reference 2.2.0 andsurveye_2_2_0.jar.
- Added the survey-agnostic
editorialtheme, now the default, based on the warm paper canvas, World Bank role colors, serif hierarchy, softened cards, and restrained finishing of the generic informality dashboard. - Added independent
background(),typography(),corners(),shadow(),motion(), andpagewidth()presentation controls for build and demo mode. - Added a reduced-motion-safe Java appearance post-processor, portable tests, and a refreshed bundled example dashboard.
- Removed the separate Survey Solutions branding and embedded-data strip, including its top rule, from every generated dashboard theme. The dashboard now begins directly with its main header and navigation.
- Explicit
theme(worldbank),theme(clean),theme(forest), andtheme(dark)retain their previous appearance unless a new layer option is supplied. Appearance processing does not alter data, chart calculations, filters, weights, currency conversion, tables, or maps.
- Added a runtime Weighted estimates switch whenever a native Stata weight is supplied. Weighted results remain the default; readers can recalculate charts, comparisons, numeric summaries, and profile tables without weights while raw sample counts remain unchanged.
- Added a local-currency/USD switch configured by
usdvars(),usdrate(), andcurrency(). Local currency remains the default, and one documented fixed rate updates declared monetary charts, Stats, and profile-table summaries. - Added a responsive side-by-side profile table configured by
tableby()andtablevars(), withauto,share, explicit-code share, mean, median, and sum columns; optional column labels, title, subtitle, all-group reference label, and weighted-total heading; and live filter, weight, and currency refresh. The table ignores only its own grouping filter so all comparison rows and the reference benchmark remain visible.
- Removed Tukey fences, outlier counts, weighted outlier mass/share, whisker boxes, tail annotations, and outlier-specific colors from numeric cards.
- Numeric distributions now retain every valid measurement across their full
plotted range. A single dotted
Mean + 3 SDreference is drawn only when the standard deviation is positive and the reference lies strictly inside that range. - Kept wide integer supports readable with automatic equal-width,
integer-aligned bins and regular numeric ticks, independently of
maxcategories().
- Recalculated every numeric Stats table from the current filtered rows even while its Stats tab is open and the lazily rendered chart canvas is hidden.
- Applied the same live filter refresh to unweighted and weighted summaries, including valid/missing counts, moments, quantiles, and the 3-SD reference.
- Made integer distributions independent of
maxcategories(). Exact bars and zero-frequency gaps are retained while readable; wider supports now use equal-width, integer-aligned bins automatically. - Replaced categorical histogram axes with numeric linear axes and regular round-number ticks for both discrete and continuous distributions.
- Kept complete summary statistics while preventing extreme Tukey tails from flattening the visible distribution; low/high tail counts are shown at the corresponding plot edges.
- Prevented isolated extreme positive values from expanding an integer chart
into hundreds of empty bars and producing labels such as
18, 79, 140, .... - Added Arabic and Urdu interface text for smart integer bins, display ranges, and outlier-tail annotations.
- Fixed quoted
comparelevels()values in Stata. Options such ascomparelevels("Male|Female")now reach the engine as the two display labelsMaleandFemale, instead of the literal fragments"MaleandFemale". - Fixed the same outer-quote handling for documented
vargroups("Title:: ...")specifications. - Added engine-side defensive quote normalization and regression coverage for labeled numeric comparison groups and quoted manual families.
- Added automatic related-variable families for compatible binary letter-suffix items such as
srib8a srib8b srib8c. Addedvargroups(),ungroupvars(), andnoautogroupsfor explicit placement, opt-out, and manual grouping. - Added
compare()with requiredcompareby(), optionalcomparetitle(), andcomparelevels()for full-width grouped horizontal comparisons of up to 12 binary indicators across two to five subgroups. - Added exact-value displays for small integer counts and
discrete(),continuous(), andnoautodiscretecontrols. Discrete charts retain zero-frequency integer gaps, show a weighted median, flag Tukey outliers, and keep a complete Stats tab.
- Gave grouped families and comparisons a symmetric full-width layout with direct percentage labels, stable colors, subgroup-specific valid denominators, and native Stata-weight support.
- Kept confidence intervals off binary family and subgroup-comparison panels, including when
ciis requested; ordinary eligible categorical bars retain opt-in intervals. - Balanced incomplete card rows into deliberate three-, two-, or one-card compartments and retained compact chart heights.
- Replaced the tall sticky filter block with a compact disclosure toolbar that starts collapsed and preserves active filters when closed.
- Set normal Chart.js transitions to 800 milliseconds and delayed chart construction until a panel is visible so animations do not finish offscreen. Reduced-motion users still receive no animation.
- Replaced Survey Solutions' generic calculated-variable labels with actual variable names when no meaningful label exists.
- Excluded questionnaire-declared negative special codes and configured missing codes from numeric distributions, medians, statistics, outlier detection, and numeric filter choices while retaining them in categorical figures.
- Corrected custom numeric value-label lookup so attached label definitions no longer raise Stata
r(111). - Applied
maxpanels()only after family construction so a grouped panel is never split, and made explicit comparisons take precedence over automatic grouping.
- Existing 2.0 syntax remains valid. Automatic grouping is conservative and affects only compatible binary suffix families; use
noautogroupsto retain one panel per variable.
- Added complete English, Arabic, and Urdu dashboard-interface dictionaries, including controls, chart summaries, numeric statistics, map text, empty/error states, and footer explanations.
- Added
uilanguage(auto|english|arabic|urdu), withen,ar, anduraliases. Automatic resolution gives priority to declaredar/ur, then detects Urdu-specific or other Arabic-script questionnaire text, and otherwise selects English. - Added
direction(auto|ltr|rtl). Automatic direction follows the resolved interface language—Arabic and Urdu use right-to-left, while English uses left-to-right; an explicit direction overrides layout without changing the selected interface language. - Added localized HTML
langanddirmetadata and right-to-left component behavior for navigation, controls, cards, charts, tables, tooltips, and Leaflet controls. - Expanded documentation and examples for all four native Stata weight forms:
[aw=wmedian],[fw=frequency],[iw=importance], and[pw=pop]. - Added keyboard-operable point markers to Leaflet maps. Every individual point exposes a localized accessible label and opens its popup with Enter or Space.
- Added weighted Tukey-outlier mass and share to the numeric Stats tab, alongside the raw outlier count.
- Added the
ciflag for opt-in pointwise Wilson intervals on ordinary categorical and multiselect horizontal bars.level(#)requiresciand defaults to 95 when intervals are requested.
- Breaking: adopted the SurvEye product name and renamed the Stata command
and distribution package from the former
suso_dashboardname (and interimsurveydashpreview) tosurveye. The installed entry points are nowsurveye.ado,surveye.sthlp,surveye.pkg,surveye.jar, andsurveye_2_0_0.jar. Existing do-files must replace the former command name. - Clarified that weights use Stata's native bracket syntax after the
usingfilename and before the comma; there is noweight()option. - Added native importance-weight support for descriptive estimates. Because iweights have no general sampling interpretation, requested confidence intervals are suppressed automatically with an explanatory note.
- Standardized weight validation: one numeric variable is allowed, negatives are rejected, fweights must be integers, and zero or missing weights are excluded from the analysis sample for every weight type.
- Changed confidence intervals from automatic to opt-in so dense dashboards remain visually clear. Binary yes/no, answered/missing completion, and donut cards never display CI text or whiskers, even when
ciis supplied. - Retained the compact visuals, custom-variable placement, optional confidence intervals, outlier-aware Stats tab, and Leaflet/Google map behavior introduced in 1.2.0.
- Localized generated Additional indicators, Other indicators, and untitled Key message headings instead of leaving English fallback text in Arabic or Urdu dashboards.
- Corrected the public and parser-facing weight order to Stata's
using questionnaire.html [weight], optionsgrammar and added a static regression guard for every shipped example. - Preserved date formats and missing/special metadata for custom, filter-only, and highlight variables, including the
maxcategories(12)boundary with 12 valid filter levels plus an excluded code. - Corrected dark-theme chart, brand, and numeric-tab contrast and kept percentage/share demo values in their natural 0–100 range.
- Serialized affirmative and negative response codes from the Java parser so Turkish, Russian, Chinese, Japanese, Arabic, Urdu, Sinhala, and other recognized binary labels receive the correct colors without relying on a narrower browser-side translation list.
- Made histogram outlier counts readable, used theme-aware donut separators and confidence-interval halos, darkened labels placed inside light blue bars, fixed the map legend text token, and forced dark dashboards to print on a light background.
- Made filters type-aware and observed-value-only: numeric comparisons are normalized, multiselect filters match any selected valid option, completion filters distinguish answered from missing, and configured missing codes never become filter choices.
- Kept GPS rows whose
mapby()value is configured missing as visible ungrouped points while excluding those values from map legends and category limits. - Fully mirrored horizontal bar axes and direct-value labels in RTL layouts, and hardened category, filter, navigation, and map dictionaries so legitimate values such as
__proto__,constructor, andtoStringcannot corrupt dashboard state. - Embedded the applicable Chart.js, Leaflet, and Noto Sans Arabic license notices in each standalone HTML output and documented that the keyless Google tile URLs are unofficial compatibility endpoints whose availability and terms may change.
- Made Reset all clear the indicator search as well as response-filter choices, and refreshed visible charts and Leaflet sizing after the controls panel changes height.
- The questionnaire/data workflow and dashboard options remain otherwise compatible with 1.2.0. The command/package rename is the intentional major-version break.
- Requested weighted confidence intervals remain descriptive: frequency weights use weighted counts, analytic and probability weights use a labelled Kish effective-sample-size approximation rather than design-based survey variance estimation, and importance weights suppress intervals.
- Added
customvars()for variables present in the Stata data but absent from the questionnaire. Custom charts use the Stata variable label by default and infer categorical, numeric, or date behavior from storage type, supported%tc/%td/%tw/%tm/%tq/%th/%tyformats, and value-label metadata. - Added
addtosections()so declared custom variables can be placed in an existing selected section by exact title or number, or in a newly named section, without reorganizing the rest of the questionnaire. - Added embedded Leaflet 1.9.4 map rendering with the
esqc_gpsbase-layer choices:google_hybrid,google_sat,google_road, andosm. - Added pointwise Wilson confidence intervals to categorical shares, with configurable confidence levels.
- Added a Stats tab to numeric cards with valid and missing counts, mean, standard deviation, extrema, quartiles, median, Tukey fences, and outlier counts.
- Added an outlier-aware distribution guide and histogram scale using Tukey's 1.5-IQR whisker range while retaining extreme values in numeric statistics.
- Changed the GPS defaults to
maptype(points)andbasemap(google_hybrid). Every valid observation now receives an individual circle marker; exact coordinate duplicates are separated slightly on screen so each remains selectable. - Kept
maptype(cluster)andmaptype(heat)as explicit aggregated displays rather than silently combining points by default. - Map-enabled dashboards now fetch the selected Google or OpenStreetMap tiles when opened. Leaflet, survey points, and boundary geometry remain embedded, and dashboards without maps retain no runtime network dependency.
- Updated the privacy notice to state that map-enabled files embed valid coordinates at six decimals for points, four for cluster, and three for heat. Reduced precision and visual aggregation are not presented as a substitute for formal disclosure control.
- Weighted confidence intervals now label analytic- and probability-weight results as effective-sample-size approximations and explicitly note that they are not adjusted for complex survey design.
- Replaced the stretched static SVG Leaflet overlay with true WGS84 boundary rings so country and Admin-2 lines align with GPS points; antimeridian countries are normalized onto one longitude branch.
- Counted expanded-multiselect respondents in the combined Other category once even when they selected more than one grouped response.
- Prevented extreme numeric values from flattening the main histogram while continuing to report them transparently as outliers.
- Added
density(compact|comfortable)so users can switch between the space-efficient default and a roomier presentation. - Added concise, screen-reader-friendly chart summaries and reduced-motion support.
- Redesigned the dashboard as a responsive three-, two-, or one-column grid for wide, medium, and mobile screens.
- Replaced binary and completion donuts with compact 100% split bars that display values directly.
- Made sorted horizontal bars the automatic categorical display; donut charts are now available only when explicitly requested.
- Compacted numeric histograms and date visuals, including a visible median marker for faster distribution reading.
- Collapsed optional GPS maps to a compact summary in compact mode while keeping the full interactive map one click away; comfortable mode opens maps initially.
- Strengthened responsive visual QA across desktop, tablet, mobile, overflow, accessibility-summary, and reduced-motion states.
- Returned Stata numeric missing directly for mode-specific status fields that are absent or explicitly
.instead of passing.toconfirm numberand raisingr(498). - Guarded GPS summary formatting until all map counters are present.
- Added licensed-Stata regressions for sparse, explicit-missing, and genuinely malformed numeric status records.
- Added strict Java status-schema checks for build, demo, describe, engine-error, and bridge-linkage paths.
- Added the fully qualified Stata plugin entry point
org.worldbank.suso.dashboard.StataPluginwith a fallback status-file handoff for linkage failures. - Added a release-specific
suso_dashboard_1_0_3.jarfor Stata while retainingsuso_dashboard.jarfor command-line use.
- Prevented an obsolete unversioned JAR earlier on the ado-path from shadowing the engine required by the current ado file.
- Replaced the absolute mixed-separator Windows JAR argument with Stata's documented
jars()ado-path lookup. - Preserved
javacallloader and JVM diagnostics instead of suppressing them withquietly. - Added a specific explanation for Stata
r(5100)when the installed JAR is stale or incompatible.
- Added an explicit
buildsubcommand for datasets containing a leading variable nameddescribeordemo. - Added a licensed-Stata smoke do-file covering main, describe, demo,
if, weights, all-missing rows,showempty, macro-safe Unicode text, output protection, and returned results.
- Replaced the invalid bare
tabtoken in Statafile writewith the required_tabdirective and added a source-contract regression check. - Protected configuration and status strings from unintended Stata macro expansion.
- Resolved abbreviated weight names before CSV export and Java configuration.
- Preserved observations missing on every selected field by exporting a noncharted analysis-sample sentinel.
- Allowed
showemptyto reach Java when no selected response column exists. - Accepted logical questionnaire names in
exclude()and rejected chart/exclude contradictions consistently. - Prevented relative-path aliases and symlinks from allowing outputs or diagnostics to overwrite questionnaires, data, boundaries, logos, status files, or each other.
- Added fallback Java status reporting for configuration-read errors and clearer diagnostics for missing status files.
- Corrected construction of the Stata analysis-sample marker so commands without
if,in, or weights no longer stop with__000000 not found(r(111)).
- Stata 16+
rclasscommand with main,describe, anddemomodes. - Direct, platform-independent Stata-to-Java bridge through
javacall. - Survey Solutions questionnaire parser designed for English, translated, legacy, and current printable HTML variants.
- Automatic and explicit variable selection, questionnaire section selection, section-title matching, exclusions, and custom sections.
- A responsive 100-panel default limit for large dashboards, with
maxpanels()control and an unlimited opt-in. - Logical
questions()selection with exact and Survey Solutions multiselect-expansion export; it can be combined with the Statavarlist. - Automatic chart choice plus bar, donut, and histogram overrides.
- Dashboard filters, highlight cards, key messages, titles, subtitles, notes, source lines, disclaimers, embedded logos, and four themes.
if,in, analytic-weight, frequency-weight, and probability-weight support.- Temporary UTF-8 raw-code CSV export containing only the variables required by the requested dashboard.
- Optional country GPS map with clustered, heat, and point displays; bundled country outlines; user-supplied WGS84 boundary ZIPs; Admin-2 support; map grouping; and coordinate QA counts.
- Self-contained offline HTML with embedded Chart.js, data, CSS, logo, and map geometry.
- Structured status exchange and documented
r()results for automation and QA. - Friendly input validation, strict mode, diagnostic logging, and refusal to create empty dashboards from unrecognized questionnaire files.
- Stata help, runnable example do-file, GitHub/SSC package metadata, license, and third-party notices.
- Matched zero-padded questionnaire option codes to Stata numeric exports while preserving genuine string categories.
- Reduced text, media, GPS-completion, and unlabeled linked text-list questions to answered/not-answered flags.
- Calculated weighted means, medians, shares, and histograms consistently, including safe handling of zero-total-weight selections.
- Distinguished unanswered expanded multiselect rows from answered all-zero rows so respondent denominators remain correct.
- Recognized ISO, Stata daily, Stata datetime, and common displayed-date forms without generating invalid demo dates.
- Omitted invalid GPS rows, kept map colors stable under filtering, and aligned map points at mobile sizes.
- Preserved negative numeric responses in histograms instead of treating every negative value as missing.
- Preserved a valid source-document language tag and used
lang="und"when the questionnaire does not declare one. - Removed Survey Solutions Markdown links and formatting artifacts from displayed labels.
- Added explicit
filters()selection and metadata/cardinality checks; automatic suggestions remain conservative and language/name dependent. - Tightened automatic filter matching to whole concepts, avoiding false matches such as
stateinsidestatementsorstratinsideadministrative. - Applied
maxcategories()to bar, multiselect, and donut displays using a top-levels-plus-Other rule while preserving the full denominator. - Replaced raw Java stack traces for common user errors with concise Stata and engine messages.
- Removed runtime dependencies on Google Fonts, CDNs, and other network services.