You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Глубокий adversarial-проход по алгоритму IR-кодирования (compressor greedy/optimal, decoder, encoder, base64, round-trip) нашёл 4 подтверждённых недочёта. Три критичные подсистемы (LZ77-компрессор, DP-парсер, decoder-рефакторинг) прошли ревью без замечаний.
- tuya-encoder.ts: фильтр `t < MAX_SIGNAL_VALUE` → `t <= MAX_SIGNAL_VALUE`.
Тайминг ровно 65535 (max uint16 LE) — валидное значение, но
силентно отбрасывался. Golden-тесты по-прежнему совпадают —
фикстура не содержит таких значений.
- smartir.ts (processCommands): non-string листья (число, boolean, null)
и массивы больше не проходят молчаливым passthrough. Раньше вход
`{"commands":{"heat":{"17":42}}}` давал внешне валидный JSON с
`{"17":42}` — MOES UFO-R11 такой payload не принял бы, но
пользователь узнавал об этом только на устройстве. Теперь бросается
IRCodeError с указанием ключа и типа.
- golden.test.ts: тест "should decode correct number of timings"
раньше сверял константы фикстуры сами с собой (BroadlinkDecoder не
вызывался). Теперь реально декодирует testInput и сравнивает
с фикстурой — off-by-one в parseTimings был бы пойман.
- +5 новых тестов: boundary encoder (65535 сохраняется, >65535
отсеивается), 4 случая с non-string/массивом в SmartIR commands.
Всего: 36 → 42 tests, все зелёные.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
0 commit comments