Skip to content

Phase C input decoder M6: Cutover (replace tb2_poll_event with custom decoder) #814

Description

@jsavin

Summary

Phase C input decoder, milestone M6. Part of the Option C redesign per planning/phase_c/INPUT_DECODER_PLAN.md.

The milestone that actually closes #805 in production. Wires input_decoder_poll into backend_tb2.c, removes translate_key/translate_mod/translate_mouse. Net negative LOC. PR body MUST include PTY-replay green output as merge gate.

Context

PR #808 attempted to fix issue #805 with termbox2's existing input path and introduced regressions in real Terminal.app (SGR byte leakage, Option-arrows still broken, copy/paste hijacked). Architectural review (system-architect, 2026-06-29) recommended replacing termbox2's input path with a custom decoder while keeping its rendering path.

Full plan: planning/phase_c/INPUT_DECODER_PLAN.md (committed at 1babc25).

Spec

See INPUT_DECODER_PLAN.md section 7, milestone M6 for deliverables, done criteria, LOC estimate, and dependencies.

Dependencies

Depends on M2 + M3 + M4 (Kitty M5 optional — can land before or after M6).

Merge gate

PR body MUST include PTY-replay test run output showing all tests green. Any /gate failure blocks merge — no exceptions. If M6 regresses any input behavior, revert immediately and add a failing PTY-replay test before re-attempting (the PR #808 lesson).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions