- i1–i5/j1–j3: классический hex конвертируется в теги <b 0x…>;
userspace WireGuard extended/lx молча игнорирует голый hex,
handshake не завершался (#39#41#42)
- j1/j2/j3/itime эмитятся только для extended ≤2.6.0: в 2.6.1+
поля удалены из схемы, sing-box падает на unknown fields
- j1–j3 больше не ломаются uci_bin_to_hex
- h1–h4: диапазоны «min-max» на обеих ветках
- MTProto: секрет канонизируется в ee-hex из любой формы
(hex/base64), валидатор даёт понятную ошибку вместо
FATAL decode psk (#23)
- XHTTP v2: парсинг и экспорт ключей подписок
- валидатор: warp/masque/openvpn/snell/mieru/sudoku — только extended
- тесты: stat→ucode (busybox), раннеры исключены из E2E,
новые server_mtproto.sh и awg_variant_schema.sh
fix(updates): component_action_worker wrote UPDATES_JOB_LOG to job_id.out.log but component_action_log reads from job_id.log — the two paths never matched so the modal log was always empty. Now derives the log path from the output path by stripping the .out suffix.
Issue #14: move average_latency() before export_metrics() in watchdog.uc
- average_latency was declared AFTER export_metrics (line 1213 vs 1178)
- in ucode timer/closure contexts the forward reference was not reliably
resolved, causing 'left-hand side is not a function' every 2 min
- fix: move average_latency to before export_metrics so it is always
defined before it is referenced
Issue #15: add close_timeout to MTProxy inbound in singbox/servers.uc
- MTProto clients maintain persistent connections that never close naturally
- without close_timeout, sing-box waits indefinitely for them during SIGHUP
hot-reload and exits with FATAL: 'sing-box did not close!'
- fix: add close_timeout=10s (configurable via mtproto_close_timeout UCI)
so sing-box forcefully closes stale MTProto connections after 10 s and
completes the hot-reload cleanly