Skip to content

This is one run, published the way it came out of the app. The report below, its figures, its captions and its notes on the data are the agent's own; nothing has been re-run to look better, and the calls that failed are shown where they happened.

The prompt

The prompt, as typed

For every NSW federal electorate, combine projected days over 35 °C by 2050 under the high-emissions scenario, the share of land that is bushfire-prone, and the average median household income. Which ten seats pair the largest rise in hot days with the lowest incomes? Table them with the sitting member, chart heat rise against income, and map all NSW seats by projected hot days.

Datasetsclimate_projectionsdivision_profileelectoral_boundaries

17 tool calls6s analysis3 datasets

This is a distributional question wearing a geography question's clothes. Each of the three measures is available on its own and none of them is published on an electorate: the heat projection is a climate model grid, the bushfire layer is a state hazard map, and the income is a census figure on statistical areas. Putting them on the same boundary and then asking which seats sit at the bad end of two of them at once is the whole job.

What the agent did

  1. Loaded expertiseLoaded expertise: climate-risk screening.
  2. Loaded expertiseLoaded expertise: elections, electorates & seat analysis.
  3. Loaded expertiseLoaded expertise: report, briefing & editorial writing.
  4. Describe`division_profile` — 150 rows across 1 file(s). Columns: boundary_set BYTE_ARRAY, division_name BYTE_ARRAY, state BYTE_ARRAY, area_sqkm DOUBLE, label_point_lat DOUBLE, label_point_lng DOUBLE, h3_r9_ce1.2s
  5. Describe`electoral_boundaries` file `division_h3r9_aec2025` — 79,055,044 rows across 1 file(s). Columns: h3_r9 BYTE_ARRAY, name BYTE_ARRAY, state BYTE_ARRAY.
  6. Describe`climate_projections` file `projections_ssp585` — 14,973 rows across 1 file(s). Columns: h3_r4 BYTE_ARRAY, decade INT64, days_over_35 DOUBLE, days_over_40 DOUBLE, tas_mean_c DOUBLE, tasmax_mean_c DOUB
  7. Ran a cell in the sandbox(46, 1.2233274995421153, 59.184871029427555, 3.8, 1216.0, 2942.0, 0)5.5s
  8. Rendered a tableRendered `data_2` as a table (10 rows) titled "NSW federal seats with the largest heat rise and lowest incomes, 2050".
  9. Rendered a chartRendered `data_1` as a scatter chart titled "NSW federal electorates: heat rise against household income" (46 rows).
  10. Rendered a mapRendered `data_1` as a division region map titled "NSW federal electorates by projected days over 35 °C in 2050" (46 division areas).
  11. Wrote the documentTOOL ERROR: block data_1 is placed more than once — place each block exactly once.failed
  12. Ran a cell in the sandboxwritten
  13. Rendered a chartRendered `data_3` as a scatter chart titled "NSW federal electorates: heat rise against household income" (46 rows).
  14. Rendered a mapRendered `data_4` as a division region map titled "NSW federal electorates by projected days over 35 °C in 2050" (46 division areas).
  15. Wrote the documentTOOL ERROR: this document is not publishable yet — 2 things to fix:failed
  16. Wrote the documentTOOL ERROR: this document is not publishable yet — 1 thing to fix:failed
  17. Wrote the documentRendered a report titled "NSW federal electorates: heat rise, bushfire-prone land and income" embedding 3 blocks: data_2 (table), data_3 (chart), data_4 (map). Their standalone copies from this turn h

3 calls failed and the agent recovered within the same run. Failures are shown because they happened.

What it produced

NSW federal electorates: heat rise, bushfire-prone land and income

Across all 46 NSW federal electorates, projected days over 35 °C rise by 1.2 to 59.2 days a year by 2050 under SSP5-8.5. Parkes has the largest rise at 59.2 days, while Cowper has the lowest seat average of SA2 median household incomes at A$1,216 a week. The ten-seat shortlist combines heat-rise and income ranks, not a published risk score.

Key findings

  • Parkes records the largest projected rise, 59.2 days over 35 °C by 2050, compared with the NSW electorate median rise of 3.8 days.
  • Cowper has the lowest seat average of SA2 median household incomes at A$1,216 a week, compared with the highest seat value of A$2,942.
  • The shortlist contains ten seats: Farrer ranks first on the combined ordering, while Parkes ranks first on heat rise alone at 59.2 days.
  • All 46 NSW seats have a bushfire-prone land share in this dataset, so the requested land measure is available for every seat rather than only a subset.

Heat rises most in inland seats, while the state-wide midpoint is 3.8 days

The projected rise ranges from 1.2 days in the least-affected NSW electorate to 59.2 days in Parkes, with a median of 3.8 days across all 46 seats. The table uses the model's 2050 SSP5-8.5 change in days over 35 °C, alongside the modelled 2050 level, so a large rise is not confused with the endpoint itself.

