Add sanitize_plaintext(text: str) -> str to utils/text.py for preparing XMPP plain-text message bodies from untrusted Pronote/AI content. - Strips HTML tags via BeautifulSoup (html.parser) - Strips C0, DEL, and C1 control characters (preserves \t, \n, \r) - Preserves Unicode including emojis (📌📅📚💬📢) - Idempotent: f(f(x)) == f(x) - Addresses SEC-XMPP-06: XMPP injection hardening 37 unit tests covering HTML, entities, control chars, emojis, idempotence. Co-authored-by: opencode/test-engineer <test-engineer@agents.invalid> Co-authored-by: opencode/coder <coder@agents.invalid>
2.4 KiB
2.4 KiB