== Runtime required-capability detection == PASS mbstring is tracked as a required capability PASS curl is tracked as a required capability PASS all required capabilities present in this environment PASS preflight detects missing mbstring (required-not-ok) PASS preflight detects missing curl (required-not-ok) PASS preflight passes when all required present == Text sanitisation (iconv available) == PASS iconv is available in this environment PASS sanitised text is valid UTF-8 (iconv path) PASS sanitised text keeps café PASS sanitised text drops control chars == Text sanitisation (iconv unavailable — guarded fallback) == PASS scrub without iconv does not fatal and returns a string PASS scrub without iconv yields valid UTF-8 PASS full sanitise via fallback keeps café PASS full sanitise via fallback drops control chars == mbstring-safe wrappers == PASS has_mbstring true here PASS strlen counts codepoints (café = 4) PASS substr is codepoint-aware PASS truncate adds an ellipsis by width == Renderer mbstring/iconv guarding == PASS renderer no longer calls mb_strlen/mb_substr directly PASS fit_text uses calee_calendar_strlen/substr PASS ascii works with iconv (transliterates) PASS ascii works without iconv (no fatal, pure ASCII) PASS ascii without iconv strips non-ASCII PASS degraded renderer yields a 1200x630 PNG for a multibyte name PASS no unguarded mbstring/iconv calls in runtime code All dependency self-tests passed.