Skip to content

v1.9.0 - Legible ABS payloads and leaner responses

Choose a tag to compare

@AnthonyPuggs AnthonyPuggs released this 10 Jun 20:52
· 18 commits to main since this release

v1.9.0 - Legible ABS payloads and leaner responses

This release implements the four High-priority findings from the 11 June code review,
all aimed at what the LLM consumer actually receives: ABS payloads a model can read
without a second lookup, responses that stop repeating themselves, and an MCP server
card that reports the full surface.

✨ ABS responses now carry labels, not codes

ABS data is now requested with format=csvfilewithlabels, so every retrieval returns
human-readable labels instead of bare SDMX codes:

Field Before After
Series label 1 / 10001 / 10 / 50 / Q Index numbers / All groups CPI / Original / Australia / Quarterly
unit IN Index Numbers
frequency Q Quarterly
REGION dimension {"code": "50", "label": "50"} {"code": "50", "label": "Australia"}
base_period 25 Sep 2025 = 100.0

ABS metadata also gains a title field (e.g. "Consumer Price Index (CPI)"),
matching what RBA payloads already provided.

The labelled layout pairs every code column with an adjacent label column and replaces
DATAFLOW with STRUCTURE/STRUCTURE_ID/STRUCTURE_NAME — verified against the live
API. The parser detects the paired-column layout automatically and still parses the
legacy code-only layout unchanged
, with dual-format fixtures proving both paths.

series_id is unaffected — it is still built from dimension codes, so existing
series references keep working.

📉 Per-observation dimensions are gone by default

Every observation used to repeat the full dimension dict already present on its series
descriptor — measured at ~3.5× payload inflation on the most common ABS calls, and it
would have grown further once labels landed. Observations are now slim by default:

{ "date": "2025-Q3", "series_id": "MEASURE=1|INDEX=10001|TSEST=10|REGION=50|FREQ=Q", "value": 141.1 }
  • Dimensions remain on each series descriptor and are encoded in series_id.
  • Pass include_observation_dimensions=true to get_abs_data, get_rba_table,
    get_apra_data, or get_economic_series to restore the per-observation dicts —
    served from the same cache, no refetch.
  • The response schema no longer lists dimensions as required on observations; the
    property stays defined for the opt-in case.

🛠 The server card now reports the full surface

/.well-known/mcp/server-card.json previously hard-coded "resources": [] and
"prompts": []. It now enumerates everything the server registers:

  • 2 resourcesausecon://catalogue, ausecon://concepts
  • 3 resource templates — including the previously missing
    ausecon://apra/{publication_id}, which now exposes curated APRA catalogue
    entries like its ABS and RBA counterparts
  • 8 prompts — with names, descriptions, and arguments

🧹 Housekeeping

  • Removed two git-tracked file-sync collision artefacts (* 2.py) and added a
    repository-hygiene test that rejects the pattern so it cannot recur.
  • Backfilled the missing 1.7.0, 1.7.1, and 1.8.0 changelog sections and reconciled
    server.json and the docs with the actual release history.

⚠️ Behavioural changes

  • Label-bearing fields change value on ABS responses: frequency is now "Quarterly"
    rather than "Q", unit is "Index Numbers" rather than "IN", and dimension
    labels are human-readable. Consumers matching on short codes should use
    dimensions[*].code (unchanged) instead.
  • Observations no longer include a dimensions key unless explicitly requested.
  • No tool names or existing inputs changed; the new include_observation_dimensions
    parameter is additive and defaults to false. series_id construction and
    chronological observation ordering are unchanged.

🧪 Verification

  • 803 tests passing, including new dual-format parser coverage, slim/opt-in service
    tests, server-card enumeration tests, and schema validation for both observation shapes.
  • ABS fixtures regenerated from live csvfilewithlabels captures.
  • Live smoke against the ABS API confirming labelled, slim, chronologically ordered
    CPI retrieval end-to-end.

Full changelog: v1.8.0...v1.9.0