{"id":363884,"date":"2026-09-06T18:55:48","date_gmt":"2026-09-06T18:55:48","guid":{"rendered":"https:\/\/fr.wordpress.org\/plugins\/ai-helm\/"},"modified":"2026-09-06T18:55:30","modified_gmt":"2026-09-06T18:55:30","slug":"tlloancy-source-stamp","status":"publish","type":"plugin","link":"https:\/\/nb.wordpress.org\/plugins\/tlloancy-source-stamp\/","author":22011295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.7","requires_php":"8.1","requires_plugins":null,"header_name":"Tlloancy Source Stamp","header_author":"tlloancy","header_description":"Records WordPress 7.0 AI Client generations in a self-hosted journal and stamps the matching post. Technical tool, not legal advice.","assets_banners_color":"0c4952","last_updated":"2026-09-06 18:55:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/tlloancy-source-stamp\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tlloancy","date":"2026-09-06 18:55:30","revision":3683847}},"upgrade_notice":{"1.0.0":"<p>First public version. Requires WordPress 7.0 for automatic stamps.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3683847,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3683847,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3683847,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3683847,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,254919,8534,7108,279453],"plugin_category":[],"plugin_contributors":[232640],"plugin_business_model":[],"class_list":["post-363884","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-article-50","plugin_tags-audit-log","plugin_tags-journal","plugin_tags-wordpress-ai-client","plugin_contributors-tlloancy","plugin_committers-tlloancy"],"banners":{"banner":"https:\/\/ps.w.org\/tlloancy-source-stamp\/assets\/banner-772x250.png?rev=3683847","banner_2x":"https:\/\/ps.w.org\/tlloancy-source-stamp\/assets\/banner-1544x500.png?rev=3683847","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tlloancy-source-stamp\/assets\/icon-128x128.png?rev=3683847","icon_2x":"https:\/\/ps.w.org\/tlloancy-source-stamp\/assets\/icon-256x256.png?rev=3683847","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Tlloancy Source Stamp listens to the official WordPress AI Client (<code>wp_ai_client_prompt()<\/code> \/ <code>wp_ai_client_after_generate_result<\/code>). When a generation finishes through that API, the plugin writes a row in a table on <strong>your<\/strong> database. If a post is saved in the same request, or if exactly one generation is waiting for you, the post is stamped (origin, model, time).<\/p>\n\n<p>The journal stores metadata only: caller plugin, model, provider, context, token counts when available. Prompt and completion text are never stored.<\/p>\n\n<p>An optional visitor-facing note can appear on posts the plugin stamped as generated or assisted. Unstamped posts stay silent.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Listens to <code>wp_ai_client_after_generate_result<\/code> (WordPress 7.0+)<\/li>\n<li>Writes a self-hosted journal<\/li>\n<li>Never stores prompt or completion text<\/li>\n<li>Stamps a post saved in the same request, or from a single waiting generation (15 minutes)<\/li>\n<li>Optional visitor-facing note <strong>only<\/strong> on stamped posts<\/li>\n<li>CSV export of the journal<\/li>\n<li>Daily prune of rows older than 365 days (filter <code>ai_helm_retention_days<\/code>)<\/li>\n<\/ul>\n\n<h4>What it does not do<\/h4>\n\n<ul>\n<li>Site-wide chatbot banners or AI-tool scanners<\/li>\n<li>Image IPTC \/ C2PA embedding<\/li>\n<li>Compliance scores, Article 4 checklists, or legal templates<\/li>\n<li>RAG, budget caps, or model routing<\/li>\n<\/ul>\n\n<h4>Honesty about the law<\/h4>\n\n<p>Installing this plugin does not make a site compliant with Regulation (EU) 2024\/1689. Whether Article 50 applies to a given page is a legal assessment for the site operator. This is a technical record of AI Client use.<\/p>\n\n<h4>Requirements<\/h4>\n\n<p>Automatic stamps need <strong>WordPress 7.0<\/strong> (or later) so <code>wp_ai_client_prompt()<\/code> exists. On older versions the journal stays empty; you can still set origin by hand in the editor.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tlloancy-source-stamp<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Tlloancy Source Stamp.<\/li>\n<li>Open <strong>Source Stamp<\/strong> in the admin menu. Confirm that the WordPress AI Client is detected.<\/li>\n<li>Generate content with any plugin that uses <code>wp_ai_client_prompt()<\/code>, then check the journal.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20make%20my%20site%20legally%20compliant%3F\"><h3>Does this make my site legally compliant?<\/h3><\/dt>\n<dd><p>No. It records AI Client use. Legal assessment stays with the site operator.<\/p><\/dd>\n<dt id=\"why%20was%20my%20post%20not%20stamped%3F\"><h3>Why was my post not stamped?<\/h3><\/dt>\n<dd><p>The plugin queues runs per user for 15 minutes and auto-stamps only if exactly one run is waiting. Two queued generations: no automatic stamp (wrong metadata is worse than a gap). Cron and logged-out calls are same-request only. <strong>Source Stamp \u2192 Test<\/strong> calls the AI Client directly: Generate, then Create draft in a second request. The editor box remains the manual fallback.<\/p><\/dd>\n<dt id=\"do%20you%20send%20data%20off%20the%20site%3F\"><h3>Do you send data off the site?<\/h3><\/dt>\n<dd><p>No. The journal lives in your database. There is no account and no phone-home.<\/p><\/dd>\n<dt id=\"do%20you%20store%20what%20the%20model%20wrote%3F\"><h3>Do you store what the model wrote?<\/h3><\/dt>\n<dd><p>No. Only metadata (time, caller, model, tokens, post ID).<\/p><\/dd>\n<dt id=\"is%20this%20legal%20advice%3F\"><h3>Is this legal advice?<\/h3><\/dt>\n<dd><p>No.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: AI Client listener, same-request post stamp, local journal, CSV export, label on stamped posts only.<\/li>\n<\/ul>","raw_excerpt":"Records WordPress 7.0 AI Client generations in a local journal and stamps the matching post. Technical tool, not legal advice.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363884"}],"author":[{"embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tlloancy"}],"wp:attachment":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363884"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363884"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363884"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363884"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363884"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}