ABC-003: UTF8_LEN[byte>>4] byte-length table is shifted (multibyte over-counts)

abc/UTF8.h line 47's static u8 UTF8_LEN[16] — the byte-length lookup indexed by lead >> 4, used by utf8sDrain1utf8 and by every bro renderer (bro/BRO.c has five n[ch>>4] call sites for row width / wrap) — is off by one slot, so every multibyte lead byte reports the WRONG length. A 3-byte UTF-8 char (em-dash = e2 80 94, lead >>4 = 0xE) returns 4 not 3, so a renderer walking bytes over-consumes the following byte. In bro_row_end_pass that byte is the line's \n: the row never breaks there, so the multibyte-ending line and the NEXT line render as ONE row, and the next line ALSO gets its own index row — a duplicated line in colour mode. This is the root cause of BRO-004's CLI repro (be --color diff:ABC.md | cat duplicated 4 lines that each ended a paragraph with ). abc/core change — maintainer-reviewed. See Issues, CLAUDE, BRO-004.

Issues

The table is shifted; every multibyte lead byte mis-counts.

Blockers

abc/core so maintainer-reviewed. Existing abc/test/UTF8.c (ln) passes today — it does not exercise UTF8_LEN directly, so it never caught this.

Planned

One correct table + a direct test.

Outcome