Changelog
Product updates and release notes for Open Electricity
Stay up to date with the latest features, improvements, and bug fixes in Open Electricity.
v4.5.11
August 14, 2026Facility Locations and Boundaries
- Facility coordinates and site boundaries improved - Facility geography was matched against OpenStreetMap and every proposed change reviewed by hand before it was applied. 151 facilities were updated: 119 gained a link to their OpenStreetMap site, and 32 had their coordinate corrected without a link change. 381 facilities now carry a site boundary, up from 316. Several coordinates were materially wrong rather than merely imprecise, including Bango Wind Farm, which sat 24 km from the wind farm it describes. Every proposal was accepted or rejected individually, and 94 were rejected, most often because the nearest OpenStreetMap object belonged to a different plant sharing the site. A battery co-located at a solar farm is a common case: the two are separate units and only one of them owns the polygon (#481)
- OpenStreetMap relations resolve correctly - Site geometry is stored against an OpenStreetMap id whose sign indicates whether it refers to a way or a relation, and that convention had not held in the stored data. Because most large wind and solar farms are mapped as relations, the lookup was failing for exactly the largest sites. Ids are now resolved as either type before failing (#481, #634)
- MacIntyre coordinate corrected - Australia’s largest wind farm was positioned 42 km east of itself, near Warwick rather than the Herries Range. There is no enclosing area mapped for the site, so the coordinate is now the centroid of its 100 mapped turbines (#481)
- A facility that could never reach the database - Facility codes are compared with a leading zero stripped, because that prefix marks a code OpenNEM generates rather than one AEMO issues. Winton North’s generated code,
0WNSF, strips toWNSF, which is a real and entirely different facility, Wangaratta. The two collided and whichever was seen second was dropped, so Winton North’s location was correct in the CMS and unreachable from the API. A generated prefix is now kept whenever stripping it would collide with another facility (#481, #637) - Removing a facility’s OpenStreetMap link now takes effect - Clearing the link in the CMS had no effect on the database, so an incorrect match could never be withdrawn. Picton in Western Australia was linked to Pindari Power Station in New South Wales and served that boundary, 3,392 km from the facility, after the link had already been removed. Clearing a link now also clears the site boundary derived from it (#481, #639)
Wind farms remain a known gap. Their turbines are mapped in OpenStreetMap as individual points rather than an enclosing area, so a site relation for a wind farm often encloses no polygon at all and no boundary can be derived from it. Per-turbine geometry is tracked separately (#635).
A related gap is still open: some facilities now share a boundary with a neighbouring plant rather than holding their own (#638).
Bug Fixes
- Parkeston no longer reported as consuming 355 GWh a year - A 110 MW gas peaker in Western Australia was publishing negative generation in 97% of its intervals, which distorted its energy, its capacity factor, and any WEM fleet total derived from them. Its metering point changed meaning at the WEMDE transition in late 2023: it now reads the whole site, so the co-located Kalgoorlie load is netted off the generator’s output. Gross generation cannot be recovered from that feed. A negative reading on a one-way generator is site load measured at the same point rather than negative generation, and is now recorded as zero across the aggregation. Storage and pumps are unaffected, since charging is genuine consumption. The correction is 1,562 GWh against 2.2 million GWh of positive generation, and Parkeston is 1,009 GWh of it (#613, #636)
- NEM data now starts at market open - Facility data for the NEM began at 1 January 1999, six days after the market itself. The records were always in the database (706,205 intervals across 134 units and all four mainland regions from 7 December 1998), but the network’s
data_first_seenwas pinned to 1999, which bounded the ClickHouse backfill and left December 1998 unaggregated and unservable. That month is now aggregated and available through the API and exports, and market summary (demand and price) now starts at 13 December 1998, the first interval AEMO published (#615, #621) - Bouldercombe and Dalrymple battery history restored - Both batteries were missing large parts of their generation history. AEMO retired their single-direction DUIDs in favour of paired generation/load codes, and the paired codes only exist from the point the bidirectional DUID appears, October 2024 for Bouldercombe and August 2024 for Dalrymple, leaving a ten-month void where the retired codes held data and the current ones did not. Separately, all of 2024 was present in Postgres but absent from ClickHouse for all three derived codes. The retired DUIDs are now carried forward onto their paired codes as a one-to-one alias, verified interval by interval against the overlap period, and the affected windows re-aggregated. Bouldercombe 2024 discharge goes from 7.6 GWh to 33.6 GWh, charge from 9.1 GWh to 41.8 GWh (#603, #625)
- Unit first-seen dates corrected - A unit’s
data_first_seenwas computed from its first interval of non-zero output, so units that sat idle when they first reported were dated from whenever they first generated instead. Mount Piper 4 was out by 418 days. It now reflects the first telemetered reading of any value, recomputed across all 854 units (#615) - Network fueltech totals reconciled with per-unit data - Network-level fueltech series could report less energy than the sum of the individual units, most visibly for battery discharge. Daily aggregates are versioned by completeness so a partial update cannot overwrite a complete one; the side effect was that data arriving for a day after it was first aggregated produced an update that lost the comparison and was discarded, leaving the network-level daily figure stuck at its earlier value. The affected daily aggregates have been rebuilt, resolving 18 months and 41 GWh of battery discharge divergence, with network and per-unit series now identical. Historical re-aggregations now rebuild those aggregates automatically, so the drift cannot reappear (#592, #627)
- Missing intervals return null instead of vanishing - When a series had no data for an interval inside its own lifetime, the point was omitted from the response entirely, leaving consumers unable to distinguish “no data” from a genuine zero, or from a unit that had not yet been commissioned. Those points now return an explicit
null. Only interior gaps are filled, so nothing is invented before a unit’s first reading or after its last and commissioning and retirement boundaries are unchanged (#615, #621) - Historical month queries on the v3 stats endpoint - The deprecated v3 Power Network Region by Fueltech endpoint ignored its
monthparameter and always returned the last seven days, because the parameter was defaulted to today before the static-file redirect was evaluated. Historical months are now served as documented. The endpoint remains deprecated in favour of the v4 API (#393, #626)
Reliability
- Alerting on silently dropped facility data - The ClickHouse ingest joins facility data to units, facilities and fueltech, and any code failing one of those joins was discarded with no warning. This is the mechanism that hid roughly 19,900 GWh of WEM history until it was found by hand earlier this year. A daily check now reports any code carrying energy that the ingest would drop, covering both unmapped codes and units missing a fueltech or facility (#604, #624)
- Alerting on frozen generation telemetry - When a unit’s telemetry link fails, AEMO republishes the last value it saw rather than a gap, so the reading stays within the unit’s capacity and is present in every interval, passing both range and completeness checks. A solar farm frozen this way reports full output through the night, inflating its energy for as long as the fault lasts. A daily check now looks for solar units generating overnight, which no working plant does. Run across eleven years of NEM history it identifies 22 such incidents totalling roughly 8.6 GWh of generation that never occurred. Those historical figures are unchanged for now, as no corrected source exists to restore them from (#544, #628)
v4.5.10
August 6, 2026Bug Fixes
- Tracker curtailment display - Hotfix for a v4.5.9 regression: curtailment on tracker views longer than 7 days read 1,000x too high. The v3 static export serves every energy series in GWh, but curtailment series were exported as raw values labelled MWh — masked until v4.5.9 because the stored values happened to be GWh-scale. Curtailment energy series are now exported in GWh like every other energy series, and all affected static exports (2020 onward, including per-region files) have been regenerated. The v4 API
curtailment_*_energymetrics were unaffected and remain in MWh (#607, #614)
v4.5.9
August 5, 2026Data Quality
- Demand energy unit fix - The market summary’s energy columns (demand, gross demand, renewable generation and curtailment energy, plus their derived market values) were stored 1,000x too low — values were gigawatt hours but labelled megawatt hours. All seven columns are now stored in true MWh, ClickHouse aggregates and rollup views have been rebuilt from 1999 to present, and static energy exports regenerated. Demand energy records were purged and rebuilt with uniform MWh units — the series previously mixed unit regimes, freezing record highs for ~15 years. July 2026 is confirmed as a genuine new Victorian monthly demand record (4,744,905 MWh, ahead of 4,707,075 MWh set in 2010) (#605, #606)
- WEM historical generation restored - WEM (Western Australia) facility generation was almost entirely null before December 2013, as AEMO published no instantaneous output quantity in that era. Generation is now derived from published energy, with history backfilled and all aggregates rebuilt — WEM facility series are now continuous from market start (#598, #600)
API
- Commissioning unit status - The facilities endpoint now derives a
commissioningstatus: operating units whose maximum observed generation is at or below 90% of capacity reportstatus_id=commissioningand are excluded fromoperatingfilters. The status is computed on read and mirrors the Open Electricity website rule (#602)
Reliability
- Milestone social cards - Fixed the production container environment so automated milestone social card images render again (#597)
v4.5.8
July 7, 2026Data Quality
- Curtailment history gaps filled - Solar and wind curtailment series showed recurring blocks of
0in months where AEMO’s semi-scheduled curtailment fields were missing from ingestion, rather than a genuine zero. We re-ingestedDISPATCHREGIONSUMfrom the AEMO MMSDM archives across the 24 affected months (September 2020 to August 2024), re-aggregated the market summary and regenerated every static export; curtailment is now continuous from September 2020 — the point at which AEMO began publishing the semi-scheduled fields (#578)
Reliability
- AEMO archive ingestion - AEMO changed its MMSDM historical-archive filename format in August 2024 (
PUBLIC_ARCHIVE#<TABLE>#FILE01#…, where#is served url-encoded). The MMS crawlers now recognise both the legacy and new naming, so historical backfills from August 2024 onward no longer silently skip files (#593, #594)
v4.5.7
July 6, 2026Data Quality
- Rooftop solar edge gaps - Rooftop solar generation and forecast series no longer show intermittent nulls at the edges of a request window; forecast and generation windows are snapped to the 30-minute grid and rooftop is carried forward to the core-generation edge (#579, #587, #591)
- Battery storage excluded from renewables - Battery storage discharge is no longer counted toward renewable and fossil generation totals in the milestone/record materialized views, correcting an erroneous WA fossil-share record (#585, #589)
Reliability
- Worker stability - Interval-check ClickHouse writes now run off the async event loop, preventing the worker from starving its Postgres connection pool during incremental aggregation (#572, #588)
- Crawler noise reduction - Rolled-off rooftop intervals now age out of missing-interval detection, and expected NEMWeb fetch messages are downgraded from errors, cutting re-read thrash and log noise (#590)
- CMS webhook resilience - Fixed a Sanity seen-range SQL alias and quieted expected webhook errors (#586)
v4.5.6
July 6, 2026Reliability
- Milestone social posts restored - Milestone and weekly-summary social posts were silently failing to render in the production container due to a Chromium sandbox flag; the renderer now passes the required flags so automated posts publish again (#583)
v4.5.5
June 23, 2026Bug Fixes
- No more spurious zeros on the latest interval - The most recent 5-minute interval is provisional while AEMO data is still settling, which could briefly surface a
0for renewable proportion or emissions that healed on the next request. Live/v4/dataand/v4/marketresponses now stop at the last fully-settled interval, and renewable proportion returnsnull(not0) when gross demand has not landed yet (#575, #576, #577)
Reliability
- ClickHouse memory guard - The API serving path now caps per-query memory and spills large aggregations to disk, so a single heavy request can no longer exhaust the database (#564)
- CMS sync resilience - Facility sync now retries transient Sanity CMS timeouts and Postgres deadlocks instead of failing the run (#566, #568)
- Export upload retries - Static export uploads to R2 storage now retry on transient network errors (#570)
Documentation
- Metrics known-issues refreshed - Removed the stale MARKET MW summing and HOUR-interval analyzer-error warnings from the metrics reference; both were fixed in v4.5.1 and the page now documents the corrected aggregation behaviour (#562)
v4.5.4
June 11, 2026Data Quality & Backlog Repair
A major historical data repair campaign: a full audit of June 2009 to present, with gaps filled, bad values corrected and every aggregate rebuilt from source.
- Daylight-saving ingestion repair - Fixed a +1 hour timestamp shift affecting roughly 2–3 weeks of NEM data after every October daylight-saving changeover from 2007 to 2023; affected periods were re-ingested from AEMO MMSDM archives and all downstream aggregates rebuilt (#559)
- Rooftop solar backfill (2015–2016) - The synthetic rooftop backfill series is now included in generation and market value aggregates, making NEM rooftop solar continuous from March 2015 and closing a ~16-month gap in solar series
- WA rooftop gap fill - Recovered 287 missing days of APVI rooftop data across 2015–2016, and fixed a client crash on older API payloads that was the original cause of the gaps
- Demand gaps - Filled missing NEM demand intervals from NEMWeb
- Negative generation clamp - Renewable generation totals no longer count negative unit scada intervals (auxiliary loads while a unit is powered but not generating); applies to renewable energy calculations, records and milestones (#561)
- Renewable proportion validation - Rooftop solar is now included in gross demand and renewable generation in the market summary, renewable proportion records are bounded and validated against the rebuilt data, and a facility network assignment that leaked WA hydro into NEM totals was corrected (#558)
- Full re-aggregation - All aggregates and rollup views rebuilt from June 2009 to present; all static energy, monthly and daily exports regenerated
Bug Fixes
- Facility storage capacity - Stale unit storage capacity values persisted after removal in the facility CMS; the sync now clears them, fixing a wind farm reporting battery storage (#560)
- Crawler efficiency - Missing-interval detection now aligns to each crawler’s native interval, so 30-minute and hourly crawlers (e.g. rooftop) no longer re-read their entire window every run
- API data range - API keys with extended data-range access were incorrectly capped at the default range (#555, #557)
- Historical NEM ingestion - Chunked dispatch region upserts and tolerate pre-2020 AEMO files missing curtailment fields (#559)
v4.5.3
June 4, 2026Bug Fixes
- Full facility history - Facility energy and power endpoints with
period=allnow return complete history from the network’s first data (1999 for the NEM) instead of silently clipping to the most recent ~20 years (#543) - Pre-2009 demand-weighted price - Hardened the pre-July-2009 NEM price calculation so the 30-minute trading price is carried forward across the 5-minute buckets (
locf), keeping FY05–FY09 demand market value aligned with AER published figures (#309)
Documentation
v4.5.2
June 3, 2026Data & Pipeline
- Monthly demand accuracy - Corrected May demand and gas figures: monthly demand is now aggregated from the daily materialized view instead of a stale monthly view, with a month-aligned backfill window (#548)
- Calendar gap-fill - Monthly and yearly series are now gap-filled onto the calendar grid, keeping market-value and weather coverage aligned (#548, #549)
Bug Fixes
v4.5.1
June 1, 2026Major Features
- Real-time WEM data - Western Australia generation and 5-minute dispatch pricing are now near-real-time via the new WEMDE dispatch-solution feed, replacing the previous ~24-hour lag (#527, #530, #533, #538)
Plans & Data Access
- Extended historical access for Community - Community plans can now query the last 2 years of data (previously 1 year). Academic and Enterprise plans retain full history back to 1999.
- Data licensing clarified - Plan comparisons now state usage terms: Community and Academic are licensed for non-commercial use; commercial use requires an Enterprise plan.
See Data Limits for the full breakdown.
API Improvements
- Accurate power aggregation - Power (MW) is now averaged across intervals instead of summed, fixing inflated figures at every grouping level (#523, #525)
- OpenAPI spec - Enriched with a generic response envelope, field metadata, and per-language code samples
- Capacity history - Now sums
capacity_maximumwith a fallback to registered capacity, fixing NULL WEM coal, gas and wind capacity (#528)
Data & Pipeline
- Gap-filled series - Chart series are reindexed onto the interval grid so upstream data gaps no longer misalign timestamps (#534, #535)
Bug Fixes
- WEM price aggregation - Confined to WEM with a hardened parser;
locf()interpolation split into separate WEM and NEM columns (#541, #542)
Notifications
- Record debouncing - Interval milestone records are debounced to stop notification bursts, and battery-charging significance was lowered below the alert threshold to stop charging-driven alert floods
SDK Releases
Python client — openelectricity 0.11.2
- Proxy and custom TLS/certificate support on sync and async clients (#22, #29)
- New renewable-with-storage and gross-demand market metrics (#31)
- Notebook-safe sync client that works inside an existing event loop (Jupyter / IPython) (#16, #32)
- Restored Python 3.10+ support (#28);
unit_code(#27) andnetwork_region(#35) parity across sync and async
TypeScript client — openelectricity 0.9.1
v4.5.0
April 20, 2026The 4.5.0 release moves the analytics pipeline to ClickHouse, rewrites interconnector flow tracing, and introduces a unified plan system for platform.
Major Features
- Flow Tracing v4 - Rewritten interconnector flow solver with a dynamic, ClickHouse-backed topology model that handles circular flows and per-flow emissions, exposed through the API and the homepage (#470)
- Automated weekly & monthly summaries - Generation and record summaries are now published automatically to X, Bluesky and LinkedIn behind a Slack approval workflow (#64)
- Renewable-with-storage metrics - New market metrics that account for storage when computing renewable proportion
API Improvements
- ClickHouse-backed stats - v4 station and facility stats endpoints restored and served from ClickHouse
- Facility endpoint - Added a
unit_codefilter, required authentication, and corrected no-data responses to 404 (previously 416) - Cleaner
/v4/me- Trimmed response and removed the deadwith_clerkparameter from the OpenAPI spec
Data & Pipeline
- Postgres to ClickHouse - The analytics and export pipeline (power, energy, demand, flows) was migrated to ClickHouse and the legacy Postgres aggregation pipeline retired
- WEM demand - Derived from facility SCADA generation, since the public WEM feed provides price only
- Crawler improvements - AEMO sources moved to polling with backoff and parallelized crawls, with gap-aware catchup that skips redundant work
- Materialized views - Completeness-versioned daily and monthly views with full-day backfill and AEST-aligned refresh windows
Bug Fixes
- API key authentication - New API keys no longer return 401 across all endpoints (#487)
- Double-counting - ClickHouse
FINALscoping corrected to stop duplicate-row double-counting in market and price queries - Energy calculation - Corrected the trapezoidal integration window and quality-flag handling; batteries excluded from generation queries
- Export boundaries - All series are truncated at the core generation boundary so demand, price and rooftop never extend past it
- RecordReactor - Moved to incremental milestone detection with automatic backfill of gaps
SDK Releases
Python client — openelectricity 0.10.1
unit_codeparameter onget_facility_data- Flow market metrics;
fueltechandstatusparameters now accept plain strings - New bidirectional battery example
TypeScript client — openelectricity 0.8.1
unitCodesparameter ongetFacilityData- Flow and renewable-with-storage market metrics, plus the
hydro_and_storagefueltech getFacilitiesnow throwsNoDataFoundon 404 (previously mishandled)
v4.4.0
January 8, 2026Major Features
-
Renewable Energy Proportion Tracking - Real-time renewable energy percentage tracking across the network (#423)
- New milestone type in RecordReactor for tracking renewable proportion
- Significance scoring for renewable energy records
- Exposed via API endpoints for programmatic access
-
Max Generation Tracking - Historical peak generation capacity tracking per facility unit (#461)
- New
max_generationandmax_generation_intervalfields on facility units - Available via Facilities API endpoints
- New
Infrastructure & Technology Upgrades
-
Python 3.14 Support - Platform upgraded to Python 3.14 for improved performance and compatibility (#468)
- Updated python-sanity dependency with async client and HTTP/2 support
- Migrated from clickhouse-connect to clickhouse-http driver
- Enhanced async patterns and event loop handling
-
Unified HTTP Client - New rnet-based HTTP client replacing legacy libraries (#466, #467, #475)
- Resolve crawl request errors with new rust-based HTTP client for all requests
-
Granian ASGI Server - Application server upgraded from Hypercorn to Granian (#476)
- Better resource utilization
API Improvements
- Facility API Enhancements - Expanded facility endpoint capabilities (#464)
- Filter facilities by fueltech group
- Unit datetime metadata fields synchronized from CMS
- Timezone-aware datetime handling per network
- Improved serialization excluding None values
Bug Fixes
- Curtailment Data Alignment - Fixed AEMO timestamp handling for curtailment data (#455)
- Interval Limits - Increased max interval days for better data coverage (#454)
- Data Storage - Fixed empty price data storage to prevent null records
- Market Summary - Fixed market summary refresh and column alignment
- Worker Stability - Catchup worker now runs all aggregates correctly
- Battery Mapping - Fixed battery unit mapping schema parsing issues
- Export Controller - Resolved ClickHouse query iteration and record processing
- API Responses - Fixed unset field handling by setting response_model_exclude_unset to false
- Logging - Reduced debug noise from httpcore and hpack, improved Logfire integration
Documentation
- Enhanced documentation for AEMO timestamp handling in curtailment data
- Updated API documentation with new endpoints and fields
- Infrastructure upgrade documentation and migration guides
v4.3.0
September 8, 2025Major Features
-
Pollution Data (NPI) - Comprehensive pollution and emissions tracking from the National Pollutant Inventory now available across the platform (#436)
- Track greenhouse gases, air pollutants, and heavy metals from power generation facilities
- Details in documentation at the Pollution Guide
- Access via API endpoints for programmatic integration
- Example implementations:
-
Battery State of Charge - Real-time battery storage level tracking showing current energy stored in battery facilities (#434)
- Monitor state of charge (SoC) at unit, facility, region and network levels
- View battery storage docs in the Battery Storage Guide
- New API endpoints for battery-specific data
- Example implementations:
-
Facility API Improvements - Enhanced facility endpoint with additional fields (#453)
- Added NPI ID field for pollution data mapping
- Added location data for facilities
Improvements and Bug Fixes
- CPI Data Update - Consumer Price Index data import and tracking (#450)
- Curtailment Tracking - Renamed
curtailment_solartocurtailment_solar_utilityfor clarity (#433) - Battery Management - Improved battery unit handling and aggregation (#434)
- Record Tracking - Fixed duplicate records with identical rounded values (#451)
- Demand Energy - Demand energy now sourced from analytics table (#390)
- Unit Metadata - Cleaned out obsolete unit metadata for better data integrity
Documentation
- New comprehensive guides for pollution data and battery storage
- Updated API documentation with new endpoints
- Added code examples for accessing new features in Python and TypeScript clients
v4.2.0
August 27, 2025Major Features
- Curtailment Data - Comprehensive curtailment tracking for renewable energy generation now available across the platform (#433)
- View curtailment data on the Open Electricity website
- Access via API endpoints for programmatic integration
- Full documentation available in the Curtailment Guide
- Example implementations:
Bug Fixes
- Historic Price Data - Fixed issues with historic price data retrieval and accuracy (#309)
Documentation
- New comprehensive guide on understanding curtailment data
- Updated API documentation with curtailment endpoints
- Added code examples for accessing curtailment data in Python and TypeScript clients
v4.1.0
August 15, 2025Major Features
- Capacity History Tracking - New comprehensive capacity history output that includes rooftop solar and applies unit history tracking (#415)
- CMS Integration - Import CMS IDs to database for facilities and units for better tracking
- APVI Capacity History - Controller to import APVI capacity history as unit histories (#432)
- Unit Histories - Enhanced unit histories with time axes for fields (#431)
Improvements
- Battery split static map improvements and bug fixes (#420)
- Rooftop capacity storage enhancements (#430)
- Decimal precision improvements in unit_history table (#431)
- Gap-fill improvements for rooftop capacity history (#415)
Bug Fixes
- Fixed WEM crawlers to include APVI month by default
- Resolved postcode prefix mapping (1 is NSW in APVI client)
- Fixed capacity chart task imports (#415)
- Corrected WEMDE trading price crawler length sanity checks
- Resolved issues with DRX facilities in first seen checks
- Fixed padding in query for rooftop capacities in capacity chart (#415)
Documentation
- Updated migration documentation for v4.1
- Enhanced API documentation
v4.0.0
April 24, 2025🎉 Platform Beta Launch
We’re excited to announce the beta launch of the Open Electricity Platform!
- Access at platform.openelectricity.org.au
- Sign up for early access and explore enhanced data analytics capabilities
- Advanced visualizations and custom data exports
SDK Releases
Python Client
- Official Open Electricity Python client library now available
- Install via pip:
pip install openelectricity - Full documentation and examples included
TypeScript Client
- Official Open Electricity TypeScript/JavaScript client library released
- Install via npm:
npm install @opennem/client - Type-safe API access with comprehensive type definitions
API Enhancements
- Performance Improvements - ORjson serialization on data and market endpoints for improved performance
- Milestones API - New milestones endpoints with optimized caching
- Record Reactor - Enhanced record reactor with Slack and Twitter alerts for significant events
- Solar Gap Filling - Improved solar 5-minute gap fill handling for APVI interval sizes
Social Integration
- Bluesky Client - Added Bluesky social media integration
- Twitter Client - Enhanced Twitter client for automated updates
- Record Alerts - Automatic social media alerts for significant generation records
Infrastructure
- API v3 deprecation notice (#424)
- Sanity CMS syncing to database rewrite (#422)
- Enhanced facility and unit integrity monitoring (#429)