{"slug": "the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it", "title": "The EU AI Act's chatbot rule started five days ago. My own plugin was breaking it.", "summary": "A WordPress chatbot plugin developer shipped a fix five days after the EU AI Act's Article 50 transparency rule took effect on 2 August 2026, updating the default welcome message to inform users they are interacting with an AI. The developer highlights that the obligation is a design duty on providers, applies at the first interaction, and includes accessibility requirements, noting their disclosure achieved a 6.92:1 contrast ratio against the 4.5:1 requirement.", "body_md": "I sell a WordPress chatbot plugin. Its default welcome message was:\n\nHello! How can I help you today?\n\nOn 2 August 2026, Article 50 of the EU AI Act — Regulation (EU) 2024/1689 —\n\nstarted applying. It requires that a person interacting with an AI system be\n\ninformed that they are, **before or at the very beginning of the interaction**.\n\n\"Hello! How can I help you today?\" informs nobody of anything. I shipped the fix\n\nfive days late, which is five days better than I would have managed if I had not\n\nbeen reading the regulation for a different reason.\n\nHere is what the rule actually says, the exemption everyone is about to reach\n\nfor, and the part of it that nobody mentions.\n\nThe text is short. Providers of AI systems intended to interact directly with\n\nnatural persons must design and develop them so that those persons are informed\n\nthey are interacting with an AI system — unless that is obvious to a reasonably\n\nwell-informed, observant and circumspect person.\n\nTwo things in that sentence are easy to skim past.\n\n**It is a design obligation, not a disclosure form.** The duty is to build the\n\nsystem so the person is informed. That is a different instruction from \"put a\n\nnotice somewhere\". For anyone shipping software that other people deploy, it\n\npoints at the default rather than the settings screen.\n\n**It falls on the provider.** Who counts as the provider of the AI system in a\n\nchain that runs from a model vendor through a plugin to a site owner is a real\n\nquestion with a real answer, and I am not qualified to give it for your case.\n\nWhat I can say is the engineering consequence, which does not depend on the\n\nanswer: if the obligation lands anywhere in that chain, the cheapest place to\n\nsatisfy it is the default that ships.\n\nArticle 50(5) adds that the information must be provided in a clear and\n\ndistinguishable manner **at the latest at the time of the first interaction**.\n\nNot in the terms of service. Not two turns in.\n\nPenalties for the transparency obligations reach **€15 million or 3% of total\nworldwide annual turnover**, whichever is higher.\n\n\"Unless this is obvious\" is doing a lot of work, and it is where most people\n\nwill stop reading.\n\nThe test is not whether *you* think it is obvious. It is whether it is obvious\n\nto a reasonably well-informed, observant and circumspect person — a standard\n\nthat assumes ordinary attention, not expertise. A widget labelled \"AI Assistant\"\n\nin a header probably clears it. A round purple bubble in the corner of a shop,\n\nwhich greets you by name and answers in fluent prose, probably does not: half\n\nthe point of building it well was that it does not feel like a robot.\n\nI kept the exemption available in the plugin, because it is real and it is the\n\nsite owner's judgement to make. But I made the settings screen say what it costs\n\nto be wrong, and I did not present it as an ordinary preference sitting next to\n\nthe colour picker.\n\nArticle 50(5) also says the information shall conform to **the applicable\naccessibility requirements**.\n\nSo the notice telling someone they are talking to an AI has itself to be\n\nperceivable by that someone. A grey-on-grey line at 3:1 contrast, or a visual\n\nbadge with no accessible name, technically discloses and practically does not.\n\nI make an accessibility scanner as well, which is the only reason I noticed. I\n\nmeasured the contrast of my own disclosure rather than eyeballing it: **6.92:1**\n\nagainst the panel, where the requirement is 4.5:1. That took two minutes and it\n\nis the kind of thing that is embarrassing to skip in exactly this context.\n\nThe disclosure itself is four lines of markup. The decisions around it were the\n\nwork, and three of them are the sort of thing you only find by getting them\n\nwrong first.\n\n**It renders outside the message log.** My first instinct was to make it the\n\nfirst chat bubble. Two reasons that is wrong. The message area carries\n\n`role=\"log\"`\n\nwith `aria-live`\n\n, so anything inside it is announced as\n\nconversation — the disclosure would arrive as though the bot had said it, which\n\nis precisely the framing that makes it not a disclosure. And the log scrolls, so\n\nafter four exchanges the notice is gone. It now sits between the header and the\n\nlog: outside the live region, outside the scroll.\n\n**The launcher carries it too.** A screen reader user meets the button before\n\nanything else, and `aria-label=\"Open chat\"`\n\ntells them nothing about what they\n\nare about to open. It now reads \"Open chat with the AI assistant\". If the\n\ndisclosure is switched off, so is that wording — the two should never disagree.\n\n**It is on by default for sites that merely update.** This is the one I nearly\n\nshipped broken. Updating a WordPress plugin does not fire the activation hook,\n\nso the routine that seeds default options never runs for an existing install.\n\nA new option would have been absent, read as falsy, and the disclosure would have\n\nbeen silently off for every existing customer — the exact population most likely\n\nto have the plugin already running on a live EU storefront. Both accessors now\n\ndefault to showing it, and an empty custom text falls back rather than rendering\n\nnothing. I verified it by deleting both options and reloading the front end.\n\n**The switch is a <select>, not a checkbox.** An unchecked checkbox is absent\n\n`register_setting`\n\nnever sees the key, so the storedFour things worth checking this week, none of which require you to trust my\n\nreading of the regulation.\n\n**Open your own chat widget as a visitor.** Read the first thing it says. If it\n\ndoes not tell you it is an AI, nothing else in your setup does either.\n\n**Check the button that opens it**, not just the panel. That is where a screen\n\nreader user makes the decision.\n\n**Check whether the notice survives the conversation.** If it scrolls away with\n\nthe first few messages, it satisfies \"at the beginning\" and nothing more — which\n\nmay be enough, but decide that deliberately.\n\n**Check its contrast.** 50(5) is explicit about accessibility, and this is the\n\none part of the obligation with a number attached to it.\n\nWhether the obligation reaches you at all. That depends on where you operate, who\n\nyour visitors are, and where you sit in the chain between a model and a\n\nconversation. I am a developer who read the regulation because it broke my own\n\nproduct; I am not a lawyer, and this is not legal advice.\n\nWhat I am reasonably confident about is narrower: a default greeting that says\n\n\"Hello! How can I help you today?\" does not inform anyone that they are talking\n\nto a machine, and no reading of Article 50 makes that sentence sufficient.\n\nMine said it for two days after the rule applied. Yours might still.\n\nThis was written by the person who builds the plugin it discusses. That is\n\nstated plainly rather than buried, so you can weigh it.\n\n[AI Customer Support Chatbot & Lead Automator](https://wpbay.com/product/ai-support-chatbot/)\n\n*Originally published on groundedwp.com.*", "url": "https://wpnews.pro/news/the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it", "canonical_source": "https://dev.to/grounded/the-eu-ai-acts-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it-32b0", "published_at": "2026-08-14 13:00:00+00:00", "updated_at": "2026-08-14 13:05:29.348625+00:00", "lang": "en", "topics": ["ai-policy", "ai-products", "developer-tools"], "entities": ["EU AI Act", "WordPress"], "alternates": {"html": "https://wpnews.pro/news/the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it", "markdown": "https://wpnews.pro/news/the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it.md", "text": "https://wpnews.pro/news/the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it.txt", "jsonld": "https://wpnews.pro/news/the-eu-ai-act-s-chatbot-rule-started-five-days-ago-my-own-plugin-was-breaking-it.jsonld"}}