NSW federal seats with the largest heat rise and lowest incomes, 2050
Federal electorateSitting memberPartyRise in days over 35 °C by 2050Projected days over 35 °C in 2050Bushfire-prone land (%)Seat average of SA2 median household income (A$/week)Heat-rise rankIncome rankCombined rank
FarrerSussan LEYLiberal30.4868.5866.361,420268
ParkesJamie CHAFFEYThe Nationals59.18115.0686.591,424189
New EnglandBarnaby JOYCEThe Nationals24.1833.7587.991,338459
RiverinaMichael McCORMACKThe Nationals24.8740.3970.441,51931215
CalareAndrew GEEIndependent24.0933.994.581,55251419
PageKevin HOGANThe Nationals8.5410.7198.281,27716319
FowlerDai LEIndependent9.0910.6714.751,453131023
HunterDan REPACHOLIAustralian Labor Party14.1617.594.111,63191726
BlaxlandJason CLAREAustralian Labor Party5.836.731.281,490191130
ChifleyEd HUSICAustralian Labor Party14.216.838.471,89962531
Ten NSW federal electorates ranked by the combined heat-rise and income ranks, with sitting member, projected heat, bushfire-prone land and income · AEC electorate profile, NEX-GDDP-CMIP6 ACCESS-CM2 and 2021 Census-derived income measures · 2050

Lower incomes overlap with the largest heat changes

The income measure ranges from A$1,216 a week in Cowper to A$2,942 in the highest-income NSW electorate. The ten-seat shortlist ranks each electorate separately on heat rise and income, then adds the two ranks. It therefore identifies seats that perform poorly on both dimensions without assigning an invented weight to a hot day or a dollar.

NSW federal electorates: heat rise against household income
All 46 NSW federal electorates compared by projected heat rise and seat average of SA2 median household income; point size indicates bushfire-prone land share · 2050 SSP5-8.5

Bushfire exposure is a land measure, not a population measure

The bushfire-prone share is included for each of the 46 NSW electorates, and the comparison is between land shares rather than residents or households. The scatter retains the full electorate set so the relationship between heat rise and income can be read across the state, while point size carries the bushfire-prone land share. The map colours the same 46 seats by projected hot-day level, which is a different measure from the rise.

NSW federal electorates by projected days over 35 °C in 2050
All 46 NSW federal electorates shaded by projected days over 35 °C · AEC 2025 boundaries and NEX-GDDP-CMIP6 ACCESS-CM2 · 2050

The electorate map uses projected 2050 hot-day levels, not the rise from baseline. That distinction matters: an electorate can have a high 2050 level because its baseline is already hot, while another can have a larger change from a cooler baseline.

Notes on the data

  • The heat rise and projected hot-day level are area-weighted over the electorate's mapped land cells after matching to the 2050 SSP5-8.5 projection grid. This is one climate-model run, not an ensemble or a forecast.
  • Income is a seat-level average of SA2 median household incomes from the 2021 Census interpolated onto 2025 electorate boundaries. It is not the median income of a household in the seat. Bushfire share is a share of land, not a share of residents.
  • Federal election data © Commonwealth of Australia (Australian Electoral Commission), used under the AEC's terms of use. Climate projections are NEX-GDDP-CMIP6, model ACCESS-CM2, NASA Ames / AWS Open Data. Census and income measures are Australian Bureau of Statistics, 2021 Census of Population and Housing, CC BY 4.0.

What it said

How it got there

Every cell the agent ran, in order and in full. A briefing that names seats had better show its working.

