--- slug: the-hours-below-zero passed: 2026-11-02 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) checked: 86 confirmed: 60 wrong: 0 unverifiable: 0 observed: 26 stale: 0 --- # Claims pass: The Hours Below Zero Live page: not deployed yet; step 2 skipped. Reader check (pre-deploy, local copies): `AW_DIR= node verify-the-hours-below-zero.mjs` (the script alone in a second empty directory): exit 0, 283 passed, 0 failed (in the repository: 326 passed, 0 failed; with `--deep`: exit 0, 284 passed, 0 failed, "0 of 60 files differ from the frozen hashes; 525600 of 525,600 prices identical"). The page prints no verifier transcript; step 6 was run anyway on scratch copies: five single-sentence edits ("the bound is $238,049.52" to $238,049.53 with the panel and table left true; "holds 16.1% of it" to 16.2%, a figure that is true elsewhere on the page; "Of its 30,008 intervals" to 30,009; "On 284 of the 365 days" to 285; "gave 274,611.7033" to 274,611.7034) each exit 1, 281 passed, 2 failed. With house blocks added to a copy (aw-sitebar, aw-plain, aw-checkkind, aw-assay, aw-nearby, aw-wayout, the Cloudflare beacon, the pulse script, /assay/record.js): exit 0, 284 passed, 0 failed; the same copy with "On 284" made 283: exit 1; an aw-plain placard saying 2,600 hours: exit 1. Mutation sweep: `node $SP/wave-sweep.mjs the-hours-below-zero --jobs 2 --work $SP/claims/the-hours-below-zero/sweep`: the-hours-below-zero: 706 mutated, 706 caught, 0 survived (text 0, meta 0, year 0). `assay/sources.mjs the-hours-below-zero --online`: 13 FOUND, 26 UNREADABLE, 2 NOT FOUND, 37 in the repository. The 26 were read directly: the RSSR final report (11 entries) and both schedules of reliability settings (8) by plain curl on 2026-11-02 (HTTP 200; the RSSR PDF's sha256 c885f1fcd302... is the one its kept copy records, the 2026-27 schedule's 6d3da5af72b4... is the scout's download of 2026-11-01, and the pdftotext of each schedule is line for line its kept copy), pdftotext, every quotation and excerpt found on the stated printed page; the Spot Market Operations Timetable (3) through WebFetch (curl 403), sha256 b6e7ec714972..., the kept copy's; the EMMS Release FAQ (1) by curl, HTTP 200; the AEMC media release (2) answered 403 to curl and WebFetch, so it was read in the scout's capture of 2026-11-01 and corroborated by an exact-phrase web search; the copyright page (1) is the 403 the page reports, again 403 on 2026-11-02. The 2 NOT FOUND (Open Electricity) are the Markdown form of the excerpt; the fresh HTML carries the title and the region list. All 60 AEMO CSVs were re-downloaded on 2026-11-02, every SHA-256 equal to the manifest, and every count on the page was recounted from them in independent Python; every battery figure was recomputed by this pass's own dynamic programmes, and the five HiGHS runs were re-run with highspy 1.15.1 and reproduced to the fourth decimal. ## Claims - CONFIRMED | Its price column is headed RRP, the name AEMO's data model gives the regional reference price, which it describes as the "Regional Reference Price for this dispatch period. RRP is the price used to settle the market" | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | fresh fetch 2026-11-02 (HTTP 200), column RRP: "Regional Reference Price for this dispatch period. RRP is the price used to settle the market"; quote verbatim; every fresh CSV header reads REGION,SETTLEMENTDATE,TOTALDEMAND,RRP,PERIODTYPE - CONFIRMED | The data model's own example is a "five minute dispatch interval ending 28/09/2000 16:35" | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_129.htm | fresh fetch 2026-11-02, DISPATCHOFFERTRK SETTLEMENTDATE: "Date and time of the dispatch interval (e.g. five minute dispatch interval ending 28/09/2000 16:35)"; verbatim - CONFIRMED | AEMO's spot market timetable says "References to time are references to Australian Eastern Standard Time (AEST)" | https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2024/st-pasa-procedures-and-related-documents/spot-market-operations-timetable.pdf?la=en | curl 403; PDF fetched through WebFetch 2026-11-02, sha256 b6e7ec714972... (the kept copy's hash), clause 1.2.2(b), page 4: "References to time are references to Australian Eastern Standard Time (AEST) in 24-hour format."; verbatim, truncated before "in 24-hour format" - CONFIRMED | When a price is adjusted, its data model says, "the new price is written to the RRP field, and the old price to the ROP field as an audit trail" | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | Comment: "DISPATCHPRICE updates when price adjustments occur, in which case the new price is written to the RRP field, and the old price to the ROP field as an audit trail."; verbatim - CONFIRMED | The Reliability Panel, reviewing the market's price limits in 2026, put the consequence in one line: "load is often not exposed to spot prices" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | fresh PDF 2026-11-02 (HTTP 200, sha256 c885f1fcd302..., the kept copy's), printed page 40: "The Panel notes that load is often not exposed to spot prices, and negative prices, therefore, do not necessarily represent a strong operational signal for load to ramp up or turn on."; verbatim - CONFIRMED | In its analysis of historic negative prices the Panel finds "a cluster of dispatch intervals at approximately -$50/MWh, the negative of large-scale generation certificate (LGC) prices" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 39: "analysis of historic negative prices reveals two distinct clusters: First, representing the vast majority of negative price intervals, there is a cluster of dispatch intervals at approximately -$50/MWh, the negative of large-scale generation certificate (LGC) prices."; verbatim - CONFIRMED | because "LGCs provide additional revenue above the spot price and thus work to essentially shift an eligible generator’s SRMC to a negative value" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 39, same words, including the curly apostrophe in "generator’s" - CONFIRMED | The Panel's own figure is for another year and names no region: "In 2024, 81 per cent of all negative intervals were between -$50/MWh and $0/MWh." | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 39: "In 2024, 81 per cent of all negative intervals were between -$50/MWh and $0/MWh." (footnote 55 follows); the sentence names no region; verbatim - CONFIRMED | The market price cap is "the maximum price that can be reached on the spot market during any dispatch and trading interval" | https://www.aemc.gov.au/news-centre/media-releases/aemc-updates-market-price-cap-2026-27 | the release answered HTTP 403 to curl and to WebFetch on 2026-11-02; read in the scout's capture of 2026-11-01 (HTTP 200, page built 2026-10-21; scratchpad file scout/the-hours-you-were-paid-to-use-it/sources/raw/mr2627, not committed): "The MPC is the maximum price that can be reached on the spot market during any dispatch and trading interval."; an exact-phrase web search on 2026-11-02 returns this URL first; verbatim - CONFIRMED | The market floor price "imposes a floor on wholesale spot prices and is currently set at -$1,000/MWh" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 38, section 4.1: "The MFP imposes a floor on wholesale spot prices and is currently set at -$1,000/MWh."; verbatim (as of 23 April 2026) - CONFIRMED | AEMO's trading day is "The 24-hour period from 0400 hrs to 0400 hrs the following day" | https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2024/st-pasa-procedures-and-related-documents/spot-market-operations-timetable.pdf?la=en | section 1.2.1 definitions table, page 3: "Trading day The 24-hour period from 0400 hrs to 0400 hrs the following day"; verbatim - CONFIRMED | It leaves out one of the drivers of battery revenue the Reliability Panel lists, "the additional revenue streams outside the wholesale market (e.g. ancillary services)" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 62, C.2.3, on the non-reliability revenues for OCGT and BESS: "There are uncertainties in each of the following factors, which are all drivers of revenue: ... the additional revenue streams outside the wholesale market (e.g. ancillary services)."; verbatim - CONFIRMED | That agrees with the Reliability Panel, which found that "batteries respond to arbitrage opportunities driven by price spread, more so than absolute negative prices" | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 38, 4.1.1: "This conclusion reflects three key factors: ... batteries respond to arbitrage opportunities driven by price spread, more so than absolute negative prices."; verbatim; the Panel states it as a factor in its conclusion, and the page's "agrees" is its own reading of its model - CONFIRMED | AEMO grants "general permission for anyone to use AEMO Material for any purpose, but only with accurate and appropriate attribution of the relevant AEMO Material and AEMO as its author" | https://community.openstreetmap.org/t/use-of-aemo-data/127782 | fresh fetch 2026-11-02 (HTTP 200): the first post quotes the copyright page: "In addition to the uses permitted under copyright laws, AEMO confirms its general permission for anyone to use AEMO Material for any purpose, but only with accurate and appropriate attribution of the relevant AEMO Material and AEMO as its author."; verbatim; the primary page still answered 403 on 2026-11-02 (a Wayback snapshot of 2026-09-23 is listed by archive.org's availability API but could not be fetched); the page says the wording comes from copies - CONFIRMED | AEMO's own documents point to it: "The material in this publication may be used in accordance with the copyright permissions on AEMO’s website." | https://nemweb.com.au/Data_Archive/Wholesale_Electricity/MMSDM/2021/MMSDM_2021_05/MMSDM_Historical_Data_SQLLoader/DOCUMENTATION/MMS%20Data%20Model/v5.0/EMMS%20Release%20FAQ%20-%20October%202020%20-%20Data%20Model%20v5.00.pdf | fresh PDF 2026-11-02 (HTTP 200, sha256 735be5191555..., the scout's), pdftotext line 55, under "© 2021 Australian Energy Market Operator Limited.": "The material in this publication may be used in accordance with the copyright permissions on AEMO’s website."; verbatim - CONFIRMED | that wording is quoted from two independent copies of AEMO's copyright permissions page (an OpenStreetMap forum post of 23 March 2025 and an R package's source) | https://raw.githubusercontent.com/imanuelcostigan/aemo/master/R/aemo.R | fresh fetch 2026-11-02: lines 10-12 "AEMO confirms its general permission for anyone to use AEMO Material / for any purpose, but only with accurate and appropriate attribution of the / relevant AEMO Material and AEMO as its author", citing the copyright page; with the #' markers removed it holds every quoted word - CONFIRMED | an OpenStreetMap forum post of 23 March 2025 | https://community.openstreetmap.org/t/use-of-aemo-data/127782 | first post: datetime='2025-03-23T02:57:13Z' - OBSERVED | because the page itself answered HTTP 403 when fetched on 2026-11-01 | research/the-hours-below-zero/sources/aemo-copyright-permissions-PRIMARY-403.txt; recreated: curl -sS https://www.aemo.com.au/privacy-and-legal-notices/copyright-permissions | the kept capture records the 403 Cloudflare challenge of 2026-11-01; plain curl on 2026-11-02 also got 403 - CONFIRMED | so this year has two: $20,300/MWh from 1 July 2025 to 30 June 2026, and $23,200/MWh from 1 July 2026 to 30 June 2027 | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | fresh PDF 2026-11-02 (sha256 6d3da5af72b4..., the scout's), page 1 table: "From 1 July 2025 to 30 June 2026 ... MPC $20,300/MWh ... From 1 July 2026 to 30 June 2027 ... $23,200/MWh"; the media release table gives the same three values - CONFIRMED | and it is recalculated for each 1 July | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | "The National Electricity Rules (NER) require the Australian Energy Market Commission (AEMC) to calculate the market price cap (MPC) and the cumulative price threshold (CPT) to apply on and from 1 July each year." - CONFIRMED | $18,600/MWh × 554.7 / 509.2 = $20,262.02/MWh | https://www.aemc.gov.au/sites/default/files/2025-02/Schedule%20of%20reliability%20settings%20-%202025-26%20financial%20year.pdf | fresh PDF 2026-11-02, page 2: "MPC 2025−26 = $18,600⁄MWh × 554.7 / 509.2 = $20,262.02/MWh (rounded to two decimal points) = $20,300⁄MWh (rounded to the nearest $100/MWh)"; redone: 20,262.0189 - CONFIRMED | $20,700/MWh × 396.18 / 353.69 = $23,186.76/MWh | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | page 2: "MPC 2026−27 = $20,700⁄MWh × 396.18 / 353.69 = $23,186.76/MWh (rounded to two decimal points) = $23,200⁄MWh"; redone: 23,186.7624 - CONFIRMED | each rounded to the nearest $100/MWh | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | "Clause 3.9.4(e)(1) of the NER also requires the calculated MPC value to be rounded to the nearest $100/MWh." (the same sentence in the 2025-26 schedule) - CONFIRMED | Prices are in dollars per megawatt-hour. | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | "MPC is the market price cap in dollars per MWh"; neither the CSV header nor MMS_130 names RRP's unit, but the fresh files reach exactly 20300 (SA1, NSW1, TAS1), 23200 (NSW1, TAS1) and -1000 (TAS1), the cap and floor in $/MWh, so the inference the record states holds - CONFIRMED | Each row is stamped with the time its interval ends. | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | DISPATCHPRICE SETTLEMENTDATE: "Market date and time starting at 04:05" (the first interval of a 04:00 trading day carries its end time), with MMS_129's "interval ending" example; every one of the 60 fresh files starts at 00:05:00 on the 1st and ends at 00:00:00 on the 1st of the next month - CONFIRMED | Times are the file's own, in AEMO's market time. | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | SETTLEMENTDATE: "Market date and time starting at 04:05"; the page converts no times (engine.mjs uses Date.UTC only as a calendar) - CONFIRMED | the price file does not say which clock it uses, so this page converts nothing and names no offset from UTC | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND_202511_SA1.csv | fresh header in all 60 files: "REGION,SETTLEMENTDATE,TOTALDEMAND,RRP,PERIODTYPE"; no column or note names a zone - CONFIRMED | The Reliability Panel, reviewing the market's price limits in 2026 | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | cover: "Final report 2026 Reliability Standard and Settings Review 23 April 2026"; PDF metadata Author "AEMC Reliability Panel"; chapter 4 reviews the market floor price, the report the cap and threshold - CONFIRMED | AEMO can change a price after it is published. | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | "DISPATCHPRICE updates when price adjustments occur, in which case the new price is written to the RRP field, and the old price to the ROP field as an audit trail." - CONFIRMED | These are wholesale spot prices, the prices the market settles at. | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | "RRP is the price used to settle the market"; RSSR printed page 38: "The MFP imposes a floor on wholesale spot prices" - CONFIRMED | AEMC, Schedule of reliability settings, 2025-26 financial year, 27 February 2025. | https://www.aemc.gov.au/sites/default/files/2025-02/Schedule%20of%20reliability%20settings%20-%202025-26%20financial%20year.pdf | first lines: "Schedule of reliability settings – 2025-26 financial year 27 February 2025" - CONFIRMED | AEMC, Schedule of reliability settings, 2026-27 financial year, 27 February 2026. | https://www.aemc.gov.au/sites/default/files/2026-02/Schedule%20of%20reliability%20settings%20-%202026-27%20financial%20year.pdf | first lines: "Schedule of reliability settings – 2026-27 financial year 27 February 2026" - CONFIRMED | AEMC, media release, AEMC updates market price cap for 2026-27, 26 February 2026. | https://www.aemc.gov.au/news-centre/media-releases/aemc-updates-market-price-cap-2026-27 | scout's capture of 2026-11-01 (live 403 on 2026-11-02): "AEMC updates market price cap for 2026-27 26 February 2026 The Australian Energy Market Commission (AEMC) has released updates" - CONFIRMED | AEMC Reliability Panel, 2026 Reliability Standard and Settings Review, Final report, 23 April 2026, pages 38 to 40 and 62 | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | PDF title "2026 Reliability Standard and Settings Review - Final Report", author "AEMC Reliability Panel"; cover dated 23 April 2026; the quoted passages sit on PDF pages 47, 48, 49 and 71, whose footers print 38, 39, 40 and 62 - CONFIRMED | AEMO, Spot Market Operations Timetable, version 1.10, effective 31 July 2025, section 1.2 | https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2024/st-pasa-procedures-and-related-documents/spot-market-operations-timetable.pdf?la=en | title page: "Version: 1.10 Effective date: 31 July 2025 Status: FINAL"; both quotations are in section 1.2 (the 1.2.1 table and 1.2.2(b)) - CONFIRMED | AEMO, MMS Data Model Report, tables DISPATCHPRICE (MMS_130) and DISPATCHOFFERTRK (MMS_129) | https://visualisations.aemo.com.au/aemo/nemweb/MMSDataModelReport/Electricity/MMS%20Data%20Model%20Report_files/MMS_130.htm | "MMS Data Model Report Table: DISPATCHPRICE" (MMS_130.htm) and "Table: DISPATCHOFFERTRK" (MMS_129.htm), both fetched 2026-11-02 with HTTP 200 - CONFIRMED | Open Electricity, Networks and Regions, https://docs.openelectricity.org.au/guides/networks/, fetched 2026-11-02; a secondary source. | https://docs.openelectricity.org.au/guides/networks/ | fresh HTML 2026-11-02 (HTTP 200) is titled "Networks and Regions"; the online tool's NOT FOUND is because the excerpt is the Markdown front matter (title: 'Networks and Regions'), not the HTML text - CONFIRMED | AEMO, monthly price and demand files PRICE_AND_DEMAND_YYYYMM_REGION.csv for November 2025 to October 2026 and the regions NSW1, QLD1, SA1, TAS1 and VIC1, each at www.aemo.com.au/aemo/data/nem/priceanddemand/ followed by its name | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | all 60 names (12 months x 5 regions) answered HTTP 200 at that address on 2026-11-02 - CONFIRMED | South Australia's wholesale electricity price was below zero in 30,008 of its 105,120 five-minute intervals: 28.5% of the year, 2,500 hours and 40 minutes | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | SA1: 30,008 of 105,120 with RRP < 0 (28.546%); 30,008 x 5 min = 150,040 min = 2,500 h 40 min; the twelve months are 1 November 2025 to 31 October 2026 - CONFIRMED | It sat exactly at the market price cap 15 times and never touched the floor. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | SA1: 15 intervals with RRP equal to the cap in force (all 20300.00); none at -1000; lowest -906.68 - CONFIRMED | So the year counted is the 105,120 intervals ending from 2025/11/01 00:05:00 to 2026/11/01 00:00:00 in each of five regions: every one present once, no gaps, no duplicates. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | in each region the i-th row's SETTLEMENTDATE equals 2025/11/01 00:05:00 + 5 min x i for all 105,120 rows - CONFIRMED | every monthly file here starts at 00:05:00 on the first of the month and stops at 00:00:00 on the first of the next | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 60 of 60 fresh files - CONFIRMED | So every count here is for the 60 files as downloaded on 2026-11-01, frozen with their SHA-256 hashes | research/the-hours-below-zero/aemo-csv-manifest.tsv | 60 hashes; this pass's download of 2026-11-02 matched all 60, the decoded prices-*.bin equal the fresh CSVs price for price (0 differences in 525,600), and the verifier's --deep run printed "0 of 60 files differ from the frozen hashes; 525600 of 525,600 prices identical" - CONFIRMED | South Australia's year does not have that shape: most of its below-zero prices sat close to zero. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | of SA1's 30,008 below-zero prices 17,449 (58.1%) are -$10 to $0 and 503 (1.7%) are -$55 to -$45; the commonest is -$20.00 (1,157), the median -$8.00; nothing like the Panel's "vast majority" cluster at about -$50 - CONFIRMED | Of its 30,008 intervals below zero (this page's count), 58.1% were at -$10/MWh or higher and only 1.7% within $5/MWh of -$50/MWh; 86.1% were at -$50/MWh or higher, and their average price was -$23.99/MWh. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 17,449 (58.148%); 503 (1.676%); 25,829 (86.074%); mean -23.988 - CONFIRMED | The longest unbroken run below zero lasted 518 intervals, 43 hours 10 minutes; its last interval ended at 2025/12/26 19:00:00. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 518 consecutive RRP < 0 ending 2025/12/26 19:00:00; 518 x 5 = 2,590 min = 43 h 10 min - CONFIRMED | On 284 of the 365 days at least one interval was below zero. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 284 days, days taken by interval start - CONFIRMED | Exactly at the cap in force: 15 intervals, all at $20,300/MWh and all before 1 July 2026, on four days (one on 18 January, three on 26 January, one on 7 February and ten on 22 June 2026). | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | ending 2026/01/18 19:30, 2026/01/26 20:40, 20:45, 20:50, 2026/02/07 05:30 and ten on 2026-06-22; every one 20300 - CONFIRMED | Within 10% of the cap in force, which means at least $18,270/MWh to 30 June and at least $20,880/MWh after: 49. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 49 with RRP x 10 >= 9 x the cap in force; 0.9 x 20,300 = 18,270 and 0.9 x 23,200 = 20,880 - CONFIRMED | The difference is the prices that stopped just short, at $20,299.99, $20,299.98, $20,217.17, $19,445.56, $19,445.52 and $19,440.55/MWh. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | the distinct SA1 prices at least 90% of the cap and below it: 20299.99, 20299.98, 20217.17, 19445.56, 19445.52, 19440.55 (34 intervals, 49 - 15) - CONFIRMED | After 1 July the highest South Australian price was $16,970.86/MWh, so none came near $23,200. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | max SA1 RRP for intervals ending after 2026/07/01 00:00:00: 16970.86 - CONFIRMED | South Australia never reached it: its lowest price was -$906.68/MWh, in the interval ending 2025/12/15 14:50:00. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | min SA1 RRP -906.68 at 2025/12/15 14:50:00 - CONFIRMED | Across all five regions the floor was touched once, in Tasmania in the interval ending 2026/09/26 10:50:00, and the $23,200/MWh cap twice: in Tasmania at 2026/07/13 16:20:00 and in New South Wales at 2026/10/10 07:20:00. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | RRP = -1000 only TAS1 2026/09/26 10:50:00; RRP = 23200 only TAS1 2026/07/13 16:20:00 and NSW1 2026/10/10 07:20:00 - CONFIRMED | moving the change to 04:00 alters no count in the table | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | with the cap changing after 2026/07/01 04:00:00 the at-cap and near-cap counts are unchanged in all five regions (SA1 15 and 49, NSW1 6 and 10, QLD1 0 and 1, VIC1 0 and 0, TAS1 4 and 4); the other columns do not use the cap - CONFIRMED | The data comes from AEMO's price and demand files: one CSV a month for each of five regions, one row per five-minute interval. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | 12 files a region, 8,640 to 8,928 rows each, one per five-minute interval, PERIODTYPE TRADE throughout - CONFIRMED | South Australia New South Wales Queensland Victoria Tasmania | https://docs.openelectricity.org.au/guides/networks/ | fresh HTML 2026-11-02: "NSW1 : New South Wales (including the ACT) QLD1 : Queensland SA1 : South Australia TAS1 : Tasmania (since 2005-05-16 ) VIC1 : Victoria"; secondary, and the page says so; the online tool's NOT FOUND is the Markdown backticks in the excerpt - OBSERVED | At 2 hours of storage and 90% round-trip efficiency in South Australia the bound is $238,049.52 for the year. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 238,049.52; the forward optimum, the backward optimum and the cash of the traced schedule are the same integer - OBSERVED | One day, 26 January 2026, holds 16.1% of it. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 26 January 2026, $38,390.78, 16.127% - OBSERVED | The ten best days hold 39.6%, and half the year's value sits in 35 of its 365 days. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 39.594%; half reached on the 35th day - OBSERVED | Charging below zero, being paid to take power, earns 19.5% of that value | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | cash from charging intervals with RRP < 0 over the total: 19.485% - OBSERVED | From 95% down to 80% the bound falls 18.8%, from $255,395.37 to $207,479.48, but the share of the ten best days barely moves, from 39.2% to 39.9% | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 95%: 255,395.37, ten best days 39.220%; 80%: 207,479.48, 39.885%; (255,395.37 - 207,479.48) / 255,395.37 = 18.76% - OBSERVED | It earns $112,894.83, 47.4% of the bound. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | search over every one-charge, one-later-discharge pair of 24-interval windows in a day: charge starting 12:05, discharge starting 18:55, $112,894.83, 47.425% - OBSERVED | The unconstrained optimum runs 1,573 full cycles in the year. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | discharge steps / 24 = 1,573.17 - OBSERVED | Charge it $20 for every MWh it delivers, a stand-in for wear, and it runs 697 while keeping 95.8% of its gross arbitrage | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 696.92 cycles; gross arbitrage of the wear-aware schedule $228,034.58 = 95.793% of $238,049.52 - OBSERVED | at 90% the bound rises to $238,653.11, $603.59 more. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | with simultaneous charge and discharge allowed (it pays only when the price is below zero): 238,653.11, 603.59 more - OBSERVED | a linear-programming solver (HiGHS 1.15.1, run on 2026-11-01) gave 274,611.7033 at 100% efficiency, equal to this page's bound, and 238,653.1077 at 90%, equal to the simultaneous version | research/the-hours-below-zero/solver-runs.txt; recreated: highspy 1.15.1 (the scout's venv) running research/the-hours-below-zero/lp_check.py on the fresh CSVs, 2026-11-02 | 'value': 274611.7033 at 1.0 and 'value': 238653.1077 at 0.9, identical to the frozen runs; this pass's DP at 100% gives 274,611.70333 - OBSERVED | a mixed-integer run that forbids charging and discharging at once gave 44,787.4362, 25,984.4723 and 1,348.0101 on three three-day windows (25 to 27 January, 20 to 22 June and 10 to 12 October 2026) | research/the-hours-below-zero/solver-runs.txt; recreated: highspy 1.15.1 lp_check.py milp on three-day files cut from the fresh CSVs (intervals ending 00:05 on the first day to 00:00 after the third) | 44787.4362, 25984.4723, 1348.0101, identical; this pass's DP on the same windows: 44,787.43617, 25,984.47233, 1,348.01008 - OBSERVED | Grouped instead by AEMO's 04:00 trading day, the best day holds 16.2% instead of 16.1%, the ten best days still hold 39.6%, and half the value still takes 35 days. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | the same schedule in 04:00-to-04:00 days: best 16.246%, ten best 39.580%, half on the 35th - OBSERVED | Those figures are for the tie-break below; under some of the other orders the trading-day best day holds 16.3%, while the calendar best day holds 16.1% under all six. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | trading-day best day 16.246% under (wait, charge, discharge), (wait, discharge, charge) and (charge, wait, discharge); 16.257% under the other three; calendar best day 16.127% under all six - OBSERVED | Over all six orders of the three actions, South Australia's ten-best-day share stays between 39.5% and 39.6% and its cycles between 1,573 and 1,580; the largest movement in the region table is Tasmania's, from 20.2% to 20.5%. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | SA1 39.524% to 39.594%, cycles 1,573.17 to 1,580.25; ten-best-day column: TAS1 20.162% to 20.541%, QLD1 10.975% to 11.010%, VIC1 11.683% to 11.685%, NSW1 36.297% throughout; the bound, below-zero and clock columns do not move - OBSERVED | In Queensland and Victoria the ten best days hold 11.0% and 11.7% of the bound, and half of it takes more than 100 days in each, against 35 in South Australia; Queensland's best one-cycle clock reaches 58.9%. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | QLD1 11.010%, half on day 108; VIC1 11.683%, day 110; SA1 35; QLD1 clock 58.900% - CONFIRMED | A household on an ordinary tariff saw none of it. | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 40: "The Panel notes that load is often not exposed to spot prices"; "none" holds by the page's own definition, in the body, of an ordinary tariff as one whose price per kilowatt-hour does not follow the spot market - CONFIRMED | A household on an ordinary retail tariff, one whose price per kilowatt-hour does not follow the spot market, saw none of these hours. | https://www.aemc.gov.au/sites/default/files/2026-04/RSSR%202026%20-%20Final%20Report.pdf | printed page 40, the same sentence; true by the stated definition - OBSERVED | Let the model charge and discharge in the same five minutes, as a linear programme will unless told not to | research/the-hours-below-zero/solver-runs.txt; recreated: highspy 1.15.1 lp_check.py lp at 0.9 on the fresh CSVs | 'simultaneous_intervals': 9566 in the recreated solution, and its value is $603.59 above the bound that forbids it - OBSERVED | on 26 January 2026 it earns $34,092.50 of the bound's $38,390.78, because that evening's spike fell inside its window. Of the $125,154.69 it falls short over the year, 29.1% is on the ten best days. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | clock on 26 January 2026: $34,092.50 against the bound's $38,390.78; that day's three cap intervals end 20:40 to 20:50, inside the discharge window starting 18:55 (the last interval ends 20:55); 238,049.52 - 112,894.83 = 125,154.69, of which 29.060% falls on the bound's ten best days - OBSERVED | On 30 days the clock loses money. | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 30 days with the clock's cash below zero - OBSERVED | where foresight moves the windows to fit each day and averages more than four cycles a day | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | 1,573.17 / 365 = 4.31 a day - OBSERVED | charge 12:05 to 14:05, discharge 18:55 to 20:55: $112,894.83, 47.4% of the bound | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | every static readout of the battery panel equals this pass's recomputation: 1,573.2; 26 January 2026: $38,390.78, 16.1%; 39.6%, half in 35 days; 19.5%; the clock as quoted; $238,653.11, $603.59 more - CONFIRMED | (added) the region table: New South Wales 7,854, 7.5%, 981, 6, 10, 0, -999.99; Queensland 12,423, 11.8%, 2,273, 0, 1, 0, -245.64; Victoria 25,994, 24.7%, 1,855, 0, 0, 0, -969.97; Tasmania 5,526, 5.3%, 265, 4, 4, 1, -1000; South Australia exactly $0: 1,565 | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | every cell recounts: NSW1 7,854 (7.471%), 981, 6, 10, 0, -999.99; QLD1 12,423 (11.818%), 2,273, 0, 1, 0, -245.64; VIC1 25,994 (24.728%), 1,855, 0, 0, 0, -969.97; TAS1 5,526 (5.257%), 265, 4, 4, 1, -1000.00; SA1 1,565 at exactly 0; no source-record entry carries these - OBSERVED | (added) the battery table: New South Wales 147,513.84, 36.3%, 4.1%, 37.5%; Queensland 99,493.35, 6.2%; Victoria 106,392.93, 20.7%, 44.8%; Tasmania 73,537.36, 20.2%, 6.5%, 32.0% | recreated: python3 -I battery.py (this pass's own forward and backward dynamic programmes in exact integers, 1/1200-cent units, over the 60 CSVs re-downloaded 2026-11-02; no engine code) | NSW1 147,513.84 / 36.297% / 4.063% / 37.53%; QLD1 99,493.35 / 6.152%; VIC1 106,392.93 / 20.713% / 44.79%; TAS1 73,537.36 / 20.179% / 6.526% / 31.950%; no source-record entry carries these (regions-battery covers only QLD1 and VIC1 ten-best-day shares and QLD1's clock) - OBSERVED | (added) The page checks each price file against the SHA-256 hash written in data.json before it draws. | public/strata/the-hours-below-zero/app.mjs | prices() digests each fetched file with crypto.subtle SHA-256 and throws on a mismatch before decodePrices; without crypto.subtle the note says the files were not checked; the five shipped files match data.json (verifier section A) - OBSERVED | (added) Power only scales the answer: in this model a battery of twice the power with the same hours of storage earns exactly twice as much. | recreated: the model as engine.mjs solve() and research/the-hours-below-zero/lp_check.py state it | storage is counted in steps of one interval at full power, and each step's cash is price x power / 12 (charge) or price x power x efficiency / 12 (discharge), so doubling power with the same hours leaves the optimal schedule unchanged and doubles every cash term - OBSERVED | (added) It needs only Node 18 or later. It downloads index.html, engine.mjs, data.json and the five price files beside this page | recreated: AW_DIR= node verify-the-hours-below-zero.mjs, from an empty directory | the script's FILES list is exactly those eight; the run on them alone: exit 0, 283 passed, 0 failed (Node 22 here; the download branch cannot run before deploy) - OBSERVED | (added) with --deep, downloads the 60 AEMO files again, compares their hashes with the frozen ones and, whatever the hashes say, compares every price | recreated: AW_DIR= node verify-the-hours-below-zero.mjs --deep | exit 0, 284 passed, 0 failed: "deep: 0 of 60 files differ from the frozen hashes; 525600 of 525,600 prices identical" - CONFIRMED | (added) relates notes: the-grid-has-a-fold is "the physics of how much power one line can carry", the-evening-you-could-afford "what light cost in hours of work across history", the-price-you-didnt-bid "a sealed-bid auction" | src/content/strata/the-grid-has-a-fold.md, src/content/strata/the-evening-you-could-afford.md, src/content/strata/the-price-you-didnt-bid.md | all three exist; deks: "Turn up real-power demand at the far end of one ideal AC line. Two valid voltages approach, meet, and vanish at the exact fold"; seoTitle "The Price of Light in Hours of Work, 1750 BC to Now"; seoTitle "Second-Price Auctions: Why Bidding Your True Value Wins", with "sealed first-price and sealed second-price" formats - CONFIRMED | (added) frontmatter plain: the price changes every five minutes, and for about 2,500 hours of the past year it was below zero. Homes on an ordinary tariff pay a set price, so they never saw it. A battery that knew the future would have made much of its money on a few days. | https://www.aemo.com.au/aemo/data/nem/priceanddemand/PRICE_AND_DEMAND__.csv (all 60 re-downloaded 2026-11-02, every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv; recount in independent Python) | five-minute RRP rows; 2,500 h 40 min below zero; the tariff sentence rests on the RSSR page 40 line and the page's definition; the battery sentence on 16.1% in one day, 39.6% in ten and half in 35 of 365 (recreated above) ## Findings - [fixed] MINOR: the source record left out two tables of reader-visible figures. Re-read against the data, not the draft: the round-2 fixer recounted the region table on 2026-11-02 in separate Python from the scout's 60 AEMO CSVs (every SHA-256 equal to research/the-hours-below-zero/aemo-csv-manifest.tsv) and from the shipped prices-*.bin files (each SHA-256 equal to data.json; 0 of 525,600 prices differ from the CSVs): SA1 30,008 (28.5464%), 1,565, 15, 49, 0, -906.68; NSW1 7,854 (7.4715%), 981, 6, 10, 0, -999.99; QLD1 12,423 (11.8179%), 2,273, 0, 1, 0, -245.64; VIC1 25,994 (24.7279%), 1,855, 0, 0, 0, -969.97; TAS1 5,526 (5.2568%), 265, 4, 4, 1, -1000, every cell of index.html:167-171. It re-solved the battery table with its own exact-integer forward and backward programmes (tie-break idle, then charge, then discharge, the page's declared one): SA1 238,049.52, 39.594%, 19.485%, 47.425%; NSW1 147,513.84, 36.297%, 4.063%, 37.532%; QLD1 99,493.35, 11.010%, 6.152%, 58.902%; VIC1 106,392.93, 11.683%, 20.713%, 44.791%; TAS1 73,537.36, 20.179%, 6.526%, 31.950% (31.9504975%, 2,819,466,210 / 8,824,482,980 units, above 31.95, so 32.0%), every cell of index.html:245-249, with the forward optimum, the backward optimum and the traced schedule's cash equal in every region. The finding holds and no figure on the page is wrong, so the page is unchanged. Source record: new entries region-table (the claim is the table note, "Counted from the shipped price files, intervals ending 2025/11/01 00:05:00 to 2026/11/01 00:00:00. At the cap: exactly the cap in force. Near: at least 90% of it.", source data.json) and battery-table (the claim is "1 MW, 2 hours, 90% round trip, no wear charge, perfect foresight. Shares of each region's own bound.", source engine.mjs), each note listing every row. Running the six orders of the three actions for the battery-table note showed the bound and clock columns fixed, the below-zero column moving by less than 0.0002 of a percentage point (SA1 19.4854607% to 19.4854638%, NSW1 4.06294% to 4.06295%, QLD1 6.15158% to 6.15169%), and the ten-best-day column as the page's ties sentence says (SA1 39.524% to 39.594%, TAS1 20.162% to 20.541%); the note says so. The verifier already asserted both tables and reads only the record's source URLs, so it is unchanged. - [fixed] MINOR (fix-checker, round 3): the battery-table note in the source record and the round-2 finding above said the below-zero column moves over the six tie-break orders "by at most 0.0001 of a percentage point (NSW1 4.0629% to 4.0630%, QLD1 6.1516% to 6.1517%)". False: the round-2 script rounded each share to four decimals before taking the range, so 0.0001 was the gap between two rounded endpoints. Recomputed by the round-3 fixer on 2026-11-02 in exact fractions (its own exact-integer backward programme under all six orders over the 60 AEMO CSVs, 0 of 60 SHA-256 mismatches against the manifest), and again by the verifier's own backward programme: QLD1 6.15157793% (wait-first orders and discharge, wait, charge) to 6.15169100% (charge-first orders and discharge, charge, wait), a spread of 0.000113 of a point; NSW1 4.06294090% to 4.06295107%; SA1, which the note left out, 19.48546068% to 19.48546383%; VIC1 20.71329353% and TAS1 6.52613191% under all six. Both places now read "by less than 0.0002 of a percentage point (SA1 19.4854607% to 19.4854638%, NSW1 4.06294% to 4.06295%, QLD1 6.15158% to 6.15169%)", the note adding that VIC1 and TAS1 do not move. The page's 4.1%, 6.2% and 19.5% are the same under every order, as before. (The claims pass's own evidence on the ties claim line, "the bound, below-zero and clock columns do not move", is the pass's words and is kept; at the page's one decimal it holds, and the movement is the less than 0.0002 of a point given here.) - [fixed] MINOR (fix-checker, round 3): the same note and finding called Tasmania's one-cycle clock share "exactly 31.9505%", and the note introduced three-decimal values with "unrounded:". Recomputed in exact integers by the round-3 fixer: the best fixed clock earns 2,819,466,210 units against the bound's 8,824,482,980 (1/1200-cent units), 31.950497456%, the figure the fix-checker and the engine give. It is not exactly 31.9505%; it lies above 31.95, so the page's 32.0% is right. Both places now say 31.9504975% with the fraction, and "unrounded:" is now "to three decimals:". - [fixed] MINOR (fix-checker, round 3, given as a non-blocking note): the check section's ties sentence said "the largest movement in the region table is Tasmania's, from 20.2% to 20.5%", but the page's table of regional counts has nothing that depends on the tie-break; the figures are the battery table's ten-best-day column (TAS1 20.162040% to 20.541455% over the six orders, 0.379 of a point, against SA1 0.070, QLD1 0.035, VIC1 0.002, NSW1 0, and less than 0.000114 for the below-zero column; the bound and the clock do not move). The page now says "the largest movement in the battery table is Tasmania's, from 20.2% to 20.5%." (index.html:276), the source-record ties entry carries the new words and the round-3 run, and the verifier says the new sentence and now also asserts that the below-zero share moves less than 0.0002 of a point under the six orders and less than Tasmania's ten-best share, and never at one decimal. The ties claim line above keeps the claims pass's words, which named the region table. ## Fixer's note (round 2, 2026-11-02) The one finding was checked against the 60 AEMO CSVs and the shipped price files before it was fixed. It held, and it was not declined. The claim lines are the pass's own words and verdicts, unchanged: the two "(added)" table lines still say no source-record entry carried the tables, which was true when the pass read the record. The fix touches only assay/sources/the-hours-below-zero.json (78 entries to 80) and this record. The fixer's scripts (recount.py, battery_table.py, ties.py) are in the wave scratchpad, not the repository. ## Fixer's note (round 3, 2026-11-02) Both problems in the fix-checker's report were recomputed before they were fixed, and both held: the 0.0001 was an artefact of rounding before the range, and 31.9505% was a rounding of 31.9504975%. Neither touched a figure on the page. The fix-checker's note on the ties sentence was also taken: one word on the page changed ("region" to "battery"), with the source record, the verifier and this record following it. The claim lines are still the pass's own words and verdicts (86 lines: 60 CONFIRMED, 26 OBSERVED). After the fix: node verify-the-hours-below-zero.mjs, exit 0, 327 passed, 0 failed; --mutate, exit 1, 467 passed, 7 failed; with house blocks added to a copy, exit 0, 285 passed, 0 failed, and red again with a figure planted in the edited ties sentence; the mutation sweep, the-hours-below-zero: 706 mutated, 706 caught, 0 survived (text 0, meta 0, year 0); check-sources sound (80 claims); Playwright at 390, 768 and 1440 px, 0 console errors, 0 overflow, 0 external requests. The round-3 script (round3_check.py) is in the wave scratchpad, not the repository. - [fixed] MINOR (fix-checker, round 4; not on the page): the round-3 wording in the ties entry of assay/sources/the-hours-below-zero.json and in the round-3 finding above gave "at most 0.000113" of a percentage point for how far the Queensland below-zero share moves over the six tie-break orders. Recomputed exactly by the fix-checker from the 60 frozen price files (six-order backward programme, 0 of 60 SHA-256 mismatches): 6.151577926% to 6.151690999%, a spread of 0.000113073 pp, which the verifier also computes (0.00011307288603834564). A rounded value had been used as a bound. Both now read "less than 0.000114" (the source note also gives 0.00011307), and the verifier's failure message prints the movement to eight places instead of calling a rounded value a maximum. Applied by the directing instance (ccr-81332fb3-8nrbtu) exactly as the fix-checker prescribed, after reading its computation; check-sources and check-claims-pass pass, and the verifier is 327/0 with --mutate red.