← DSIR SDG Data SkillCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to DSIR SDG Data Skill
Snapshot Sep 30, 2026 · 23:16 UTC · version 0.1.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Discover UN Sustainable Development Goal indicators and statistical series, retrieve country or regional observations, and export verified data with units, dimensions and provenance. Use for UN SDG database questions, including health-related SDGs; WHO GHO uses a separate workflow.",
"included_files": [
{
"relative_path": "LICENSE",
"size_in_bytes": 1233
},
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 256
},
{
"relative_path": "assets/dsir-logo.jpg",
"size_in_bytes": 14703
},
{
"relative_path": "references/indicator_selection_rules.md",
"size_in_bytes": 2104
},
{
"relative_path": "references/location_rules.md",
"size_in_bytes": 1607
},
{
"relative_path": "references/metadata/provenance.json",
"size_in_bytes": 484
},
{
"relative_path": "references/metadata/search_aliases.json",
"size_in_bytes": 754
},
{
"relative_path": "references/metadata/who_countries.json",
"size_in_bytes": 44915
},
{
"relative_path": "references/output_schema.md",
"size_in_bytes": 2295
},
{
"relative_path": "scripts/clean.py",
"size_in_bytes": 2754
},
{
"relative_path": "scripts/cli.py",
"size_in_bytes": 8988
},
{
"relative_path": "scripts/indicator_search.py",
"size_in_bytes": 4949
},
{
"relative_path": "scripts/locations.py",
"size_in_bytes": 3242
},
{
"relative_path": "scripts/qa.py",
"size_in_bytes": 3313
},
{
"relative_path": "scripts/sdg_client.py",
"size_in_bytes": 14905
}
],
"name": "dsir-sdg",
"skill_md_contents": "---\nname: dsir-sdg\ndescription: Discover UN Sustainable Development Goal indicators and statistical series, retrieve country or regional observations, and export verified data with units, dimensions and provenance. Use for UN SDG database questions, including health-related SDGs; WHO GHO uses a separate workflow.\n---\n\n# DSIR SDG Data Skill\n\nUse the bundled client to query the public UN SDG Global Database directly. The\nruntime requires Python 3.10+ and outbound HTTPS to `unstats.un.org`; it needs no\nR installation, DSIR installation, API key, MCP server or hosted service.\n\n## Execution\n\nLocate this skill's directory and run `scripts/cli.py` with an available Python\n3 interpreter. Paths below are relative to that directory. Do not install R or\nask the user to run commands. If script execution or script networking is\nunavailable, report the execution limitation; do not invent results or replace\nthe API response with remembered numbers. Web-search access alone does not\nestablish that scripts can access the API.\n\n```text\npython scripts/cli.py doctor\npython scripts/cli.py search \"UHC SCI\"\npython scripts/cli.py locations \"Western Pacific Region\"\npython scripts/cli.py describe 3.8.1\npython scripts/cli.py get 3.8.1 --locations WPRO --output-dir /writable/path/sdg-uhc\n```\n\nUse a fresh writable output directory. `get` prints a short preview and paths to\ncomplete results. Read `response.json` or `observations.csv` for the full result;\nnever treat the preview as the complete time series. Host output paths and Python\ncommands vary; do not assume a Windows user path or a particular bundled runtime.\n\n## Identify the statistic before retrieving it\n\nTranslate the user's concept into short English catalogue keywords. `search`\nsearches both indicator and series catalogues. Every code must be confirmed\nagainst the live catalogue, including codes supplied by the user.\n\n- Distinguish an SDG indicator such as `3.2.1` from its statistical **series**:\n infant versus under-five, counts versus rates, and stratifications can coexist.\n- Compare official series descriptions, units and dimensions using `describe`.\n Choose a standard series only when it clearly matches the request; state the\n choice. Ask when multiple reasonable choices materially change the answer.\n- A search score measures text relevance, not semantic equivalence. Censored\n values, denominators, thresholds and age ranges need literal checking.\n- Catalogue definitions change. In the release inspected during development,\n UHC is labelled **2025 methodology**, and `3.8.2` uses **40% of household\n discretionary budget**. Recheck the current catalogue. Do not substitute this\n for a request for 10%/25% of total household expenditure; explain the mismatch\n and ask whether the user wants the revised measure or another source.\n- This skill covers the UN database, including non-health SDGs when requested.\n Never silently switch a request for WHO GHO into UN SDG, or vice versa.\n\nRead [indicator selection rules](references/indicator_selection_rules.md) for\nambiguous metrics and methodology changes.\n\n## Resolve geography and time\n\nUse `locations` for names, ISO3 or numeric UN area codes. Suggestions are not\nresolutions: clarify if the command returns `needs_clarification`.\n\nWHO regions, UN geographic regions and income groups are different groupings.\nUse a named official regional observation when the live UN catalogue provides\none. WPRO resolves to the catalogue's **WHO Western Pacific** group, not Oceania\nor Eastern and South-Eastern Asia. Current-release historical observations do\nnot establish historical membership. Mention this for a regional time series;\nask about membership if the user requests country-derived aggregation. This\nversion does not calculate regional aggregates. Read\n[location rules](references/location_rules.md) when the grouping is uncertain.\n\nOmit year bounds for \"all available years\". \"Since 2015\" is inclusive. For\n\"latest\", retrieve coverage and use the latest observed year for each exact\nseries/area/stratum; disclose differing years across countries. Never create a\ncurrent-year value or fill gaps by interpolation.\n\n## Retrieve, inspect and answer\n\n`get` retrieves every server page for the indicator/area scope and verifies the\ndeclared total before filtering. Years, series and dimensions are filtered\nlocally, following DSIR's year-filter workaround. Supply the series chosen from\nthe live catalogue with `--series CODE`. Dimension/attribute filters use actual\nmetadata names and codes, for example `--dimension 'Sex=BOTHSEX'` only when the\nmetadata establishes that code. Repeat a flag for multiple allowed codes.\nUse the metadata entry's `code` value and confirm it against observed rows;\n`sdmx` is an alternative representation, not necessarily a valid filter value\nfor this JSON API (for example, use FEMALE/MALE where those are the returned\ncodes, rather than the associated SDMX F/M aliases).\n\nMetadata code lists can advertise dimensions that are absent from a particular\narea's actual observations. Inspect observed `observation_context.dimensions`\nbefore adding optional ALLAGE/BOTHSEX/ALLAREA filters. If such a filter produces\nno rows, check the unfiltered observation dimensions; do not infer that the\nindicator has no data. Preserve any population restriction explicitly requested\nby the user and explain when the source cannot establish it.\n\n```text\npython scripts/cli.py get 3.2.1 --locations PHL --series SH_DYN_MORT --year-from 2015 --dimension \"Sex=BOTHSEX\" --output-dir /writable/path/sdg-child-mortality\n```\n\nInspect `qa`, `coverage_by_location`, `metadata`, and `observation_context`.\nKeep all series and population strata separate; `dim1`/`dim2`/`dim3` being null\nin the DSIR core does **not** mean the observations have no SDG dimensions.\nUnits come from observation attributes and their metadata code lists. Read\n[output schema](references/output_schema.md) when constructing a table.\n\nFailure states have different meanings:\n\n- `un_api_request_failed`, `invalid_response`, `incomplete_data`: retrieval did\n not establish a complete result; do not say that the UN has no data.\n- `indicator_not_found`/`series_not_found`: absent from the current catalogue.\n- `indicator_no_data`: valid indicator, but a successful global query/probe has\n no observations.\n- `filters_no_data`: observations exist, but the requested scope/filters have\n none. For mixed-country queries inspect missing-country coverage separately.\n- `qa_failed`: keep the artifacts for inspection and explain the problem;\n do not present the affected result as verified.\n\nAnswer in the user's language. Give the official indicator name/code, selected\nseries code/name/methodology, geography, observed years, population dimensions,\nunit and denominator, UN SDG source, retrieval date and relevant limitations.\nShow the requested values with raw display text and uncertainty bounds when\npresent. Cite the actual query URL from provenance and offer the complete\n`observations.csv`. Identify WHO as a custodian only if the returned source says\nso. Do not label this personal skill an official UN or WHO service.\n"
}SHA-256 of public snapshot: b8857a341250937262822e39fe0fef6d4f0fdc6f304834d43f3b892f672da0a1