bashcell 1 of 2
python3 - <<'EOF'
import zn
con = zn.lake_con()
DIV = zn.read('electoral_boundaries', file='division_h3r9_aec2025')
PRJ = zn.read('climate_projections', file='projections_ssp585')
DP = zn.read('division_profile')
con.execute(f"""
CREATE OR REPLACE TEMP TABLE seat_climate AS
WITH r4 AS (
  SELECT name AS division_name,
         h3_cell_to_parent(h3_r9, 4) AS h3_r4,
         count(*) AS r9_cells
  FROM {DIV}
  WHERE state = 'NSW'
  GROUP BY 1,2
), p AS (
  SELECT h3_r4, days_over_35, d_days_over_35
  FROM {PRJ}
  WHERE decade = 2050
)
SELECT r4.division_name,
       sum(r4.r9_cells * p.d_days_over_35) / sum(r4.r9_cells) AS heat_rise_days_2050,
       sum(r4.r9_cells * p.days_over_35) / sum(r4.r9_cells) AS heat_level_days_2050,
       sum(r4.r9_cells) AS matched_r9_cells
FROM r4 JOIN p USING (h3_r4)
GROUP BY 1
""")
# materialise complete seat table and top ten separately
con.execute(f"""
COPY (
WITH j AS (
 SELECT d.division_name,
        d.member_given_name || ' ' || d.member_surname AS member,
        d.member_party_name AS party,
        c.heat_rise_days_2050,
        c.heat_level_days_2050,
        d.bushfire_cell_share_pct,
        d.median_hh_income_weekly_avg,
        rank() OVER (ORDER BY c.heat_rise_days_2050 DESC) AS heat_rank,
        rank() OVER (ORDER BY d.median_hh_income_weekly_avg) AS income_rank,
        rank() OVER (ORDER BY c.heat_rise_days_2050 DESC)
          + rank() OVER (ORDER BY d.median_hh_income_weekly_avg) AS combined_rank
 FROM {DP} d JOIN seat_climate c USING (division_name)
 WHERE d.state = 'NSW'
)
SELECT division_name,
       member,
       party,
       heat_rise_days_2050,
       heat_level_days_2050,
       bushfire_cell_share_pct,
       median_hh_income_weekly_avg,
       heat_rank,
       income_rank,
       combined_rank
FROM j
ORDER BY combined_rank, heat_rank, division_name
) TO '/workspace/out/nsw_seats_all.csv' (HEADER)
""")
con.execute("""
COPY (
SELECT * FROM read_csv_auto('/workspace/out/nsw_seats_all.csv')
ORDER BY combined_rank, heat_rank, division_name
LIMIT 10
) TO '/workspace/out/nsw_seats_top10.csv' (HEADER)
""")
print(con.sql("SELECT count(*) AS seats, min(heat_rise_days_2050) AS min_rise, max(heat_rise_days_2050) AS max_rise, median(heat_rise_days_2050) AS median_rise, min(median_hh_income_weekly_avg) AS min_income, max(median_hh_income_weekly_avg) AS max_income, count(*) FILTER (WHERE bushfire_cell_share_pct IS NULL) AS bushfire_unassessed FROM read_csv_auto('/workspace/out/nsw_seats_all.csv')").fetchone())
print(con.sql("SELECT division_name, heat_rise_days_2050, median_hh_income_weekly_avg, combined_rank FROM read_csv_auto('/workspace/out/nsw_seats_top10.csv') ORDER BY combined_rank, heat_rank, division_name").fetchall())
EOF
bashcell 2 of 2
python3 - <<'EOF'
import duckdb
con=duckdb.connect()
con.execute("COPY (SELECT * FROM read_csv_auto('/workspace/data/data_1.csv')) TO '/workspace/out/nsw_seats_chart.csv' (HEADER)")
con.execute("COPY (SELECT * FROM read_csv_auto('/workspace/data/data_1.csv')) TO '/workspace/out/nsw_seats_map.csv' (HEADER)")
print('written')
EOF

What this run does not tell you

The report carries its own notes on the data, reproduced here exactly as the agent wrote them:

  • The heat rise and projected hot-day level are area-weighted over the electorate's mapped land cells after matching to the 2050 SSP5-8.5 projection grid. This is one climate-model run, not an ensemble or a forecast.
  • Income is a seat-level average of SA2 median household incomes from the 2021 Census interpolated onto 2025 electorate boundaries. It is not the median income of a household in the seat. Bushfire share is a share of land, not a share of residents.
  • Federal election data © Commonwealth of Australia (Australian Electoral Commission), used under the AEC's terms of use. Climate projections are NEX-GDDP-CMIP6, model ACCESS-CM2, NASA Ames / AWS Open Data. Census and income measures are Australian Bureau of Statistics, 2021 Census of Population and Housing, CC BY 4.0.

Three things to add to them, none of which is specific to this run.

A high scenario is not a prediction. Projections under a high-emissions pathway describe one plausible world, and a count of days over a threshold is more sensitive to model choice than a change in average temperature is. Direction is robust; the number is not.

Bushfire-prone mapping is a planning trigger, not a risk score. The share of an electorate that is mapped says how much land sits inside a planning overlay. It does not say how often it burns, how severe a fire would be, or how many people live in the mapped part.

An electorate figure is an allocation. Income and population are published on statistical areas that an electoral boundary cuts through, and every seat-level figure here is those areas apportioned to the seat. Two defensible methods give slightly different answers, and the ranking of adjacent seats can turn on that.

Run it on your own boundaries

The state and the three measures are the ones the prompt named. The same combination runs over any set of electorates, council areas or statistical regions, and over any of the climate, hazard and demographic layers in the library. If you want to see it against yours, request access — or read how this is used for electorate analysis and by government and public affairs.

See it run on your portfolio

Zenancy is in private preview with Group 2 reporters and their advisers.

Request access