-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add post about carb buffer pool decline
New data released by the California Air Resources Board shows that California’s forest offset buffer pool has shrunk two quarters in a row.
- Loading branch information
Showing
3 changed files
with
169 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
--- | ||
version: 1.0.0 | ||
title: California’s shrinking buffer pool | ||
authors: | ||
- Grayson Badgley | ||
date: 04-05-2024 | ||
summary: New data released by the California Air Resources Board shows that California’s forest offset buffer pool has shrunk two quarters in a row. | ||
card: carb-buffer-decline | ||
fileId: 15dZiRTDJRsPBbZZJl68_796yHrT5ACa8S-_BXe6psAw | ||
components: | ||
- name: BufferBalance | ||
src: ./buffer-balance.js | ||
--- | ||
|
||
New data released yesterday by the California Air Resources Board (CARB) shows that California's forest carbon buffer pool shrank by 0.97 million credits, compared to Q4 2023. This marks the second quarter in a row where CARB’s official reporting has shown the buffer pool decreasing in size. In the previous quarter, the buffer pool lost more than 3.4 million credits. The quarterly losses from these official reports from CARB are consistent with our previous attempts to independently track carbon losses on a project-by-project basis. | ||
|
||
California’s forest offsets program uses a sort of self-insurance program, called a buffer pool, to insure carbon losses that stem from unexpected events, like wildfire. All projects pay into the pool when they’re issued new credits. The regulator retires credits from the pool when something goes wrong. While we’ve [regularly](https://carbonplan.org/research/offset-project-fire) [covered](https://www.frontiersin.org/articles/10.3389/ffgc.2022.930426/full) [carbon](https://carbonplan.org/blog/bootleg-fire-update) [losses](https://carbonplan.org/blog/buffer-update-two) at the scale of individual projects, this update looks at CARB’s [Compliance Instrument Reports](https://ww2.arb.ca.gov/our-work/programs/cap-and-trade-program/program-data/compliance-instrument-report), which provide an official accounting of the current size of California’s forest offset buffer pool. These data provide additional context about the significance of carbon loss events over the years at a program-wide scale (Figure 1). | ||
|
||
<Figure> | ||
<BufferBalance /> | ||
<FigureCaption number={1}> | ||
The size of California’s forest offset buffer pool, based on quarterly | ||
Compliance Instrument Reports released by the California Air Resources | ||
Board. For much of the program’s history, the buffer pool has steadily | ||
grown. The two most recent quarters mark a change in that pattern. | ||
</FigureCaption> | ||
</Figure> | ||
|
||
From the program’s outset, California’s buffer pool has steadily grown because the number of new credits added each year has exceeded the number lost. The size of the buffer pool peaked in Q3 2023 with 31.64 million credits. Along the way, California has dipped into the pool, resulting in quarter-to-quarter declines a few times over the years. Those previous declines, however, have tended to be both small and transient. Prior to these last two reports, the largest net quarterly decline occurred back in 2017, when the buffer pool experienced a loss of 0.54 million credits between Q2 and Q3. Despite these blips, the buffer pool has invariably bounced back by the next quarter. | ||
|
||
This newest report, however, marks the first time the buffer pool has declined over two consecutive quarters. Around 4.38 million credits were lost over the last two quarters. By comparison, a total of 2.74 million credits were added to the buffer pool in all of 2022 and 2023, combined. | ||
|
||
Meanwhile, the buffer pool is already on the hook for additional losses that are still making their way through verification. We estimate that wildfire losses from two projects, [ACR260](https://carbonplan.org/research/offsets-db/projects/acr260) and [ACR255](https://carbonplan.org/research/offsets-db/projects/acr255), will eventually remove around 4.5 million credits from the buffer pool once they have been officially counted. Absent a sudden infusion of credits from new project development, we should expect the buffer pool to continue to shrink in the quarters ahead. | ||
|
||
The buffer pool still has more than 27 million credits in the bank. But after a decade of steady growth, these two quarters of decline should serve as a wake up call. The impacts of climate change are expected to get worse and the buffer pool can’t outrun those risks forever. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
import { Box } from 'theme-ui' | ||
import { format } from 'd3-format' | ||
import { | ||
Chart, | ||
Ticks, | ||
TickLabels, | ||
Axis, | ||
AxisLabel, | ||
StackedBar, | ||
Plot, | ||
Grid, | ||
Point, | ||
} from '@carbonplan/charts' | ||
|
||
// data from https://github.com/carbonplan/toucan-crypto-offsets/tree/main/data | ||
|
||
const data = { | ||
'2014-04-01': null, | ||
'2014-07-01': 1193461.0, | ||
'2014-10-01': 1238339.0, | ||
'2015-01-01': 1699634.0, | ||
'2015-04-01': 1816791.0, | ||
'2015-07-01': 2443254.0, | ||
'2015-10-01': 3822389.0, | ||
'2016-01-01': 4104963.0, | ||
'2016-04-01': 4167304.0, | ||
'2016-07-01': 5255109.0, | ||
'2016-10-01': 6267389.0, | ||
'2017-01-01': 6412926.0, | ||
'2017-04-01': 7937763.0, | ||
'2017-07-01': 7395709.0, | ||
'2017-10-01': 9854044.0, | ||
'2018-01-01': 12642852.0, | ||
'2018-04-01': 13592716.0, | ||
'2018-07-01': 14103294.0, | ||
'2018-10-01': 17802767.0, | ||
'2019-01-01': 19690569.0, | ||
'2019-04-01': 20025522.0, | ||
'2019-07-01': 20933077.0, | ||
'2019-10-01': 21746192.0, | ||
'2020-01-01': 22276604.0, | ||
'2020-04-01': 24079774.0, | ||
'2020-07-01': 24637128.0, | ||
'2020-10-01': 27392548.0, | ||
'2021-01-01': 28706601.0, | ||
'2021-04-01': 28578968.0, | ||
'2021-07-01': 29053336.0, | ||
'2021-10-01': 29819664.0, | ||
'2022-01-01': 30215556.0, | ||
'2022-04-01': 30374173.0, | ||
'2022-07-01': 30484812.0, | ||
'2022-10-01': 30942686.0, | ||
'2023-01-01': 30910407.0, | ||
'2023-04-01': 31057039.0, | ||
'2023-07-01': 31637009.0, | ||
'2023-10-01': 28233448.0, | ||
'2024-01-01': 27222924.0, | ||
} | ||
|
||
const keys = Object.keys(data) | ||
const counts = keys.map((k, index) => { | ||
const [year, month] = k.split('-').map(Number) | ||
const x = year + (month - 1) / 12 | ||
const previousIndex = index - 1 | ||
const previousValue = data[keys[previousIndex]] ?? 0 | ||
return [ | ||
x, | ||
0, | ||
data[k] ?? 0, | ||
data[k] ?? 0, | ||
previousValue > data[k] ? previousValue : 0, | ||
] | ||
}) | ||
|
||
const BufferBalance = () => { | ||
const formatter = format('~s') | ||
|
||
return ( | ||
<Box sx={{ width: '100%', height: ['275px', '350px', '350px', '350px'] }}> | ||
<Chart x={[2014.25, 2024.25]} y={[0, 40000000]} padding={{ left: 60 }}> | ||
<Ticks left /> | ||
<Ticks | ||
bottom | ||
count={10} | ||
sx={{ display: ['none', 'inherit', 'inherit', 'inherit'] }} | ||
/> | ||
<Ticks | ||
bottom | ||
count={5} | ||
sx={{ display: ['inherit', 'none', 'none', 'none'] }} | ||
/> | ||
<TickLabels left format={formatter} /> | ||
<TickLabels | ||
bottom | ||
count={10} | ||
sx={{ display: ['none', 'inherit', 'inherit', 'inherit'] }} | ||
/> | ||
<TickLabels | ||
bottom | ||
count={5} | ||
sx={{ display: ['inherit', 'none', 'none', 'none'] }} | ||
/> | ||
<Axis left bottom /> | ||
<Grid horizontal count={5} /> | ||
<AxisLabel left>Credits</AxisLabel> | ||
<AxisLabel bottom>Year</AxisLabel> | ||
<Plot> | ||
<StackedBar data={counts} color={['grey', 'grey', 'red']} /> | ||
</Plot> | ||
<Point x={2024.25} y={40000000} align='right'> | ||
<Box | ||
sx={{ | ||
color: 'red', | ||
textTransform: 'uppercase', | ||
fontFamily: 'mono', | ||
fontSize: [0, 1, 1, 1], | ||
}} | ||
> | ||
Buffer Pool Declines | ||
</Box> | ||
</Point> | ||
</Chart> | ||
</Box> | ||
) | ||
} | ||
|
||
export default BufferBalance |