The Same Air, Five Verdicts

Give five official air-quality tables the same 24-hour average of fine particles, 58 micrograms per cubic metre, and they return five verdicts: Unhealthy in the United States, High in the UK, 良 in China, Satisfactory in India, and Very poor on the European index's daily table, which the EEA retired in July 2025. Slide the number and watch them agree on their cleanest word only from 0 to 9. Then watch an agency re-grade its own past: scored again with the US table of 2024, 14.0% of the 2023 site-days in EPA's own data file change category.

58µg/m³
United States · EPA
Unhealthy
index 153 · word 4 of 6
40 CFR Part 58, Appendix G, as revised from 6 May 2024; in force as of 1 November 2026, with two Supreme Court petitions pending
United Kingdom · Defra
High
index 7 of 10 · band 3 of 4
Daily Air Quality Index, April 2013 table
China · MEE
良 (our gloss: good)
IAQI 96 · level 2 of 6
HJ 633-2026, daily report, from 1 March 2026
India · CPCB
Satisfactory
sub-index 97 · word 2 of 6
National Air Quality Index
European Union · EEA
Very poor
no index number · word 5 of 6
European Air Quality Index, daily table used until 4 July 2025

At 58: US Unhealthy, UK High, China 良, India Satisfactory, EU daily table Very poor.

Each bar is one table laid along the same 24-hour axis, its words shaded by rank within that table: the shading is this page's own, not any agency's colour. The sixth bar is the European index as it stands today. It grades a single hour, so the 24-hour slider moves no marker on it.

Why the slider moves in whole numbers

The five tables do not even agree on how to round. The US rule says PM2.5—truncate to 1 decimal place, and then Round the index to the nearest integer. EPA's own manual rounds a half up: one of its worked examples ends 125.5 = 126. China's standard rounds the concentration to a whole number under GB/T 8170 and then rounds every index up: 环境空气质量指数及空气质量分指数的计算结果应全部向上进位取整数,不保留小数。 (Our translation: the AQI and every sub-index are all rounded up to a whole number, keeping no decimals.) Defra says that rounding has to be done only once and that All comparisons with the index should be undertaken with concentrations rounded to integers. Its own illustration: For example, 50.486 μg/m³ is rounded to 50 μg/m³. Rounding this value in a first step to one decimal place gives 50.5 μg/m³ and rounding in a second step to and integer would yield 51 μg/m³. The EU and Indian tables are printed in whole numbers with gaps between their bands, from 5 to 6 and from 30 to 31, and we found no rule for what falls in between in the documents we read.

So the slider moves in whole micrograms, where none of those rules can change a word. They still move the index numbers: the US, UK and Chinese cards compute theirs by their own agency's rule, the Indian card rounds its sub-index to the nearest whole number by this page's choice, named in the check, and the European card shows no number. One more choice is named in the check at the end: China's Table 1 starts at an index of 1, so a concentration of 0, whose index is 0, is counted here with its first level.

The agencies' own worked examples, recomputed in your browser

Whose exampleInputThey printThis page computes
EPA, Technical Assistance Document, May 2026PM2.5 35.9102101.98 → 102
40 CFR Part 58, Appendix G, equation 2PM10 210128128.22 → 128
CPCB, About National Air Quality IndexPM2.5 31, 60, 4551, 100, 7551, 100, 74.66 → 75
EEA, ETC HE Report 2024/17, Table 3.8daily 25, 50, 7547, 93, 13946.701, 92.926, 139.151
The tables, as this page transcribed them (PM2.5, µg/m³)

Two edges needed a reading. India prints Very Poor as 121–250 and Severe as 250+, so 250 sits in both; its sub-index there is 400, the top of Very Poor, and this page puts it in Very Poor. Severe has no upper breakpoint, so above 250 the Indian card shows the word and no number. Chinese category names are the standard's own; the glosses beside them are ours, because HJ 633-2026 gives no English names.

The fifth table now counts hours

Until 4 July 2025 the European Environment Agency graded PM2.5 on a day, as the other four tables on this page still do: its index used the 24-hour running means for the past 24 hours for PM10 and PM2.5. That day it announced: Hourly data is now used for all key pollutants to estimate the index, including particulate matter pollutants (PM2.5 and PM10), which were presented until now as 24-hour averages. A single hour and a day's average are different measurements of the same air, so the current European table has its own ruler and its own slider here, and never a card on the 24-hour axis.

40µg/m³

One hour at 40: Moderate, word 3 of 6 on the European index since 4 July 2025.

The EEA did not simply relabel its old bands. Its technical report set Good and Fair at the World Health Organization's 2021 guideline values for PM2.5, 5 for a year and 15 for a day, and used them for single hours as they stand: the long-term guideline level marks the change between “good” and “fair”, and the short-term guideline level marks the change between “fair” and “moderate”. For the three bands above, it kept its old daily edges, 25, 50 and 75, and converted them to hours with a straight line fitted to European stations from 2018 to 2022, between a day's mean and that day's highest hour: 1.849 * dailyMean + 0.476. That gives 47, 93 and 139. The published table rounds 93 and 139 to the nearest ten, 90 and 140, and moves 47 to 50 to coincide with an information threshold and an alert threshold in the revised EU Ambient Air Quality Directive.

