vttest's Shift In/Shift Out test (menu 3 → "Test Shift In/Shift Out") draws two three-row charset blocks. The G0 block renders fully; of the G1 block — designated Latin-1 via the 96-character-set form ESC - A — only the third row (`…~) appears. Rows 8 and 9 (!"#…? and @A…_) never make it to the screen, though they are present in the stream:
ESC - A ESC[8;10H !"#$%&'()*+,-./0123456789:;<=>? ESC[9;10H@AB…^_ ESC[10;10H`ab…~ DEL
Actual screen: rows 8–9 blank, row 10 correct.
Mechanism not yet pinned — the designator that precedes the loss is the 96-set form (ESC - Ps for G1, vs ESC ) Ps for 94-sets), which suggests the parser mishandles that intermediate and eats or misroutes what follows. Adjacent to but distinct from #131: no single/locking shifts are involved, just SI/SO with a 96-set G1.
Found by replaying a captured vttest corpus; deterministic at the buffer level.
🤖 Generated with Claude Code
vttest's Shift In/Shift Out test (menu 3 → "Test Shift In/Shift Out") draws two three-row charset blocks. The G0 block renders fully; of the G1 block — designated Latin-1 via the 96-character-set form
ESC - A— only the third row (`…~) appears. Rows 8 and 9 (!"#…?and@A…_) never make it to the screen, though they are present in the stream:Actual screen: rows 8–9 blank, row 10 correct.
Mechanism not yet pinned — the designator that precedes the loss is the 96-set form (
ESC - Psfor G1, vsESC ) Psfor 94-sets), which suggests the parser mishandles that intermediate and eats or misroutes what follows. Adjacent to but distinct from #131: no single/locking shifts are involved, just SI/SO with a 96-set G1.Found by replaying a captured vttest corpus; deterministic at the buffer level.
🤖 Generated with Claude Code