---
title: Bengal 0.4.3
description: Free-threading hardening — build error reporting is now race-free on free-threaded Python, so parallel builds no longer crash or report wrong error counts in their summaries.
date: 2026-06-15
draft: false
lang: en
tags: [release, changelog, patch, bugfix]
keywords: [release, 0.4.3, patch, free-threading, thread-safety, correctness]
category: changelog
---

# Bengal 0.4.3

**Key theme:** Free-threading hardening. 0.4.3 closes a free-threading correctness gap in how Bengal reports build errors. On free-threaded CPython (3.14t) Bengal runs your build across cores — and the session that tracks errors across that build recorded them safely but *read* them without the same protection. This patch makes the reads safe too. No new features, no breaking changes.

## What's fixed

### Build error reporting is race-free under free-threading

- **Error summaries no longer crash or miscount on free-threaded Python.** The build-error session indexed errors under a lock when recording them, but its readers — the end-of-build summary, the investigation hints, and the systemic-issue / most-common-error views — walked those shared indexes without one. On free-threaded CPython (`python3.14t`), a reader iterating an index while another thread recorded an error could raise `RuntimeError: dictionary changed size during iteration` or report wrong counts. Every reader now takes the session's re-entrant lock, and the per-file / per-code lookups return copies, so concurrent builds produce correct, stable error summaries (`#439`).

## Changes at a glance

**Fixed**

- Race-free error tracking: build error summaries and investigation hints no longer crash or report wrong counts during parallel builds on free-threaded Python (`#439`).

## Upgrading

```bash
pip install --upgrade bengal-ssg
```

0.4.3 is a drop-in patch: no breaking changes and no config migration. The fix only affects builds running on free-threaded CPython (`python3.14t`); on the standard GIL build the behavior is unchanged.
