---
id: f67e6008-5161-4880-b3e7-b685736a69c1
title: build panics on multibyte release summary
state: closed
labels:
- kind:build
assignees: []
milestone: null
created: 2026-10-27T18:08:32.854172841Z
updated: 2026-10-27T18:20:51.769025776Z
---
## What

The release feed truncates a summary by character count, then explicitly truncates the same string by **byte** count:

`src/feed.rs:92-94`:

```rust
let mut s: String = first_line.chars().take(200).collect();
if s.len() > 200 {
    s.truncate(200);
}
```

For multibyte characters `s.len()` can exceed 200 even when there are only 200 chars, and `truncate(200)` may land inside a UTF-8 code point.

## Reproduced

Release body first line = `"€"` repeated 200 times (3 bytes each). `hu13 build` exits 101:

```
thread 'main' panicked at src/feed.rs:94:23:
assertion failed: self.is_char_boundary(new_len)
```

## Impact

Any release note with enough multibyte text crashes the whole build (denial of build / release).

## Fix

Remove the redundant byte truncate (the value is already at most 200 chars), or truncate only at a char boundary. Add a regression test with 200 `€` / emoji.
