Punycode (RFC3492) in OCaml

Documentation and code quality improvements across libraries

- Add README files for jsonwt, owntracks, monopam, and srcsetter
- Fix langdetect language count (47→49) in dune-project
- Remove unused variable in crockford encode function
- Improve retention type documentation in zulip channels.mli
- Refactor conpool is_healthy to reduce nesting and improve clarity
- Document unimplemented IDNA features in punycode README

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+10
+10
README.md
··· 90 90 odig doc puny 91 91 ``` 92 92 93 + ## Limitations 94 + 95 + The following IDNA 2008 features are not yet implemented: 96 + 97 + - **Bidi rules** (RFC 5893): Bidirectional text validation for right-to-left scripts 98 + - **Contextual joiners** (RFC 5892 Appendix A.1): Zero-width joiner/non-joiner validation 99 + 100 + These checks are disabled by default in the API. Most common use cases (European languages, CJK) work correctly without them. 101 + 93 102 ## References 94 103 95 104 - [RFC 3492](https://datatracker.ietf.org/doc/html/rfc3492) - Punycode: A Bootstring encoding of Unicode for IDNA 96 105 - [RFC 5891](https://datatracker.ietf.org/doc/html/rfc5891) - Internationalized Domain Names in Applications (IDNA): Protocol 97 106 - [RFC 5892](https://datatracker.ietf.org/doc/html/rfc5892) - Unicode Code Points and IDNA 107 + - [RFC 5893](https://datatracker.ietf.org/doc/html/rfc5893) - Right-to-Left Scripts for IDNA 98 108 - [RFC 1035](https://datatracker.ietf.org/doc/html/rfc1035) - Domain Names Implementation and Specification 99 109 100 110 ## License