Top: a day's mean. Bottom: an hour. Lines show where the EEA's own function sends its old daily edges (25, 50, 75 to 47, 93, 139) and where the published hourly edges sit (50, 90, 140): open circles mark where the function lands, filled squares the published edges. Good and Fair (5, 15) drop straight down, unconverted, on dashed blue lines. Put through the same function they would have become 9.7 and 28.2: that is this page's arithmetic, not the EEA's.

A 24-hour mean is not one thing either

Even the shared axis hides choices. For real-time reporting EPA uses its NowCast: The PM NowCast is an average of the previous 12 hours. When the air is changing, the latest hours weigh more. Defra grades the daily mean concentration for historical data, latest 24 hour running mean for the current day, and needs 18 of a day's hourly means to make a daily one; CPCB needs 16. Since 1 March 2026 China's real-time report grades a single hour against its daily column: for a 1-hour PM2.5 value, its formula says 取表3中日平均的高位值 (our translation: take the upper breakpoint from the daily-mean column of Table 3), one of the changes the new standard lists: 调整了实时报中颗粒物的空气质量分指数计算方法 (our translation: adjusted how the real-time report calculates the sub-index for particles). Apart from the European hourly slider above, this page grades PM2.5 only as a 24-hour mean: a day's mean on the US, UK, Chinese and Indian tables, and on the European daily table the running 24-hour mean the EEA graded every hour until 4 July 2025.

The obvious reply, and each agency against its own past

The obvious reply is that every country has its own scale and its own words, so of course they differ. But the scales are not fixed inside one agency either, and when a table changes, the record can follow the table, not the air: EPA's does, and in 2013 Defra said historic index values should be recalculated. Move this slider and read each agency against its own previous table.

70µg/m³
US EPA
before 6 May 2024Unhealthy, index 158
from 6 May 2024Unhealthy, index 161
UK Defra
January 2012 tableVery High, index 10
April 2013 tableHigh, index 9
China MEE
HJ 633-2012良, IAQI 94
HJ 633-2026轻度污染, IAQI 110

At 70: the UK and China words differ between tables; the US word does not.

The record follows the table: EPA's own 2023 file, graded twice

EPA says of its AirData service: Yes, every AQI summary from AirData is based on the current AQI breakpoints, regardless of year. So the 2023 PM2.5 figures it serves today carry index values from the table that took effect in May 2024. This page's counts come from one of EPA's two daily files of PM2.5 mass for 2023, daily_88101_2023.zip, which EPA lists with 847,162 rows as of 25 June 2026. EPA's heading for it is PM2.5 FRM/FEM Mass; the other file, daily_88502_2023.zip, holds PM2.5 from monitors of other kinds and is not used here. The check at the end of this page, run with --deep, reads the file and first confirms that it computes EPA's arithmetic: on every one of the 452,388 rows that carry an AQI and are not marked as excluded events, its index equals EPA's.

Taking each monitoring site's highest value each day gives 306,215 site-days. Graded with the table in force before 6 May 2024 and again with the one after, 42,901 of them (14.0%) get a different word: 42,795 move from Good to Moderate, 98 from Unhealthy to Very Unhealthy, and 8 from Very Unhealthy to Hazardous. Good site-days fall from 256,184 to 213,389. The air of 2023 did not change.

2023 site-days by US word, under the table before 6 May 2024 and the table after
WordBefore 6 May 2024From 6 May 2024
Good256,184213,389
Moderate47,44190,236
Unhealthy for Sensitive Groups1,5281,528
Unhealthy958860
Very Unhealthy103193
Hazardous19

42,901 of 306,215 site-days (14.0%) change word.

The counts rest on choices, each named in the check below. They are monitor-site days, not days in the United States, and a different but reasonable choice gives a different count: keeping the original T640 rows gives 46,268 of 306,422 (15.1%).

Coda: the agencies' own arithmetic

Recomputing the agencies' worked examples turns up two printed figures that do not follow from the documents' own rules. Both are about ozone, not PM2.5, and neither changes a word. EPA's Technical Assistance Document (May 2026) works a 1-hour ozone value of 0.162 ppm and concludes: In this case, the index is 148 (the maximum of 148 and 126) and the main pollutant is O3. Its own equation gives 49 ÷ 0.039 × 0.037 + 101 = 147.487, which its rule rounds to 147. The September 2018 edition prints the same 148. Both 147 and 148 are Unhealthy for Sensitive Groups.

The worked example written into the regulation itself, 40 CFR Part 58 Appendix G, reads an 8-hour ozone value of 0.130 ppm as iii. Find the breakpoints for 8-hour O3 at 0.130 ppm as 0.116 ppm and 0.374 ppm, corresponding to index values 201 and 300; and ends vii. Find the maximum, 206. This is the AQI. The same appendix's Table 2 puts 0.130 in its 0.106 to 0.200 row, which gives 226.277, rounded to 226. Both 206 and 226 are Very Unhealthy.

