{"id":383162,"date":"2026-10-25T20:48:21","date_gmt":"2026-10-25T20:48:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kaderlab-ai-transparency-kit\/"},"modified":"2026-10-28T15:53:38","modified_gmt":"2026-10-28T15:53:38","slug":"kaderlab-ai-transparency-kit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kaderlab-ai-transparency-kit\/","author":23566324,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.2","stable_tag":"0.2.2","tested":"7.1.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Kaderlab AI Transparency Kit","header_author":"Kaderlab","header_description":"Renders AI Act art. 50 disclosures on a WordPress site. Information and structure only \u2014 whether a site meets the article is for a qualified professional to say.","assets_banners_color":"","last_updated":"2026-10-28 15:53:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/kaderlab.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":121,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.1":{"tag":"0.2.1","author":"kaderlab","date":"2026-10-25 20:48:09","revision":3765218},"0.2.2":{"tag":"0.2.2","author":"kaderlab","date":"2026-10-28 15:53:38","revision":3771012}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3765218,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3765218,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"kaderlab\/ai-disclosure":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kaderlab\/ai-disclosure","version":"0.2.2","title":"AI disclosure","category":"text","icon":"info-outline","description":"Shows one AI Act art. 50 disclosure. The wording is read from the plugin on every visit, so a correction reaches pages that are already published.","keywords":["ai","disclosure","transparency"],"textdomain":"kaderlab-ai-transparency-kit","attributes":{"kind":{"type":"string"},"locale":{"type":"string"}},"supports":{"html":false,"customClassName":false,"reusable":true},"editorScript":"file:.\/editor.js"}},"tagged_versions":["0.2.1","0.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,271023,23968,1334,25098],"plugin_category":[],"plugin_contributors":[288529],"plugin_business_model":[],"class_list":["post-383162","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-ai-act","plugin_tags-disclosure","plugin_tags-notice","plugin_tags-transparency","plugin_contributors-kaderlab","plugin_committers-kaderlab"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kaderlab-ai-transparency-kit\/assets\/icon-128x128.png?rev=3765218","icon_2x":"https:\/\/ps.w.org\/kaderlab-ai-transparency-kit\/assets\/icon-256x256.png?rev=3765218","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Article 50 of Regulation (EU) 2024\/1689 \u2014 the AI Act \u2014 says a person must be told when they are\ninteracting with an AI system, and when what they are looking at was generated or manipulated by\none. This plugin renders those notices.<\/p>\n\n<p>It renders <strong>one disclosure per piece of content<\/strong>, chosen on the page that carries it, because a\ndisclosure is a statement about that content and not about the site. There is no site-wide default:\nwhich duty a page owes is a judgement about your own system, and this plugin does not make it for\nyou.<\/p>\n\n<p><strong>What it does not do.<\/strong> It does not tell you, or a reader, that your site meets article 50. Whether\nit does is for a qualified professional to say. This plugin gives you information and structure; it\ngives you no verdict, and it is not legal advice.<\/p>\n\n<h4>How you place a disclosure<\/h4>\n\n<ul>\n<li><strong>A block.<\/strong> \"AI disclosure\", in the block inserter. Choose the disclosure and the language in the\nblock sidebar.<\/li>\n<li><strong>A shortcode.<\/strong> <code>[kaderlab_ai_disclosure kind=\"ai-interaction\" locale=\"en\"]<\/code>, anywhere a shortcode\nruns.<\/li>\n<\/ul>\n\n<p>Both read the wording from the plugin <strong>on every visit<\/strong>. Nothing is copied into your post, so a\ncorrected wording reaches pages that are already published \u2014 which is the whole reason the block\nstores your two choices and none of the words.<\/p>\n\n<h4>The disclosures<\/h4>\n\n<p>One per duty the article names: an AI system a visitor is interacting with (art. 50(1)), generated\nor edited image, audio or video (50(2)), a deep fake (50(4)), AI-generated text published as news\n(50(4)), an emotion-recognition system (50(3)) and biometric categorisation (50(3)). Each ships in\nEnglish and Dutch.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin stores nothing about a visitor, sets no cookie and makes no network call. A disclosure is\nread from a file inside the plugin and rendered on your server.<\/p>\n\n<h4>Who makes it<\/h4>\n\n<p>Kaderlab is a trade name of AVS Digital, a one-person Dutch business (KvK 67123783). The software is\nwritten by one person working with AI automation. The disclosure wording is not written here at all:\nit is the text of Article 50 itself \u2014 see the FAQ.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>This plugin ships one compiled JavaScript file, <code>blocks\/ai-disclosure\/editor.js<\/code>, which registers\nthe block in the editor. Its human-readable TypeScript source ships inside this plugin too:<\/p>\n\n<ul>\n<li>Source of <code>blocks\/ai-disclosure\/editor.js<\/code>: <code>src\/block\/editor.ts<\/code><\/li>\n<li>Build, from the plugin directory: <code>tsc --target ES2020 --lib ES2020,DOM --module none --strict --removeComments --newLine lf --outDir blocks\/ai-disclosure src\/block\/editor.ts<\/code><\/li>\n<\/ul>\n\n<p>The build is plain <code>tsc<\/code> with <code>module: \"none\"<\/code> \u2014 no bundler and no minifier \u2014 and the plugin's\ntest suite runs exactly that command on the shipped source and compares the result byte for byte\nwith the file shipped here.<\/p>\n\n<p>The disclosure wording is not compiled from anything: it is <code>copy\/disclosures.json<\/code>, read as it is.<\/p>\n\n<h3>Licence<\/h3>\n\n<p>GPLv2 or later. The canonical text is at https:\/\/www.gnu.org\/licenses\/gpl-2.0.html, and no copy of\nit ships inside this plugin: a licence transcribed rather than fetched is a licence that might not\nbe the one it names.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Add the \"AI disclosure\" block to a page, or place the shortcode in a template.<\/li>\n<li>Choose which disclosure the content owes, and the language of the page it sits on.<\/li>\n<\/ol>\n\n<p>There is nothing to configure site-wide, and the settings screen deliberately has no settings: it\nreports the state of the disclosure wording and nothing else.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20does%20the%20wording%20come%20from%3F\"><h3>Where does the wording come from?<\/h3><\/dt>\n<dd><p>From the Regulation. Each disclosure is the operative wording of the paragraph of Article 50 that it\nserves, taken from the official language version for its own locale \u2014 the English text from the\nEnglish version, the Dutch from the Dutch \u2014 with the form of address and the sentence structure\nadjusted so that it reads as a statement to your visitor rather than as a duty on you. Every one of\nthose adjustments is recorded next to the text in the plugin's own catalogue file as an edit, and the\nplugin's own test suite re-applies every one of them to the official quote and fails unless the\nresult is the shipped wording exactly. At run time the rule works the other way round: a disclosure\nwhose wording is not adopted from the Regulation renders nothing at all.<\/p><\/dd>\n<dt id=\"i%20placed%20a%20disclosure%20and%20nothing%20appears.%20why%3F\"><h3>I placed a disclosure and nothing appears. Why?<\/h3><\/dt>\n<dd><p>Either the block is not configured, or its wording is not adopted from the Regulation. Neither the\nblock nor the shortcode has a default disclosure or a default language, so an unconfigured one renders\nnothing and says so in the editor. Separately, the plugin renders <strong>nothing<\/strong> for any wording that is\nnot the Regulation's own until a qualified professional has reviewed it: an unreviewed legal sentence\non your site in your name is worse than no sentence. The settings screen lists every disclosure and\nsays which languages it is shown in, so you can see the answer without a reader telling you.<\/p><\/dd>\n<dt id=\"which%20disclosure%20does%20my%20page%20need%3F\"><h3>Which disclosure does my page need?<\/h3><\/dt>\n<dd><p>That is a question about your own system and your own use of it, and this plugin will not answer it.\nNeither the block nor the shortcode has a default disclosure: an unconfigured block renders nothing\nand says so in the editor.<\/p><\/dd>\n<dt id=\"does%20it%20check%20whether%20my%20site%20meets%20the%20ai%20act%3F\"><h3>Does it check whether my site meets the AI Act?<\/h3><\/dt>\n<dd><p>No. It renders a notice; it does not inspect your site and it reaches no conclusion about it. Ask a\nqualified professional.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20wording%3F\"><h3>Can I change the wording?<\/h3><\/dt>\n<dd><p>Not from the plugin, and that is the point of it. Both halves of this product read one catalogue file,\nso the words on your page are the Regulation's own and not a paraphrase \u2014 two transcriptions of one\nlegal text become two different claims, and only one of them can be the right one. If your notice\nneeds different words, that is a conversation to have with a qualified professional.<\/p><\/dd>\n<dt id=\"is%20my%20visitors%27%20data%20collected%3F\"><h3>Is my visitors' data collected?<\/h3><\/dt>\n<dd><p>No. No cookie, no request to any server, nothing stored.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>The TypeScript source of the block editor script now ships inside the plugin, with the one\ncommand that rebuilds the compiled file from it.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>The block editor reported the review state per disclosure rather than for the whole catalogue. A\ndisclosure that is shown on the site no longer carries a warning in the editor saying it is not,\nand a disclosure that is not shown is still named as such.<\/li>\n<li>The label and the sentence of a disclosure are separated without a stylesheet, so they read\ncorrectly on a theme that has no rules of its own for them.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>The disclosure wording is adopted from the official text of the AI Act rather than drafted, so the\nreview state is stated per disclosure instead of for the whole catalogue. A disclosure whose\nwording is taken over from the Regulation renders; one still in this plugin's own words does not,\nand the settings screen says which is which.<\/li>\n<li>Built and tested, never released: the two defects above were found before it was sent, so 0.2.1 is\nthe first version the plugin directory is offered after 0.1.0.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: the AI disclosure block, the shortcode, six disclosures in English and Dutch, and a\nsettings screen that reports the review state of the wording.<\/li>\n<\/ul>","raw_excerpt":"Shows an AI Act art. 50 disclosure on a page, a post or a block. It states a fact about the content beside it; it judges nothing.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383162"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kaderlab"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383162"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383162"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383162"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383162"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383162"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}