What these words are not

Each agency says where its edges come from, and they are different things. The US rule says: In most cases, the index value of 100 is associated with the numerical level of the short-term standard (i.e., averaging time of 24-hours or less) for each pollutant. China's 100 at 60 matches the transitional 24-hour limit of 60 that GB 3095-2026 applies from 1 March 2026 to 31 December 2030. CPCB set India's first two edges with Indian background levels in mind: the first two categories, Good and Satisfactory, the breakpoints are kept as 30 and 60 µg/m3. The UK index, Defra says, was recommended by the Committee on the Medical Effects of Air Pollutants (COMEAP). The EEA took its first two edges from WHO guideline values. None of this makes one table right, and this page offers no health advice and calls no level safe.

The US table is the one in force as of 1 November 2026. The 2024 rule that carries it was challenged in court; on 26 June 2026 the US Court of Appeals for the D.C. Circuit denied the petitions for review and the EPA's own motion to vacate the rule. Two petitions asking the Supreme Court to review that decision, Nos. 26-277 and 26-298, were pending on 1 November 2026, with responses due by 17 November 2026.

The check

Every verdict, index, count and percentage on this page comes from engine.mjs and the tables typed into it, and the 2023 counts from airdata-2023.json, a histogram this page's authors made from EPA's file. Your browser recomputes the instruments, the worked examples and the record as the page loads. One program checks all of it:

curl -sO https://artwaste.land/checks/verify-the-same-air-five-verdicts.mjs
node verify-the-same-air-five-verdicts.mjs

It types the nine tables again from the sources, grades all 301 whole numbers with a second, plainer implementation that shares no code with the engine, and finds every figure on this page in its own sentence. It checks the quotations against quotes.json, which holds each passage with its source. With --deep it downloads EPA's zip, checks its sha256, and redoes the 2023 recount from the raw rows. With --mutate it plants wrong figures in a copy and must fail.

The free choices, each of which moves a result:

What it does not check: that the documents say what this page's copies of them say (follow the links below), that HJ 633-2026's image-only pages were read correctly, whether the UK archive was ever recalculated, or anything about health.

The claims record 145 claims re-read against their sources, 2 November 2026

Written 2026-11-02. Claims re-read against their sources on 2026-11-02: 145 checked, 130 confirmed, 0 wrong, 0 unverifiable, 15 first-hand observations checked against their record. By ccr-81332fb3-8nrbtu wave, one independent agent on oversight/claims-pass.md (pre-deploy; reader check on local copies with AW_DIR; every source-record entry read against its kept copy and live source).

Live page: not deployed yet; step 2 skipped. Reader check (pre-deploy, local copies): `AW_DIR=<dir holding index.html, engine.mjs, airdata-2023.json, quotes.json copied from public/strata/the-same-air-five-verdicts/> node verify-the-same-air-five-verdicts.mjs`, run from a second empty directory holding only the verifier: exit 0, 260 passed, 0 failed. Step 6: the page prints no transcript of the verifier's output; even so, in seven scratch copies I changed one figure in one sentence each ("42,901 of them (14.0%)" to 14.1%, "213,389" to 213,398, "changes at 53" to 54, "(15.1%)" to 15.2%, "1,376 of the rows" to 1,367, "rounds to 147" to 146, "452,388 rows" to 452,383) and left everything else true: every run exits 1 (258 passed, 2 failed). `--mutate` exits 1 (470 passed, 11 failed); `--deep` exits 0 (264 passed, 0 failed, 21.5 s). With aw-* house blocks, the Cloudflare beacon and a pulse script added to a copy: exit 0, 260 passed; with a planted 14.1% as well: exit 1. Mutation sweep: the-same-air-five-verdicts: 838 mutated, 838 caught, 0 survived (text 0, meta 0, year 0). `assay/sources.mjs the-same-air-five-verdicts --online`: 22 in the repository, 41 FOUND, 70 UNREADABLE, 2 NOT FOUND; the 70 UNREADABLE are PDFs, so on 2026-11-02 I fetched all eleven text PDFs again (89 FR 16202, Defra 2013 report and 2011 letter, ETC HE 2024/17, CPCB About_AQI and NAQI report, TAD 2026 and 2018, HJ 633-2012, the AirData PM2.5 advisory, the D.C. Circuit opinion), ran pdftotext, and found every excerpt in them; HJ 633-2026 has no text layer (pdftotext gives 9 bytes), so I rendered its PDF pages 3 to 6 and read the foreword, Table 1, 4.2.2, 4.2.3, formula (1), 4.2.6 and Table 3 from the images myself. The 2 NOT FOUND (card-uk-today, t-usPre) are flattened table cells: every cell is in the live UK-AIR page and in the eCFR XML as of 2024-01-01 (which needs `curl --compressed`). The 2023 observations were remade with my own Python from EPA's zip as served on 2026-11-02 (same sha256 as the page's).

This record is long (145 claim lines and 6 findings), so it is not part of the page until you open it. It loads here now if your browser runs scripts; otherwise, or to keep it, read the whole record as plain text.

The assay office: what a record is, and every layer re-read so far.