# Prompt log — 24h 2026-08-02 ======================================================================== ## [1] summariseModule:ai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Dezső Biczó (mxr576), Rodel Duterte (rduterte)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

AI (Artificial Intelligence)

then use

,

,

    /
  • , and as needed. Output only the HTML fragment with no surrounding , , or
    tags. After the project summary prose, add a single subsection titled "

    How can I help on this project?

    " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI Automator Token Replacement with removing unresolved Tokens (Checkbox?)](https://git.drupalcode.org/project/ai/-/work_items/3586535) State: opened | Updated: 2026-08-03 | Author: ro-no-lo | Assigned: Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, Needs review, Quick Win Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1884 [Issue #3586535: AI Automators strip unresolved tokens from prompts](https://git.drupalcode.org/project/ai/-/merge_requests/1884) | State: opened | Author: Rodel Duterte (rduterte), 86 diff lines Description: When we use the Advanced mode with Tokens in the AI Automator settings, Tokens which are not resolved by the Token system stay in the AI Prompt. This is not much text for AI, but everything what can be avoided to send to AI, should be removed. As an example. I have an Entity where I defined a textarea called field_user_prompt which can optionally (!) be used to alter the prompt I setup in the field AI automation. So there is a Token like this: [node:field_user_prompt:value]. This stays when the user left the field empty. It's only replaced when something is filled in. I do think that unresol… ### [UX review of AI Guardrails](https://git.drupalcode.org/project/ai/-/work_items/3586633) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: category::plan, priority::normal, state::accepted Description: ## Improve the UX of Guardrails. Guardrails is a built-in AI Core feature that allows administrators to set up security measures like input length limits, moderation checks, and topic restrictions. More detail about Guardrails is here: https://project.pages.drupalcode.org/ai/1.5.x/developers/guardrails/ Guardrails is part of AI-core but has not had its UX reviewed. We want to improve it in various ways: - Improve visibility of which are deterministic and non deterministic - Show which guardrails are part of sets and show the other parts of the set - Provide verification information when… ### [UX review of MCP Clients flow](https://git.drupalcode.org/project/ai/-/work_items/3586634) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: category::plan, priority::normal, state::accepted Description: ## Description We need to ensure the flow for MCP clients is as good as it can be so it needs a UX review ## Tasks Aidan and Emma to review existing flow: https://drupal.slack.com/files/U0432HJUYCU/F0BLX5U4YTB/mcp_client.mp4 noting questions/friction points to be addressed * [ ] ## Acceptance criteria * ## Testing instructions *(added by implementor before review)* 1. ## Related issues *(optional)* ### [Adopt Symfony AI Platform 0.8-0.12 changes](https://git.drupalcode.org/project/ai/-/work_items/3586632) State: opened | Updated: 2026-08-02 | Author: Dezső Biczó (mxr576) | Assigned: Wolfgang Ziegler (fago) | Labels: category::feature, priority::normal, state::needsReview Description: ### 1. `CatalogBasedModelRouter::resolve()` returns the wrong type **File:** `src/Plugin/ai/ModelRouter/CatalogBasedModelRouter.php` `ModelRouterInterface::resolve()` now returns `ModelRouter\RoutingDecision` instead of `ProviderInterface`. The plugin wraps Symfony's `CatalogBasedModelRouter` whose `resolve()` already returns a `RoutingDecision`, but the Drupal class re-declares `: SymfonyProviderInterface` as its return type. This is a **fatal `TypeError` at runtime** on every routing call. ### 2. `ProviderInterface::supports()` and `::invoke()` parameter type mismatch **Files:** - `src/Plu… ### [Add interactive refinement capability to Field Widget Actions](https://git.drupalcode.org/project/ai/-/work_items/3586468) State: opened | Updated: 2026-08-02 | Author: Edward Zwart (ezeedub) | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: ## Summary Add support for interactive refinement in ai_automators Field Widget Action plugins, allowing users to iteratively improve AI-generated content through conversational prompts before accepting it into a field. This is the companion issue to https://www.drupal.org/project/field_widget_actions/issues/3547306, which adds the modal infrastructure. This issue covers wiring up the automator plugins to use it. ## Problem Field Widg… --- MERGE REQUESTS (24h) --- ### [feat: Upgrade to Symfony AI Platfrom 0.12](https://git.drupalcode.org/project/ai/-/merge_requests/1902) State: opened | Author: Dezső Biczó (mxr576) | Branch: 3586632-symfony-ai-012-compat | 347 diff lines Description: ## Description Closes #3586632 ## Checklist - [ ] I have linked the related issue in the MR title or description - [x] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR contains no breaking API or hook changes, or they are explicitly docume… ### [fix: #3586470 Make API explorer work with Symfony platform and legacy providers](https://git.drupalcode.org/project/ai/-/merge_requests/1903) State: merged 2026-08-02 | Author: Dezső Biczó (mxr576) | Branch: 3586470-make-api-explorer-wo-2.x | 92 diff lines Description: Cherry-picks !1619 to 2.x (at least remnant parts of it) that should have been cherry-picked before !1619 got cherry-picked in !1900. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuild… --- COMMITS (24h) --- (none) ======================================================================== ## [2] summariseModule:ai_initiative:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal AI Initiative (machine name: ai_initiative) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

    Drupal AI Initiative

    then use

    ,

    ,

      /
    • , and as needed. Output only the HTML fragment with no surrounding , , or
      tags. After the project summary prose, add a single subsection titled "

      How can I help on this project?

      " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [[Meta] ai_disclosure: EU AI Act Article 50 transparency module](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::plan, code, priority::normal, state::accepted Description: ## Problem / Motivation Article 50 of the EU AI Act (Regulation (EU) 2024/1689) applies since **2 August 2026**, with fines up to EUR 15M / 3% of worldwide turnover. For site operators ("deployers") the core duty is Art. 50(4): visibly disclose AI-generated or AI-manipulated text published to inform the public on matters of public interest, and deep-fake media — **unless** the content underwent substantive human review or editorial control and a person holds editorial responsibility (spell-check does not qualify, per the Commission Q&A). The Commission has published guidelines (2026-07-20), a… ### [ai_image_alt_text companion: suggest ai_metadata via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586655) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **ai_image_alt_text** project (standalone contrib); tracked here in the AI Initiative queue. ## Proposed resolution When ai_image_alt_text generates alt text for a media entity, report it (behind `moduleExists('ai_disclosure')` + config toggle): * `DisclosureRecorder::suggest($media, 'ai_metadata', 'ai_image_alt_text', $note)` — alt text is metadata about the image; the image itself is not AI-generated, so `ai_metadata` (no EU icon, no Art. 50(4) trigger) is the right default grade. * Batch/auto… ### [ai_disclosure: DisclosureRecorder public API, suggestion storage and Accept/Dismiss flow](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586648) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. This is the **public integration surface** — the dependency direction is inverted: AI tools call ai_disclosure; this module has no knowledge of specific tools. ## Proposed resolution **`DisclosureRecorder` service (`ai_disclosure.recorder`)**, documented in `ai_disclosure.api.php`: ```php interface DisclosureRecorderInterface { /** * Non-binding suggestion, surfaced to editors as an Accept/Dismiss callout. * Requires a saved entity. Upserts per (entity, langcode, source). * Unknown $grade_id: logs a warning and returns si… ### [ai_translate companion: apply ai_translated grade via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586654) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_translate` submodule); tracked here in the AI Initiative queue. ## Proposed resolution When ai_translate creates or overwrites a translation via AI, record it (behind `moduleExists('ai_disclosure')` + config toggle): * `DisclosureRecorder::apply($translation, 'ai_translated', 'ai_translate', $note, save: FALSE)` on the **target translation** within the translation save pipeline — disclosure values are per-translation, so the source language's grade is untouched. * Note… ### [ai_ckeditor companion: suggest ai_partly_assisted via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586653) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_ckeditor` submodule); tracked here in the AI Initiative queue. ## Proposed resolution When an editor uses the CKEditor AI assistant on an entity form and the result is part of the submission, report it to ai_disclosure (behind `moduleExists('ai_disclosure')` + config toggle): * The CKEditor plugin marks the form (hidden input set by JS when AI-generated/AI-modified content is inserted into the editor). * On entity save with the marker present → `DisclosureRecorder::sug… ### [ai_automators companion: report AI field writes to the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586652) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_automators` submodule); tracked here in the AI Initiative queue, to be moved/mirrored to the ai queue as maintainers prefer. ## Proposed resolution When AI Automators write field values on an entity, report the involvement to `ai_disclosure` (behind `moduleExists('ai_disclosure')` and a config toggle in automator settings, default on): * Form-triggered/interactive runs → `DisclosureRecorder::suggest()` — the editor sees an Accept/Dismiss callout on the entity form. * C… ### [ai_disclosure: Documentation - module docs and recorder API integrator guide](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, documentation, priority::normal Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Documentation for 1.0.0-alpha1, published via GitLab Pages using the drupal.org gitlab_templates pages job (mkdocs): * **Site builder guide**: enabling per bundle, grades, profiles, bundle defaults, the inherit-stores-nothing model, formatter placement, site policy (required-only vs always disclose), compliance report. * **Regulatory primer**: what Article 50(4) requires, the human review / editorial control exemption (with the Commission's definitions), the EU icons and their usage rules, dates (applicable 202… ### [ai_disclosure: Multilingual and revision hardening with test coverage](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586650) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Multilingual + revision hardening, closing the gaps not covered by earlier issues' tests: * Per-translation disclosure semantics verified end-to-end: a Spanish translation graded `ai_translated` while the English original is `ai_partly_assisted`; suggestions per langcode; formatter + JSON-LD render the viewed translation's disclosure. * Config translation flows for grade `disclosure_sentence`/labels and profile `description` (config_translation UI + rendered output in each language). * Revisions: field data rev… ### [ai_disclosure: Field type, DisclosureResolver service and inherit storage model](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586644) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. This is the core issue; most other work depends on it. ## Proposed resolution **Field type `ai_disclosure`** (cardinality 1, translatable, revisionable), item properties: * `mode`: `inherit` (default — equivalent to empty item, **stores no row**) | `none` (suppress disclosure) | `profile` | `custom` * `profile` (profile id, for mode=profile), `grade` (grade id, for mode=custom), `human_review` (bool), `editorial_responsibility` (string), `description` (long text, markdown; local override usable in profile and custom modes) Instance … ### [ai_disclosure: Compliance report at /admin/reports/ai-disclosure](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586649) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Compliance report at `/admin/reports/ai-disclosure` (permission `access ai disclosure report`), Views-based over default revisions — the audit trail you show a regulator: * Columns: label/link, entity type + bundle, langcode, effective grade, source mode (inherited/profile/custom/none), label required (computed), human review, pending suggestions, changed date. Computed columns are lightweight Views field plugins calling `DisclosureResolver` (admin-only + paged, acceptable performance). * Filters: entity type/b… ### [ai_disclosure: Machine-readable marking - JSON-LD and meta output with IPTC digitalSourceType](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586647) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Machine-readable marking on canonical pages of entities with a resolved disclosure, complementing the visible label (aligned with Art. 50(2) and the Code of Practice): * JSON-LD `script type="application/ld+json"`: `@type` mapped from entity (Article default; ImageObject/VideoObject for media), including the grade's IPTC `digitalSourceType` URI and a plain-language disclosure string. * `meta name="ai-disclosure" content="; required=; icon="` as a cheap stable secondary signal. * Toggles for both in settings (de… ### [ai_disclosure: Formatter theming - EU icons, disclosure template, policy settings](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586646) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Reader-facing disclosure rendering (validated by design mockup on a live Olivero site): * Formatter `ai_disclosure_default` rendering `ai-disclosure.html.twig`: official EU icon `img` (shipped SVG, translatable alt text per grade), grade `disclosure_sentence` headline, secondary line referencing Article 50(4) when the label is required, `details` element "How was AI used?" containing the markdown description rendered via CommonMark (escape mode + filtered render pipeline), optional trailing link to the site's e… ### [ai_disclosure: Widget UX - sidebar group, mode states, computed status line, mdxeditor](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586645) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Full editorial UX for the `ai_disclosure` widget (validated by design mockup on a live Claro site): * Renders as a `details` group in the entity form sidebar (`#group` = advanced region; graceful inline fallback for forms without the sidebar). * Top-to-bottom: suggestion callout when pending suggestions exist (built in the recorder API issue) → **Disclosure select**: `Inherit default ()` / `None — fully human` / one option per profile / `Custom…` → custom-mode elements (grade select, "Substantive human review w… ### [ai_disclosure: Disclosure profile config entity and admin UI](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586643) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Add the `ai_disclosure_profile` config entity — the reusable "one written version" of a disclosure. When all content of a bundle goes through the same AI pipeline, one profile describes it once; content references it (or inherits it as bundle default) without duplicating text in the database, and editing the profile updates every inheriting item. Properties: `id`, `label` (admin-facing, e.g. "Auto-tagged wildlife news"), `grade` (grade machine name), `human_review` (bool — substantive review with editorial cont… ### [ai_disclosure: Grade config entity with shipped defaults and admin UI](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586642) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Add the `ai_disclosure_grade` config entity: the fine-grained vocabulary of AI involvement. Admin UI like image styles (collection, add/edit/delete forms) under the module settings. Properties: `id`, `label`, `description`, `severity` (int, ordering + never-downgrade comparisons), `eu_icon` (`none|ai|ai_generated|ai_modified`), `label_required` (bool — does Art. 50(4) trigger for this grade absent human review), `disclosure_sentence` (translatable reader-facing headline), `iptc_digital_source_type` (URI, optiona… ### [ai_disclosure: Scaffold module - info, permissions, settings shell, EU icon assets](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586641) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640 for full architecture and regulatory context. ## Proposed resolution Scaffold the `ai_disclosure` module: * `ai_disclosure.info.yml` (core 10.4/11 compatible), `composer.json` requiring `league/commonmark` (markdown rendering for disclosure texts, configured with `html_input: escape`, `allow_unsafe_links: false`). * Permissions: `administer ai disclosure`, `access ai disclosure report`. * Settings form shell at `/admin/config/content/ai-disclosure`: site policy (`required_only` | `always`), editorial AI statement URL, JSON-LD/meta tog… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [3] summariseModule:canvas:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal Canvas (machine name: canvas) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm) [1], Lionel Enkaoua (heyyo), Rajab Natshah (RajabNatshah), Tekla Aivazashvili (aivazashvilit)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

      Drupal Canvas

      then use

      ,

      ,

        /
      • , and as needed. Output only the HTML fragment with no surrounding , , or
        tags. After the project summary prose, add a single subsection titled "

        How can I help on this project?

        " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools](https://git.drupalcode.org/project/canvas/-/work_items/3591882) State: opened | Updated: 2026-08-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1445 [Issue #3591882: Add an Agents & Tools settings form.](https://git.drupalcode.org/project/canvas/-/merge_requests/1445) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 557 diff lines Description: ## Summary Add an **Agents & Tools** tab to the Canvas AI settings area where an admin picks the **main agent** (single select) and the **Tools** offered in the chat (checkboxes), and expose the selected Tools to the frontend as `drupalSettings.canvas.ai.tools`. The form, its route and its config all live in `canvas_dev_ai`. Nothing in `canvas_ai` changes. ## Why In the revamped flow, agent selection is config-driven and explicit — the user picks the agent for the turn from a dropdown instead of an orchestrator inferring it (roadmap item 2: https://git.drupalcode.org/project/canvas/-/work_… ### [Canvas AI: Add Tools dropdown to chat UI](https://git.drupalcode.org/project/canvas/-/work_items/3591856) State: opened | Updated: 2026-08-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: David Bravo (davidbp) | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Description: ## Background — how Canvas AI works today The Canvas AI chat is an **orchestrator system**. Every message goes first to a single orchestrator agent. The orchestrator reads the message, infers the intent, and launches the matching sub-agent: - "Build me a landing page" → orchestrator → page-builder sub-agent - "Create a React component" → orchestrator → component sub-agent - "Write a title / meta description" → orchestrator → the relevant sub-agent The routing is implicit — the user never chooses which sub-agent runs; the orchestrator decides on every turn. Roadmap: https://git.drupalcode.o… ### [Incorrect folder assignment for newly created code components](https://git.drupalcode.org/project/canvas/-/work_items/3591828) State: closed | Updated: 2026-08-03 | Author: Vipin Mittal (vipin.mittal18) | Assigned: unassigned | Labels: state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1374 [#3591828 Refetch folder list after newly exposing a code component](https://git.drupalcode.org/project/canvas/-/merge_requests/1374) | State: merged 2026-08-03 | Author: Ben Mullins (bnjmnm), 66 diff lines Description: **Problem** When creating a new Code Component and selecting a destination folder, the component is not saved in the selected folder. Instead, it is placed in a different folder within the Canvas Library. This prevents users from organizing code components correctly and leads to inconsistent folder categorization. **Acceptance Criteria** - A newly created Code Component is saved in the folder selected by the user. - The component is displayed in the selected folder immediately after creation. - No component is placed into an incorrect folder during the creation process. - The selected folde… ### [Canvas editor: 6 axe-core accessibility violations (2 critical) in the editor chrome — topbar menubar, unnamed zoom button, region overlays, badge contrast, viewport, landmarks](https://git.drupalcode.org/project/canvas/-/work_items/3591902) State: opened | Updated: 2026-08-02 | Author: Rajab Natshah (RajabNatshah) | Assigned: unassigned | Labels: Description: ### Problem/Motivation An axe-core accessibility audit of the **Canvas editor** (`/canvas/editor/canvas_page/{id}`) reports **6 violations, 2 of them critical**. They sit in the editor's own chrome — topbar, zoom control, region overlays, status badge — so every site builder using Canvas meets them. For contrast, the same audit over the rendered front end of the same site returned **0 violations**, which isolates these findings to the editor UI. | | | |---|---| | Canvas | **1.8.0** | | Drupal core | 11.4.4 | | axe-core | 4.11.4 | | Rules run | `wcag2a, wcag2aa, wcag21a, wcag21aa, best-pract… --- MERGE REQUESTS (24h) --- ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 42 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [mysql](https://hub.docker.com/_/mysql) ([source](https://github.com/docker-library/mysql)) | service-image | minor | `8.0` → `8.4` | > :exclamation: **Important** > > Release Notes retrieval for this MR were skipped because no github.com credentials were available. > If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes). --- ### Configuration 📅 **Schedule**: (UTC) - Br… ### [fix: #3591876 Fall back to first region when the AI names a region that does not exist](https://git.drupalcode.org/project/canvas/-/merge_requests/1423) State: opened | Author: Rajab Natshah (RajabNatshah) | Branch: 3591876-region-fallback | 453 diff lines Description: Fixes [#3591876](https://git.drupalcode.org/project/canvas/-/work_items/3591876): the Canvas AI page builder throws `Region "%s" not found in layout` and discards the whole AI build when the LLM names a region that does not exist on the entity's layout. This falls back to the first available region instead, and only throws when the layout has no regions at all. AI usage disclosure (per the [Drupal AI policy](https://www.drupal.org/docs/develop/issues/issue-procedures-and-etiquette/policy-on-the-use-of-ai-when-contributing-to-drupal)): AI-Generated: Yes. Drafted with AI (Claude) assistance, re… ### [Draft: fix: #3591840 RTL support for Canvas visual editor (logical CSS properties, Radix DirectionProvider, autocomplete magnifier, and Undo/Redo timelines)](https://git.drupalcode.org/project/canvas/-/merge_requests/1453) State: opened | Author: Lionel Enkaoua (heyyo) | Branch: 3591840-rtl-support-for-canvas-visual-editor-logical-css-properties-radix-directionprovider-autocomplete-magnifier-and-undoredo-timeline | 1199 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591840 --- COMMITS (24h) --- - [ed279f91](https://git.drupalcode.org/project/canvas/-/commit/ed279f91466665954150d906de6f623c004b50cb) fix: #3591828 Incorrect folder assignment for newly created code components — Ben Mullins (2026-08-03T02:42:39.000+00:00) ======================================================================== ## [4] summariseModule:ai_context:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Context Control Center (CCC) (machine name: ai_context) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

        Context Control Center (CCC)

        then use

        ,

        ,

          /
        • , and as needed. Output only the HTML fragment with no surrounding , , or
          tags. After the project summary prose, add a single subsection titled "

          How can I help on this project?

          " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Decouple context item form descriptions from scope plugin descriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586361) State: opened | Updated: 2026-08-03 | Author: Kristen Pol (kepol) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 2026Sprint16, ai::inside, category::task, priority::normal Description: ## Problem/motivation Follow-up: #3586359 Scope plugin `getDescription()` text is currently reused in multiple UI contexts: 1. The scope overview page. 2. Individual scope settings pages. 3. Context item scope controls. These contexts can require different guidance. For example, the Global scope’s warning that saving a context item clears other scope settings is useful on the context item form but confusing on the scope overview and settings pages. The existing `getSubscriptionDescription()` method already provides context-specific text for agent subscription forms, but there is no equiv… ### [Improve conditional subcontext disabled-state behavior and admin UX](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) State: opened | Updated: 2026-08-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Description: ## Description Follow-up to: #3586207+s ### Summary When **Enable conditional subcontext AI decisions** (`conditional_subcontext_enabled`) is off, conditional subcontext children should not participate in normal context selection. This issue implements that behavior and adds admin UX so editors understand why conditional items are inactive, can reach the setting to re-enable the feature, and get clear warnings when editing affected items. ### Problem / motivation Previously, disabling conditional subcontext AI caused **all conditional children to be included without an AI call**. That wa… ### [Prepare demo content and demo context items for the CCC to show how it works](https://git.drupalcode.org/project/ai_context/-/work_items/3586339) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: Emma Horrell (emma-horrell) | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Problem/motivation _**Note that if we at least get the code with one draft example merged in for beta4 that we can add the additional sample context in rc1 since it would be "documentation" in a sense.**_ Follow-up to: - #3586335 - #3586279 A new Context Control Center (CCC) installation is empty. People unfamiliar with CCC terminology and structure cannot easily see how source content, context items, scopes and consumer subscriptions work together. Provide realistic, optional demo data that lets people explore a complete CCC workflow before configuring it for their own organisation. … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [5] summariseModule:ai_translate:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: szato (odi)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

          AI translate

          then use

          ,

          ,

            /
          • , and as needed. Output only the HTML fragment with no surrounding , , or
            tags. After the project summary prose, add a single subsection titled "

            How can I help on this project?

            " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix: #3585532 Translation language (und) when translating media entities.](https://git.drupalcode.org/project/ai_translate/-/merge_requests/30) State: opened | Author: szato (odi) | Branch: 3585532-invalidargumentexception-invalid-translation-language-und-when-translating-media-entities | 46 diff lines Description: Closes #3585532 --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:orchestration:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Orchestration (machine name: orchestration) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

            Orchestration

            then use

            ,

            ,

              /
            • , and as needed. Output only the HTML fragment with no surrounding , , or
              tags. After the project summary prose, add a single subsection titled "

              How can I help on this project?

              " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [[orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services](https://git.drupalcode.org/project/orchestration/-/work_items/3575105) State: opened | Updated: 2026-08-02 | Author: Shibin Das (D34dMan) | Assigned: Shibin Das (D34dMan) | Labels: category::feature, state::accepted, v1.0.x-dev Description: ## Problem / Motivation The `orchestration_eca` submodule currently bridges ECA and the Orchestration module in one direction only: it exposes ECA models _as_ Orchestration services, so external callers can invoke ECA workflows via the Orchestration HTTP API. The reverse direction is missing. There is no ECA Action plugin that allows an ECA model to `_invoke_` a registered Orchestration service. This means ECA cannot use its rich event and condition system to trigger any of the services registered by other `ServicesProviderInterface` implementations. Current: External → Orchestration → E… ### [Using JSON Schema to define "input", "output" and "config"](https://git.drupalcode.org/project/orchestration/-/work_items/3554622) State: opened | Updated: 2026-08-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::plan, code Description: >>> [!note] Migrated issue Reported by: [d34dman](https://www.drupal.org/user/751698) >>> Problem/Motivation JSON Schema gives you a portable contract for each “thing” (task/node) and lets you auto-validate, auto-document, and even auto-generate forms. For an orchestration layer, a clean split into input, output, and config per node is intuitive and scales. Why JSON-Schema fits? - Contracts at the edges: Each node publishes exactly what it consumes (input) and emits (output), so composition is safe. - Runtime safety: Validate at design-time (when building a workflow) and at run… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [7] generateTldr:developer ======================================================================== You are an editor distilling a Drupal AI project newsletter into its most important highlights. You are writing for a technical developer audience. Be specific — name modules, merged features, and critical bugs. Read all the module summaries below. Separate the highlights into two categories: - SHIPPED: things that were merged, fixed, released, or completed during this period. - ONGOING: things that are actively in progress, under review, or blocked. Be specific — name the module, what happened, and why it matters. Do not use emoticons or mdashes. Do not include any text outside the two sections. When you mention a specific issue or merge request, add an inline citation using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations immediately after the relevant phrase, before any punctuation. Format as two HTML sections. Use exactly this structure (all
            • elements must be inside the
                , never outside it):

                Shipped

                1. Title here — One sentence explanation [1].
                2. Another title — One sentence explanation.

                Ongoing

                1. Title here — One sentence explanation [2].
                Up to 5 items per section. Do not output any text, tags, or characters outside these two sections. Output only the HTML fragment, no surrounding tags. --- REFERENCE LIST --- [1] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [2] UX review of AI Guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586633 [3] UX review of MCP Clients flow (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586634 [4] Adopt Symfony AI Platform 0.8-0.12 changes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586632 [5] Add interactive refinement capability to Field Widget Actions (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586468 [6] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [7] feat: Upgrade to Symfony AI Platfrom 0.12 (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1902 [8] fix: #3586470 Make API explorer work with Symfony platform and legacy providers (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1903 [9] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [10] ai_image_alt_text companion: suggest ai_metadata via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586655 [11] ai_disclosure: DisclosureRecorder public API, suggestion storage and Accept/Dismiss flow (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586648 [12] ai_translate companion: apply ai_translated grade via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586654 [13] ai_ckeditor companion: suggest ai_partly_assisted via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586653 [14] ai_automators companion: report AI field writes to the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586652 [15] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [16] ai_disclosure: Multilingual and revision hardening with test coverage (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586650 [17] ai_disclosure: Field type, DisclosureResolver service and inherit storage model (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586644 [18] ai_disclosure: Compliance report at /admin/reports/ai-disclosure (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586649 [19] ai_disclosure: Machine-readable marking - JSON-LD and meta output with IPTC digitalSourceType (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586647 [20] ai_disclosure: Formatter theming - EU icons, disclosure template, policy settings (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586646 [21] ai_disclosure: Widget UX - sidebar group, mode states, computed status line, mdxeditor (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586645 [22] ai_disclosure: Disclosure profile config entity and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586643 [23] ai_disclosure: Grade config entity with shipped defaults and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586642 [24] ai_disclosure: Scaffold module - info, permissions, settings shell, EU icon assets (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586641 [25] Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591882 [26] Canvas AI: Add Tools dropdown to chat UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591856 [27] Incorrect folder assignment for newly created code components (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591828 [28] Canvas editor: 6 axe-core accessibility violations (2 critical) in the editor chrome — topbar menubar, unnamed zoom button, region overlays, badge contrast, viewport, landmarks (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591902 [29] Issue #3591882: Add an Agents & Tools settings form. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1445 [30] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [31] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [32] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [33] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [34] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [35] #3591828 Refetch folder list after newly exposing a code component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1374 [36] fix: #3591876 Fall back to first region when the AI names a region that does not exist (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1423 [37] Draft: fix: #3591840 RTL support for Canvas visual editor (logical CSS properties, Radix DirectionProvider, autocomplete magnifier, and Undo/Redo timelines) (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1453 [38] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [39] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [40] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [41] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [42] [orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3575105 [43] Using JSON Schema to define "input", "output" and "config" (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3554622 --- MODULE SUMMARIES ---

                AI (Artificial Intelligence)

                A merge request to Adopt Symfony AI Platform 0.8-0.12 changes was opened with 347 lines of changes, addressing critical type mismatches in the model router and provider interfaces. The catalog-based model router's resolve() method was returning the wrong type, causing fatal TypeErrors at runtime. This work upgrades compatibility with the latest Symfony AI Platform releases.

                A fix for the API explorer was merged to the 2.x branch, ensuring it works with both Symfony platform and legacy providers. This cherry-picked changes that should have accompanied an earlier merge.

                New issues opened include AI Automator Token Replacement with removing unresolved Tokens (Checkbox?), which has an open MR to strip unresolved tokens from prompts when fields are left empty. UX review issues were opened for both UX review of AI Guardrails and UX review of MCP Clients flow to improve visibility and user experience. Work continues on Add interactive refinement capability to Field Widget Actions.

                How can I help on this project?

                Review the open merge requests for Symfony AI Platform 0.12 upgrade and token stripping in automators. Help plan improvements by contributing UX feedback to the Guardrails or MCP Clients review issues.

                Contributors: Dezső Biczó (mxr576), Rodel Duterte (rduterte) ---

                Drupal AI Initiative

                Activity over the last 24 hours centered on planning for a new ai_disclosure module to support EU AI Act Article 50 compliance. The regulation, which applies from August 2, 2026, requires deployers to disclose AI-generated or AI-manipulated content published to inform the public, unless the content underwent substantive human review or editorial control.

                A comprehensive meta issue and 14 supporting issues were opened, outlining the full architecture. The planned module introduces a DisclosureRecorder service as the public integration API, allowing AI tools to suggest or apply disclosure grades (e.g. ai_translated, ai_partly_assisted, ai_metadata) to content entities. The design includes a custom field type with an inherit-by-default storage model, reusable disclosure profiles, and shipped grade definitions mapped to IPTC digitalSourceType vocabularies and official EU icons. Companion issues outline integration points for ai_automators, ai_translate, ai_ckeditor, and ai_image_alt_text. Administrative features include a compliance report at /admin/reports/ai-disclosure, JSON-LD machine-readable marking, and a sidebar widget with suggestion Accept/Dismiss flow.

                No code has been merged yet; all issues remain in the planning and specification phase.

                How can I help on this project?

                ---

                Drupal Canvas

                One merge landed in the last 24 hours. The fix for Incorrect folder assignment for newly created code components was merged, addressing a bug where newly created code components were not saved to the user-selected folder. The solution refetches the folder list after exposing a code component, ensuring the component appears in the correct location immediately after creation.

                Two new issues were opened. Canvas editor: 6 axe-core accessibility violations documents critical accessibility problems in the editor chrome, including unnamed zoom buttons, insufficient contrast in badges, and missing ARIA labels in the topbar menubar. Meanwhile, work continues on the Canvas AI architecture revamp: Canvas AI: Add an Agents & Tools settings form has an open MR that adds a configuration UI for selecting the main agent and available chat tools, and Canvas AI: Add Tools dropdown to chat UI tracks the corresponding frontend work.

                Several dependency update MRs remain open, and a draft MR addressing RTL support for the visual editor was pushed.

                How can I help on this project?

                • Tackle the accessibility violations reported by axe-core in the editor chrome - the issue is unassigned and has no open MR.
                • Review MR !1445, which adds the Agents & Tools settings form for Canvas AI.
                • Review MR !1453, the draft RTL support implementation for the visual editor.

                Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm) [1], Lionel Enkaoua (heyyo), Rajab Natshah (RajabNatshah), Tekla Aivazashvili (aivazashvilit)

                ---

                Context Control Center (CCC)

                Activity this period focused on refining configuration and user experience workflows. Work continued on improving conditional subcontext disabled-state behavior and admin UX, ensuring that when the conditional subcontext AI feature is disabled, child items are properly excluded from context selection rather than being unconditionally included. The goal is to provide clearer admin messaging so editors understand why conditional items are inactive and can easily locate the relevant settings.

                Parallel efforts addressed scope plugin description reuse across different UI contexts. The issue Decouple context item form descriptions from scope plugin descriptions aims to separate guidance text that appears on scope overview pages, individual scope settings, and context item forms, as each context may require different messaging.

                Planning also progressed on preparing demo content and demo context items to help new users understand how source content, context items, scopes, and consumer subscriptions work together in a realistic workflow.

                No merge requests were completed or commits pushed during this period.

                How can I help on this project?

                • Pick up the unassigned issue on conditional subcontext disabled-state behavior and implement the admin UX improvements and exclusion logic.
                • Help define or prototype the decoupled description API for scope plugins to support context-specific guidance text.
                ---

                AI translate

                A merge request addressing translation language handling for media entities was opened during this period. The fix: #3585532 Translation language (und) when translating media entities. MR targets an InvalidArgumentException related to undefined language codes (und) when translating media entities. The merge request contains 46 lines of changes and is awaiting review.

                No merge activity or commits were recorded in the reporting period, leaving this fix as the primary item pending progress.

                How can I help on this project?

                • Review the open media entity translation language fix to help move it toward merge.
                • Test the patch against media entity translation workflows to verify the InvalidArgumentException is resolved.

                Contributors: szato (odi)

                ---

                Orchestration

                Activity remained quiet over the last 24 hours with no commits or merge requests landed. Discussion continued on two open issues focused on architectural improvements.

                Work on the [orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services feature proposal remained in progress. The issue tracks the creation of a bidirectional bridge between ECA and Orchestration: while the orchestration_eca submodule already exposes ECA models as Orchestration services, the reverse—allowing ECA workflows to invoke registered Orchestration services—is not yet possible. This would enable ECA's event and condition system to trigger any service registered via ServicesProviderInterface implementations.

                Separately, the Using JSON Schema to define "input", "output" and "config" planning issue saw updated discussion. The proposal explores adopting JSON Schema to define service contracts, which would enable portable validation, auto-documentation, and potentially auto-generated forms for orchestration nodes.

                How can I help on this project?

                Review the architectural proposal in Using JSON Schema to define "input", "output" and "config" and provide feedback on the contract design approach. Alternatively, pick up work on the [orchestration_eca] Add "Execute Orchestration service" ECA action feature to help complete the bidirectional ECA integration.

                ======================================================================== ## [8] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 1 Judge flags: 1 ======================================================================== ## [9] summariseModule:ai:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Dezső Biczó (mxr576), Rodel Duterte (rduterte)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                AI (Artificial Intelligence)

                then use

                ,

                ,

                  /
                • , and as needed. Output only the HTML fragment with no surrounding , , or
                  tags. After the project summary prose, add a single subsection titled "

                  How can I help on this project?

                  " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI Automator Token Replacement with removing unresolved Tokens (Checkbox?)](https://git.drupalcode.org/project/ai/-/work_items/3586535) State: opened | Updated: 2026-08-03 | Author: ro-no-lo | Assigned: Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, Needs review, Quick Win Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1884 [Issue #3586535: AI Automators strip unresolved tokens from prompts](https://git.drupalcode.org/project/ai/-/merge_requests/1884) | State: opened | Author: Rodel Duterte (rduterte), 86 diff lines Description: When we use the Advanced mode with Tokens in the AI Automator settings, Tokens which are not resolved by the Token system stay in the AI Prompt. This is not much text for AI, but everything what can be avoided to send to AI, should be removed. As an example. I have an Entity where I defined a textarea called field_user_prompt which can optionally (!) be used to alter the prompt I setup in the field AI automation. So there is a Token like this: [node:field_user_prompt:value]. This stays when the user left the field empty. It's only replaced when something is filled in. I do think that unresol… ### [UX review of AI Guardrails](https://git.drupalcode.org/project/ai/-/work_items/3586633) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: category::plan, priority::normal, state::accepted Description: ## Improve the UX of Guardrails. Guardrails is a built-in AI Core feature that allows administrators to set up security measures like input length limits, moderation checks, and topic restrictions. More detail about Guardrails is here: https://project.pages.drupalcode.org/ai/1.5.x/developers/guardrails/ Guardrails is part of AI-core but has not had its UX reviewed. We want to improve it in various ways: - Improve visibility of which are deterministic and non deterministic - Show which guardrails are part of sets and show the other parts of the set - Provide verification information when… ### [UX review of MCP Clients flow](https://git.drupalcode.org/project/ai/-/work_items/3586634) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: category::plan, priority::normal, state::accepted Description: ## Description We need to ensure the flow for MCP clients is as good as it can be so it needs a UX review ## Tasks Aidan and Emma to review existing flow: https://drupal.slack.com/files/U0432HJUYCU/F0BLX5U4YTB/mcp_client.mp4 noting questions/friction points to be addressed * [ ] ## Acceptance criteria * ## Testing instructions *(added by implementor before review)* 1. ## Related issues *(optional)* ### [Adopt Symfony AI Platform 0.8-0.12 changes](https://git.drupalcode.org/project/ai/-/work_items/3586632) State: opened | Updated: 2026-08-02 | Author: Dezső Biczó (mxr576) | Assigned: Wolfgang Ziegler (fago) | Labels: category::feature, priority::normal, state::needsReview Description: ### 1. `CatalogBasedModelRouter::resolve()` returns the wrong type **File:** `src/Plugin/ai/ModelRouter/CatalogBasedModelRouter.php` `ModelRouterInterface::resolve()` now returns `ModelRouter\RoutingDecision` instead of `ProviderInterface`. The plugin wraps Symfony's `CatalogBasedModelRouter` whose `resolve()` already returns a `RoutingDecision`, but the Drupal class re-declares `: SymfonyProviderInterface` as its return type. This is a **fatal `TypeError` at runtime** on every routing call. ### 2. `ProviderInterface::supports()` and `::invoke()` parameter type mismatch **Files:** - `src/Plu… ### [Add interactive refinement capability to Field Widget Actions](https://git.drupalcode.org/project/ai/-/work_items/3586468) State: opened | Updated: 2026-08-02 | Author: Edward Zwart (ezeedub) | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: ## Summary Add support for interactive refinement in ai_automators Field Widget Action plugins, allowing users to iteratively improve AI-generated content through conversational prompts before accepting it into a field. This is the companion issue to https://www.drupal.org/project/field_widget_actions/issues/3547306, which adds the modal infrastructure. This issue covers wiring up the automator plugins to use it. ## Problem Field Widg… --- MERGE REQUESTS (24h) --- ### [feat: Upgrade to Symfony AI Platfrom 0.12](https://git.drupalcode.org/project/ai/-/merge_requests/1902) State: opened | Author: Dezső Biczó (mxr576) | Branch: 3586632-symfony-ai-012-compat | 347 diff lines Description: ## Description Closes #3586632 ## Checklist - [ ] I have linked the related issue in the MR title or description - [x] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR contains no breaking API or hook changes, or they are explicitly docume… ### [fix: #3586470 Make API explorer work with Symfony platform and legacy providers](https://git.drupalcode.org/project/ai/-/merge_requests/1903) State: merged 2026-08-02 | Author: Dezső Biczó (mxr576) | Branch: 3586470-make-api-explorer-wo-2.x | 92 diff lines Description: Cherry-picks !1619 to 2.x (at least remnant parts of it) that should have been cherry-picked before !1619 got cherry-picked in !1900. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuild… --- COMMITS (24h) --- (none) ======================================================================== ## [10] summariseModule:ai_initiative:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal AI Initiative (machine name: ai_initiative) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                  Drupal AI Initiative

                  then use

                  ,

                  ,

                    /
                  • , and as needed. Output only the HTML fragment with no surrounding , , or
                    tags. After the project summary prose, add a single subsection titled "

                    How can I help on this project?

                    " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [[Meta] ai_disclosure: EU AI Act Article 50 transparency module](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::plan, code, priority::normal, state::accepted Description: ## Problem / Motivation Article 50 of the EU AI Act (Regulation (EU) 2024/1689) applies since **2 August 2026**, with fines up to EUR 15M / 3% of worldwide turnover. For site operators ("deployers") the core duty is Art. 50(4): visibly disclose AI-generated or AI-manipulated text published to inform the public on matters of public interest, and deep-fake media — **unless** the content underwent substantive human review or editorial control and a person holds editorial responsibility (spell-check does not qualify, per the Commission Q&A). The Commission has published guidelines (2026-07-20), a… ### [ai_image_alt_text companion: suggest ai_metadata via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586655) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **ai_image_alt_text** project (standalone contrib); tracked here in the AI Initiative queue. ## Proposed resolution When ai_image_alt_text generates alt text for a media entity, report it (behind `moduleExists('ai_disclosure')` + config toggle): * `DisclosureRecorder::suggest($media, 'ai_metadata', 'ai_image_alt_text', $note)` — alt text is metadata about the image; the image itself is not AI-generated, so `ai_metadata` (no EU icon, no Art. 50(4) trigger) is the right default grade. * Batch/auto… ### [ai_disclosure: DisclosureRecorder public API, suggestion storage and Accept/Dismiss flow](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586648) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. This is the **public integration surface** — the dependency direction is inverted: AI tools call ai_disclosure; this module has no knowledge of specific tools. ## Proposed resolution **`DisclosureRecorder` service (`ai_disclosure.recorder`)**, documented in `ai_disclosure.api.php`: ```php interface DisclosureRecorderInterface { /** * Non-binding suggestion, surfaced to editors as an Accept/Dismiss callout. * Requires a saved entity. Upserts per (entity, langcode, source). * Unknown $grade_id: logs a warning and returns si… ### [ai_translate companion: apply ai_translated grade via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586654) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_translate` submodule); tracked here in the AI Initiative queue. ## Proposed resolution When ai_translate creates or overwrites a translation via AI, record it (behind `moduleExists('ai_disclosure')` + config toggle): * `DisclosureRecorder::apply($translation, 'ai_translated', 'ai_translate', $note, save: FALSE)` on the **target translation** within the translation save pipeline — disclosure values are per-translation, so the source language's grade is untouched. * Note… ### [ai_ckeditor companion: suggest ai_partly_assisted via the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586653) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_ckeditor` submodule); tracked here in the AI Initiative queue. ## Proposed resolution When an editor uses the CKEditor AI assistant on an entity form and the result is part of the submission, report it to ai_disclosure (behind `moduleExists('ai_disclosure')` + config toggle): * The CKEditor plugin marks the form (hidden input set by JS when AI-generated/AI-modified content is inserted into the editor). * On entity save with the marker present → `DisclosureRecorder::sug… ### [ai_automators companion: report AI field writes to the ai_disclosure recorder](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586652) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Companion issue to the ai_disclosure plan — see meta issue #3586640. Implementation lands in the **drupal/ai** project (`ai_automators` submodule); tracked here in the AI Initiative queue, to be moved/mirrored to the ai queue as maintainers prefer. ## Proposed resolution When AI Automators write field values on an entity, report the involvement to `ai_disclosure` (behind `moduleExists('ai_disclosure')` and a config toggle in automator settings, default on): * Form-triggered/interactive runs → `DisclosureRecorder::suggest()` — the editor sees an Accept/Dismiss callout on the entity form. * C… ### [ai_disclosure: Documentation - module docs and recorder API integrator guide](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, documentation, priority::normal Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Documentation for 1.0.0-alpha1, published via GitLab Pages using the drupal.org gitlab_templates pages job (mkdocs): * **Site builder guide**: enabling per bundle, grades, profiles, bundle defaults, the inherit-stores-nothing model, formatter placement, site policy (required-only vs always disclose), compliance report. * **Regulatory primer**: what Article 50(4) requires, the human review / editorial control exemption (with the Commission's definitions), the EU icons and their usage rules, dates (applicable 202… ### [ai_disclosure: Multilingual and revision hardening with test coverage](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586650) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Multilingual + revision hardening, closing the gaps not covered by earlier issues' tests: * Per-translation disclosure semantics verified end-to-end: a Spanish translation graded `ai_translated` while the English original is `ai_partly_assisted`; suggestions per langcode; formatter + JSON-LD render the viewed translation's disclosure. * Config translation flows for grade `disclosure_sentence`/labels and profile `description` (config_translation UI + rendered output in each language). * Revisions: field data rev… ### [ai_disclosure: Field type, DisclosureResolver service and inherit storage model](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586644) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. This is the core issue; most other work depends on it. ## Proposed resolution **Field type `ai_disclosure`** (cardinality 1, translatable, revisionable), item properties: * `mode`: `inherit` (default — equivalent to empty item, **stores no row**) | `none` (suppress disclosure) | `profile` | `custom` * `profile` (profile id, for mode=profile), `grade` (grade id, for mode=custom), `human_review` (bool), `editorial_responsibility` (string), `description` (long text, markdown; local override usable in profile and custom modes) Instance … ### [ai_disclosure: Compliance report at /admin/reports/ai-disclosure](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586649) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Compliance report at `/admin/reports/ai-disclosure` (permission `access ai disclosure report`), Views-based over default revisions — the audit trail you show a regulator: * Columns: label/link, entity type + bundle, langcode, effective grade, source mode (inherited/profile/custom/none), label required (computed), human review, pending suggestions, changed date. Computed columns are lightweight Views field plugins calling `DisclosureResolver` (admin-only + paged, acceptable performance). * Filters: entity type/b… ### [ai_disclosure: Machine-readable marking - JSON-LD and meta output with IPTC digitalSourceType](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586647) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Machine-readable marking on canonical pages of entities with a resolved disclosure, complementing the visible label (aligned with Art. 50(2) and the Code of Practice): * JSON-LD `script type="application/ld+json"`: `@type` mapped from entity (Article default; ImageObject/VideoObject for media), including the grade's IPTC `digitalSourceType` URI and a plain-language disclosure string. * `meta name="ai-disclosure" content="; required=; icon="` as a cheap stable secondary signal. * Toggles for both in settings (de… ### [ai_disclosure: Formatter theming - EU icons, disclosure template, policy settings](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586646) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Reader-facing disclosure rendering (validated by design mockup on a live Olivero site): * Formatter `ai_disclosure_default` rendering `ai-disclosure.html.twig`: official EU icon `img` (shipped SVG, translatable alt text per grade), grade `disclosure_sentence` headline, secondary line referencing Article 50(4) when the label is required, `details` element "How was AI used?" containing the markdown description rendered via CommonMark (escape mode + filtered render pipeline), optional trailing link to the site's e… ### [ai_disclosure: Widget UX - sidebar group, mode states, computed status line, mdxeditor](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586645) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Full editorial UX for the `ai_disclosure` widget (validated by design mockup on a live Claro site): * Renders as a `details` group in the entity form sidebar (`#group` = advanced region; graceful inline fallback for forms without the sidebar). * Top-to-bottom: suggestion callout when pending suggestions exist (built in the recorder API issue) → **Disclosure select**: `Inherit default ()` / `None — fully human` / one option per profile / `Custom…` → custom-mode elements (grade select, "Substantive human review w… ### [ai_disclosure: Disclosure profile config entity and admin UI](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586643) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Add the `ai_disclosure_profile` config entity — the reusable "one written version" of a disclosure. When all content of a bundle goes through the same AI pipeline, one profile describes it once; content references it (or inherits it as bundle default) without duplicating text in the database, and editing the profile updates every inheriting item. Properties: `id`, `label` (admin-facing, e.g. "Auto-tagged wildlife news"), `grade` (grade machine name), `human_review` (bool — substantive review with editorial cont… ### [ai_disclosure: Grade config entity with shipped defaults and admin UI](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586642) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640. ## Proposed resolution Add the `ai_disclosure_grade` config entity: the fine-grained vocabulary of AI involvement. Admin UI like image styles (collection, add/edit/delete forms) under the module settings. Properties: `id`, `label`, `description`, `severity` (int, ordering + never-downgrade comparisons), `eu_icon` (`none|ai|ai_generated|ai_modified`), `label_required` (bool — does Art. 50(4) trigger for this grade absent human review), `disclosure_sentence` (translatable reader-facing headline), `iptc_digital_source_type` (URI, optiona… ### [ai_disclosure: Scaffold module - info, permissions, settings shell, EU icon assets](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586641) State: opened | Updated: 2026-08-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::accepted Description: Part of the ai_disclosure plan — see meta issue #3586640 for full architecture and regulatory context. ## Proposed resolution Scaffold the `ai_disclosure` module: * `ai_disclosure.info.yml` (core 10.4/11 compatible), `composer.json` requiring `league/commonmark` (markdown rendering for disclosure texts, configured with `html_input: escape`, `allow_unsafe_links: false`). * Permissions: `administer ai disclosure`, `access ai disclosure report`. * Settings form shell at `/admin/config/content/ai-disclosure`: site policy (`required_only` | `always`), editorial AI statement URL, JSON-LD/meta tog… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [11] summariseModule:canvas:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal Canvas (machine name: canvas) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm) [1], Lionel Enkaoua (heyyo), Rajab Natshah (RajabNatshah), Tekla Aivazashvili (aivazashvilit)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                    Drupal Canvas

                    then use

                    ,

                    ,

                      /
                    • , and as needed. Output only the HTML fragment with no surrounding , , or
                      tags. After the project summary prose, add a single subsection titled "

                      How can I help on this project?

                      " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools](https://git.drupalcode.org/project/canvas/-/work_items/3591882) State: opened | Updated: 2026-08-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1445 [Issue #3591882: Add an Agents & Tools settings form.](https://git.drupalcode.org/project/canvas/-/merge_requests/1445) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 557 diff lines Description: ## Summary Add an **Agents & Tools** tab to the Canvas AI settings area where an admin picks the **main agent** (single select) and the **Tools** offered in the chat (checkboxes), and expose the selected Tools to the frontend as `drupalSettings.canvas.ai.tools`. The form, its route and its config all live in `canvas_dev_ai`. Nothing in `canvas_ai` changes. ## Why In the revamped flow, agent selection is config-driven and explicit — the user picks the agent for the turn from a dropdown instead of an orchestrator inferring it (roadmap item 2: https://git.drupalcode.org/project/canvas/-/work_… ### [Canvas AI: Add Tools dropdown to chat UI](https://git.drupalcode.org/project/canvas/-/work_items/3591856) State: opened | Updated: 2026-08-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: David Bravo (davidbp) | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Description: ## Background — how Canvas AI works today The Canvas AI chat is an **orchestrator system**. Every message goes first to a single orchestrator agent. The orchestrator reads the message, infers the intent, and launches the matching sub-agent: - "Build me a landing page" → orchestrator → page-builder sub-agent - "Create a React component" → orchestrator → component sub-agent - "Write a title / meta description" → orchestrator → the relevant sub-agent The routing is implicit — the user never chooses which sub-agent runs; the orchestrator decides on every turn. Roadmap: https://git.drupalcode.o… ### [Incorrect folder assignment for newly created code components](https://git.drupalcode.org/project/canvas/-/work_items/3591828) State: closed | Updated: 2026-08-03 | Author: Vipin Mittal (vipin.mittal18) | Assigned: unassigned | Labels: state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1374 [#3591828 Refetch folder list after newly exposing a code component](https://git.drupalcode.org/project/canvas/-/merge_requests/1374) | State: merged 2026-08-03 | Author: Ben Mullins (bnjmnm), 66 diff lines Description: **Problem** When creating a new Code Component and selecting a destination folder, the component is not saved in the selected folder. Instead, it is placed in a different folder within the Canvas Library. This prevents users from organizing code components correctly and leads to inconsistent folder categorization. **Acceptance Criteria** - A newly created Code Component is saved in the folder selected by the user. - The component is displayed in the selected folder immediately after creation. - No component is placed into an incorrect folder during the creation process. - The selected folde… ### [Canvas editor: 6 axe-core accessibility violations (2 critical) in the editor chrome — topbar menubar, unnamed zoom button, region overlays, badge contrast, viewport, landmarks](https://git.drupalcode.org/project/canvas/-/work_items/3591902) State: opened | Updated: 2026-08-02 | Author: Rajab Natshah (RajabNatshah) | Assigned: unassigned | Labels: Description: ### Problem/Motivation An axe-core accessibility audit of the **Canvas editor** (`/canvas/editor/canvas_page/{id}`) reports **6 violations, 2 of them critical**. They sit in the editor's own chrome — topbar, zoom control, region overlays, status badge — so every site builder using Canvas meets them. For contrast, the same audit over the rendered front end of the same site returned **0 violations**, which isolates these findings to the editor UI. | | | |---|---| | Canvas | **1.8.0** | | Drupal core | 11.4.4 | | axe-core | 4.11.4 | | Rules run | `wcag2a, wcag2aa, wcag21a, wcag21aa, best-pract… --- MERGE REQUESTS (24h) --- ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 42 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [mysql](https://hub.docker.com/_/mysql) ([source](https://github.com/docker-library/mysql)) | service-image | minor | `8.0` → `8.4` | > :exclamation: **Important** > > Release Notes retrieval for this MR were skipped because no github.com credentials were available. > If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes). --- ### Configuration 📅 **Schedule**: (UTC) - Br… ### [fix: #3591876 Fall back to first region when the AI names a region that does not exist](https://git.drupalcode.org/project/canvas/-/merge_requests/1423) State: opened | Author: Rajab Natshah (RajabNatshah) | Branch: 3591876-region-fallback | 453 diff lines Description: Fixes [#3591876](https://git.drupalcode.org/project/canvas/-/work_items/3591876): the Canvas AI page builder throws `Region "%s" not found in layout` and discards the whole AI build when the LLM names a region that does not exist on the entity's layout. This falls back to the first available region instead, and only throws when the layout has no regions at all. AI usage disclosure (per the [Drupal AI policy](https://www.drupal.org/docs/develop/issues/issue-procedures-and-etiquette/policy-on-the-use-of-ai-when-contributing-to-drupal)): AI-Generated: Yes. Drafted with AI (Claude) assistance, re… ### [Draft: fix: #3591840 RTL support for Canvas visual editor (logical CSS properties, Radix DirectionProvider, autocomplete magnifier, and Undo/Redo timelines)](https://git.drupalcode.org/project/canvas/-/merge_requests/1453) State: opened | Author: Lionel Enkaoua (heyyo) | Branch: 3591840-rtl-support-for-canvas-visual-editor-logical-css-properties-radix-directionprovider-autocomplete-magnifier-and-undoredo-timeline | 1199 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591840 --- COMMITS (24h) --- - [ed279f91](https://git.drupalcode.org/project/canvas/-/commit/ed279f91466665954150d906de6f623c004b50cb) fix: #3591828 Incorrect folder assignment for newly created code components — Ben Mullins (2026-08-03T02:42:39.000+00:00) ======================================================================== ## [12] summariseModule:ai_context:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Context Control Center (CCC) (machine name: ai_context) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                      Context Control Center (CCC)

                      then use

                      ,

                      ,

                        /
                      • , and as needed. Output only the HTML fragment with no surrounding , , or
                        tags. After the project summary prose, add a single subsection titled "

                        How can I help on this project?

                        " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Decouple context item form descriptions from scope plugin descriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586361) State: opened | Updated: 2026-08-03 | Author: Kristen Pol (kepol) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 2026Sprint16, ai::inside, category::task, priority::normal Description: ## Problem/motivation Follow-up: #3586359 Scope plugin `getDescription()` text is currently reused in multiple UI contexts: 1. The scope overview page. 2. Individual scope settings pages. 3. Context item scope controls. These contexts can require different guidance. For example, the Global scope’s warning that saving a context item clears other scope settings is useful on the context item form but confusing on the scope overview and settings pages. The existing `getSubscriptionDescription()` method already provides context-specific text for agent subscription forms, but there is no equiv… ### [Improve conditional subcontext disabled-state behavior and admin UX](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) State: opened | Updated: 2026-08-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Description: ## Description Follow-up to: #3586207+s ### Summary When **Enable conditional subcontext AI decisions** (`conditional_subcontext_enabled`) is off, conditional subcontext children should not participate in normal context selection. This issue implements that behavior and adds admin UX so editors understand why conditional items are inactive, can reach the setting to re-enable the feature, and get clear warnings when editing affected items. ### Problem / motivation Previously, disabling conditional subcontext AI caused **all conditional children to be included without an AI call**. That wa… ### [Prepare demo content and demo context items for the CCC to show how it works](https://git.drupalcode.org/project/ai_context/-/work_items/3586339) State: opened | Updated: 2026-08-02 | Author: Emma Horrell (emma-horrell) | Assigned: Emma Horrell (emma-horrell) | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Problem/motivation _**Note that if we at least get the code with one draft example merged in for beta4 that we can add the additional sample context in rc1 since it would be "documentation" in a sense.**_ Follow-up to: - #3586335 - #3586279 A new Context Control Center (CCC) installation is empty. People unfamiliar with CCC terminology and structure cannot easily see how source content, context items, scopes and consumer subscriptions work together. Provide realistic, optional demo data that lets people explore a complete CCC workflow before configuring it for their own organisation. … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [13] summariseModule:ai_translate:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: szato (odi)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                        AI translate

                        then use

                        ,

                        ,

                          /
                        • , and as needed. Output only the HTML fragment with no surrounding , , or
                          tags. After the project summary prose, add a single subsection titled "

                          How can I help on this project?

                          " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix: #3585532 Translation language (und) when translating media entities.](https://git.drupalcode.org/project/ai_translate/-/merge_requests/30) State: opened | Author: szato (odi) | Branch: 3585532-invalidargumentexception-invalid-translation-language-und-when-translating-media-entities | 46 diff lines Description: Closes #3585532 --- COMMITS (24h) --- (none) ======================================================================== ## [14] summariseModule:orchestration:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Orchestration (machine name: orchestration) Reporting period: last 24h (2026-08-02T08:38:14+00:00 to 2026-08-03T08:38:14+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                          Orchestration

                          then use

                          ,

                          ,

                            /
                          • , and as needed. Output only the HTML fragment with no surrounding , , or
                            tags. After the project summary prose, add a single subsection titled "

                            How can I help on this project?

                            " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [[orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services](https://git.drupalcode.org/project/orchestration/-/work_items/3575105) State: opened | Updated: 2026-08-02 | Author: Shibin Das (D34dMan) | Assigned: Shibin Das (D34dMan) | Labels: category::feature, state::accepted, v1.0.x-dev Description: ## Problem / Motivation The `orchestration_eca` submodule currently bridges ECA and the Orchestration module in one direction only: it exposes ECA models _as_ Orchestration services, so external callers can invoke ECA workflows via the Orchestration HTTP API. The reverse direction is missing. There is no ECA Action plugin that allows an ECA model to `_invoke_` a registered Orchestration service. This means ECA cannot use its rich event and condition system to trigger any of the services registered by other `ServicesProviderInterface` implementations. Current: External → Orchestration → E… ### [Using JSON Schema to define "input", "output" and "config"](https://git.drupalcode.org/project/orchestration/-/work_items/3554622) State: opened | Updated: 2026-08-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::plan, code Description: >>> [!note] Migrated issue Reported by: [d34dman](https://www.drupal.org/user/751698) >>> Problem/Motivation JSON Schema gives you a portable contract for each “thing” (task/node) and lets you auto-validate, auto-document, and even auto-generate forms. For an orchestration layer, a clean split into input, output, and config per node is intuitive and scales. Why JSON-Schema fits? - Contracts at the edges: Each node publishes exactly what it consumes (input) and emits (output), so composition is safe. - Runtime safety: Validate at design-time (when building a workflow) and at run… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [15] generateTldr:executive ======================================================================== You are an editor distilling a Drupal AI project newsletter into its most important highlights. You are writing for a non-technical executive audience. Focus on business impact, strategic progress, and delivery milestones. Avoid all technical jargon. Read all the module summaries below. Separate the highlights into two categories: - SHIPPED: things that were merged, fixed, released, or completed during this period. - ONGOING: things that are actively in progress, under review, or blocked. Be specific — name the module, what happened, and why it matters. Do not use emoticons or mdashes. Do not include any text outside the two sections. When you mention a specific issue or merge request, add an inline citation using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations immediately after the relevant phrase, before any punctuation. Format as two HTML sections. Use exactly this structure (all
                          • elements must be inside the
                              , never outside it):

                              Shipped

                              1. Title here — One sentence explanation [1].
                              2. Another title — One sentence explanation.

                              Ongoing

                              1. Title here — One sentence explanation [2].
                              Up to 5 items per section. Do not output any text, tags, or characters outside these two sections. Output only the HTML fragment, no surrounding tags. --- REFERENCE LIST --- [1] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [2] UX review of AI Guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586633 [3] UX review of MCP Clients flow (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586634 [4] Adopt Symfony AI Platform 0.8-0.12 changes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586632 [5] Add interactive refinement capability to Field Widget Actions (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586468 [6] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [7] feat: Upgrade to Symfony AI Platfrom 0.12 (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1902 [8] fix: #3586470 Make API explorer work with Symfony platform and legacy providers (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1903 [9] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [10] ai_image_alt_text companion: suggest ai_metadata via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586655 [11] ai_disclosure: DisclosureRecorder public API, suggestion storage and Accept/Dismiss flow (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586648 [12] ai_translate companion: apply ai_translated grade via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586654 [13] ai_ckeditor companion: suggest ai_partly_assisted via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586653 [14] ai_automators companion: report AI field writes to the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586652 [15] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [16] ai_disclosure: Multilingual and revision hardening with test coverage (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586650 [17] ai_disclosure: Field type, DisclosureResolver service and inherit storage model (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586644 [18] ai_disclosure: Compliance report at /admin/reports/ai-disclosure (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586649 [19] ai_disclosure: Machine-readable marking - JSON-LD and meta output with IPTC digitalSourceType (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586647 [20] ai_disclosure: Formatter theming - EU icons, disclosure template, policy settings (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586646 [21] ai_disclosure: Widget UX - sidebar group, mode states, computed status line, mdxeditor (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586645 [22] ai_disclosure: Disclosure profile config entity and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586643 [23] ai_disclosure: Grade config entity with shipped defaults and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586642 [24] ai_disclosure: Scaffold module - info, permissions, settings shell, EU icon assets (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586641 [25] Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591882 [26] Canvas AI: Add Tools dropdown to chat UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591856 [27] Incorrect folder assignment for newly created code components (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591828 [28] Canvas editor: 6 axe-core accessibility violations (2 critical) in the editor chrome — topbar menubar, unnamed zoom button, region overlays, badge contrast, viewport, landmarks (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591902 [29] Issue #3591882: Add an Agents & Tools settings form. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1445 [30] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [31] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [32] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [33] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [34] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [35] #3591828 Refetch folder list after newly exposing a code component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1374 [36] fix: #3591876 Fall back to first region when the AI names a region that does not exist (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1423 [37] Draft: fix: #3591840 RTL support for Canvas visual editor (logical CSS properties, Radix DirectionProvider, autocomplete magnifier, and Undo/Redo timelines) (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1453 [38] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [39] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [40] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [41] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [42] [orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3575105 [43] Using JSON Schema to define "input", "output" and "config" (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3554622 --- MODULE SUMMARIES ---

                              AI (Artificial Intelligence)

                              The AI module saw focused activity over the past 24 hours, primarily centered on compatibility updates and user experience planning.

                              A merge request was opened to upgrade the module's compatibility with newer versions of the underlying Symfony AI Platform library (versions 0.8 through 0.12). This work addresses critical compatibility issues that would prevent the system from functioning correctly, including routing and provider interface mismatches. Separately, a fix was merged to ensure the API explorer works correctly with both current and legacy provider implementations.

                              On the feature development side, work continued on allowing administrators to strip unresolved placeholder tokens from AI prompts before submission. This capability helps reduce unnecessary text being sent to AI services, which can impact both cost and response quality. A merge request for this functionality is now under review.

                              Two new user experience initiatives were opened for planning: improving the interface for Guardrails (the security and moderation controls that protect AI interactions) and reviewing the setup flow for MCP clients. Both are in early assessment stages.

                              How can I help on this project?

                              Consider prioritizing resources for the Symfony platform compatibility work, as this affects core functionality. Additionally, the two UX review initiatives (Guardrails and MCP clients) could benefit from dedicated design or product management time to move from planning to implementation.

                              Contributors: Dezső Biczó (mxr576), Rodel Duterte (rduterte)

                              ---

                              Drupal AI Initiative

                              Significant planning activity focused on EU AI Act compliance. A comprehensive transparency module specification was opened, responding to Article 50 requirements that took effect 2 August 2026. The regulation mandates visible disclosure of AI-generated content published to inform the public, with penalties up to EUR 15M or 3% of worldwide turnover for non-compliance.

                              The proposed ai_disclosure module would provide site operators with a structured disclosure system: a graduated scale of AI involvement (from metadata-only assistance to fully AI-generated content), reusable disclosure profiles to avoid duplicating text across content, and configurable defaults per content type. Content editors would see AI assistance suggestions when tools like translation, alt-text generation, or CKEditor assistance are used, with the ability to accept or dismiss them. The module would render EU-mandated icons and disclosure statements where required, include machine-readable metadata for platforms and search engines, and provide administrators with a compliance audit report.

                              Fourteen detailed implementation issues were opened covering the field architecture, editorial interface, display formatting, integration points for existing AI tools, multilingual support, and documentation. No code was merged during this period; work remains in the planning stage.

                              How can I help on this project?

                              • Confirm organisational priority for EU AI Act compliance work and communicate target timeline for alpha release to align contributor effort.
                              • Consider legal review of the disclosure framework design to validate alignment with Article 50 interpretation before implementation begins.
                              ---

                              Drupal Canvas

                              Over the past 24 hours the team fixed a folder organisation bug and continued work on two strategic priorities: evolving the AI chat interface and improving accessibility.

                              A fix for Incorrect folder assignment for newly created code components was merged, ensuring newly created code components are now saved to the folder users select rather than appearing in the wrong location. This directly improves the library organisation experience for site builders.

                              Two related issues advanced the roadmap to simplify how Canvas AI works. Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools now has an open merge request that will allow administrators to explicitly choose which agent and tools are available in the chat interface, moving away from the current automatic orchestrator model. Separately, Canvas AI: Add Tools dropdown to chat UI is progressing the front-end counterpart, giving users a visible dropdown to select tools for each message.

                              A new accessibility audit identified 6 axe-core accessibility violations (2 critical) in the editor chrome, including keyboard navigation and colour contrast issues in the editor toolbar and controls. Remediation work has not yet begun.

                              How can I help on this project?

                              • Assign or fund developer time to address the two critical accessibility violations in the editor; these affect every site builder using Canvas.
                              • Review and approve the AI agent settings and chat UI work to unlock the simplified workflow outlined in the roadmap.

                              Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm) [1], Lionel Enkaoua (heyyo), Rajab Natshah (RajabNatshah), Tekla Aivazashvili (aivazashvilit)

                              ---

                              Context Control Center (CCC)

                              Activity this period focused on planning improvements to the user experience and scope configuration. Work continued on three issues addressing how the module presents guidance to editors and how conditional subcontext settings behave when disabled.

                              Progress was made on Decouple context item form descriptions from scope plugin descriptions, which addresses confusion caused by reusing the same guidance text in different parts of the interface. This will help editors understand scope settings more clearly in each context where they appear.

                              Planning also advanced on Improve conditional subcontext disabled-state behavior and admin UX, which will clarify what happens when the conditional subcontext feature is turned off and ensure editors understand why certain items become inactive.

                              Work continued on Prepare demo content and demo context items for the CCC to show how it works, which will provide realistic sample data to help new users understand how the module's components work together before configuring their own implementation.

                              How can I help on this project?

                              • Confirm resourcing for user experience refinements to support a stable release.
                              • Identify stakeholders who can review and validate the planned demo content to ensure it reflects realistic organisational use cases.
                              ---

                              AI translate

                              A fix addressing translation issues with media entities was submitted during the reporting period. The work targets a problem where media content was being processed with an invalid language code during translation operations, which would prevent these assets from being properly translated. A merge request addressing translation language handling for media entities is now under review.

                              This fix is important for organizations using the module to translate media-rich content, as it extends reliable translation capabilities beyond text to images, documents, and other media assets.

                              How can I help on this project?

                              • Prioritize review and testing resources to evaluate the media translation fix currently awaiting merge.
                              • Consider allocating development capacity to expand test coverage for media translation scenarios to prevent similar issues.
                              Contributors: szato (odi) ---

                              Orchestration

                              Activity this period focused on planning and feature design rather than code delivery. Two issues saw updates that clarify the module's strategic direction.

                              Work continued on adding an ECA action to invoke Orchestration services. This feature will enable workflows built in ECA (a popular rule engine) to call any service registered with the Orchestration module. Currently, the integration works in only one direction: external systems can trigger ECA workflows via Orchestration's HTTP interface. Completing the reverse path will allow organisations to use ECA's event and condition logic to trigger orchestrated services, expanding automation possibilities without custom code.

                              Separately, discussion advanced on using JSON Schema to define service inputs, outputs, and configuration. This architectural decision would establish formal contracts for each service, improving validation, documentation, and the ability to auto-generate user interfaces. The approach supports safer composition of complex workflows and better runtime error handling.

                              No code was merged this period. Both efforts remain in the planning and acceptance phase.

                              How can I help on this project?

                              • Prioritise resourcing to move accepted feature work from planning into implementation, particularly the ECA integration which has clear user demand.
                              • Support architectural decisions around JSON Schema adoption to unblock design work and maintain momentum on the module's roadmap.
                              ======================================================================== ## [16] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 0 Judge flags: 2 ======================================================================== ## [17] generate2026Capabilities ======================================================================== You are an editor writing a strategic section for a non-technical executive audience. The Drupal AI initiative has 8 planned capabilities for 2026. Your task is to read the module activity summaries below and explain how today's progress moves each capability forward — or note where there was no relevant progress today. Be concise and direct. Focus on what matters to a business leader: is progress happening, what is the next milestone, and are there any risks? When you describe progress on a capability, add inline citations using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations at the end of the relevant sentence, before the closing punctuation. Output an HTML fragment using exactly this structure:

                              2026 Capabilities Progress

                              1. Capability name — One or two sentences on how today's activity relates to this goal, or "No direct progress today" if nothing relevant occurred.
                              Use only the 8 capabilities listed below, in the same order. Do not add, remove, or rename them. Do not output any text outside the

                              and
                                tags. --- 2026 CAPABILITIES --- 1. Page generation — Describe what you need and get a usable page, built from your actual design system components 2. Context management — A central place to define brand voice, style guides, audience profiles, and governance rules that AI can use 3. Background agents — AI that works without being prompted, responding to triggers and schedules while respecting editorial workflows 4. Design system integration — AI that builds with your components and can propose new ones when needed 5. Content creation and discovery — Smarter search, AI-powered optimization, and content drafting assistance 6. Advanced governance — Batch approvals, branch-based versioning, and comprehensive audit trails for AI changes 7. Intelligent website improvements — AI that learns from performance data, proposes concrete changes, and gets smarter over time through editorial review 8. Multi-channel campaigns — Create content for websites, social, email, and automation platforms from a single campaign goal --- REFERENCE LIST --- [1] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [2] UX review of AI Guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586633 [3] UX review of MCP Clients flow (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586634 [4] Adopt Symfony AI Platform 0.8-0.12 changes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586632 [5] Add interactive refinement capability to Field Widget Actions (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586468 [6] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [7] feat: Upgrade to Symfony AI Platfrom 0.12 (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1902 [8] fix: #3586470 Make API explorer work with Symfony platform and legacy providers (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1903 [9] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [10] ai_image_alt_text companion: suggest ai_metadata via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586655 [11] ai_disclosure: DisclosureRecorder public API, suggestion storage and Accept/Dismiss flow (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586648 [12] ai_translate companion: apply ai_translated grade via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586654 [13] ai_ckeditor companion: suggest ai_partly_assisted via the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586653 [14] ai_automators companion: report AI field writes to the ai_disclosure recorder (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586652 [15] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [16] ai_disclosure: Multilingual and revision hardening with test coverage (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586650 [17] ai_disclosure: Field type, DisclosureResolver service and inherit storage model (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586644 [18] ai_disclosure: Compliance report at /admin/reports/ai-disclosure (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586649 [19] ai_disclosure: Machine-readable marking - JSON-LD and meta output with IPTC digitalSourceType (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586647 [20] ai_disclosure: Formatter theming - EU icons, disclosure template, policy settings (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586646 [21] ai_disclosure: Widget UX - sidebar group, mode states, computed status line, mdxeditor (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586645 [22] ai_disclosure: Disclosure profile config entity and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586643 [23] ai_disclosure: Grade config entity with shipped defaults and admin UI (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586642 [24] ai_disclosure: Scaffold module - info, permissions, settings shell, EU icon assets (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586641 [25] Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591882 [26] Canvas AI: Add Tools dropdown to chat UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591856 [27] Incorrect folder assignment for newly created code components (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591828 [28] Canvas editor: 6 axe-core accessibility violations (2 critical) in the editor chrome — topbar menubar, unnamed zoom button, region overlays, badge contrast, viewport, landmarks (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591902 [29] Issue #3591882: Add an Agents & Tools settings form. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1445 [30] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [31] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [32] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [33] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [34] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [35] #3591828 Refetch folder list after newly exposing a code component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1374 [36] fix: #3591876 Fall back to first region when the AI names a region that does not exist (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1423 [37] Draft: fix: #3591840 RTL support for Canvas visual editor (logical CSS properties, Radix DirectionProvider, autocomplete magnifier, and Undo/Redo timelines) (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1453 [38] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [39] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [40] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [41] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [42] [orchestration_eca] Add "Execute Orchestration service" ECA action to allow ECA to invoke registered services (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3575105 [43] Using JSON Schema to define "input", "output" and "config" (orchestration, Issue) — https://git.drupalcode.org/project/orchestration/-/work_items/3554622 --- TODAY'S MODULE SUMMARIES ---

                                AI (Artificial Intelligence)

                                The AI module saw focused activity over the past 24 hours, primarily centered on compatibility updates and user experience planning.

                                A merge request was opened to upgrade the module's compatibility with newer versions of the underlying Symfony AI Platform library (versions 0.8 through 0.12). This work addresses critical compatibility issues that would prevent the system from functioning correctly, including routing and provider interface mismatches. Separately, a fix was merged to ensure the API explorer works correctly with both current and legacy provider implementations.

                                On the feature development side, work continued on allowing administrators to strip unresolved placeholder tokens from AI prompts before submission. This capability helps reduce unnecessary text being sent to AI services, which can impact both cost and response quality. A merge request for this functionality is now under review.

                                Two new user experience initiatives were opened for planning: improving the interface for Guardrails (the security and moderation controls that protect AI interactions) and reviewing the setup flow for MCP clients. Both are in early assessment stages.

                                How can I help on this project?

                                Consider prioritizing resources for the Symfony platform compatibility work, as this affects core functionality. Additionally, the two UX review initiatives (Guardrails and MCP clients) could benefit from dedicated design or product management time to move from planning to implementation.

                                Contributors: Dezső Biczó (mxr576), Rodel Duterte (rduterte)

                                ---

                                Drupal AI Initiative

                                Significant planning activity focused on EU AI Act compliance. A comprehensive transparency module specification was opened, responding to Article 50 requirements that took effect 2 August 2026. The regulation mandates visible disclosure of AI-generated content published to inform the public, with penalties up to EUR 15M or 3% of worldwide turnover for non-compliance.

                                The proposed ai_disclosure module would provide site operators with a structured disclosure system: a graduated scale of AI involvement (from metadata-only assistance to fully AI-generated content), reusable disclosure profiles to avoid duplicating text across content, and configurable defaults per content type. Content editors would see AI assistance suggestions when tools like translation, alt-text generation, or CKEditor assistance are used, with the ability to accept or dismiss them. The module would render EU-mandated icons and disclosure statements where required, include machine-readable metadata for platforms and search engines, and provide administrators with a compliance audit report.

                                Fourteen detailed implementation issues were opened covering the field architecture, editorial interface, display formatting, integration points for existing AI tools, multilingual support, and documentation. No code was merged during this period; work remains in the planning stage.

                                How can I help on this project?

                                • Confirm organisational priority for EU AI Act compliance work and communicate target timeline for alpha release to align contributor effort.
                                • Consider legal review of the disclosure framework design to validate alignment with Article 50 interpretation before implementation begins.
                                ---

                                Drupal Canvas

                                Over the past 24 hours the team fixed a folder organisation bug and continued work on two strategic priorities: evolving the AI chat interface and improving accessibility.

                                A fix for Incorrect folder assignment for newly created code components was merged, ensuring newly created code components are now saved to the folder users select rather than appearing in the wrong location. This directly improves the library organisation experience for site builders.

                                Two related issues advanced the roadmap to simplify how Canvas AI works. Canvas AI: Add an Agents & Tools settings form to select the main agent and chat Tools now has an open merge request that will allow administrators to explicitly choose which agent and tools are available in the chat interface, moving away from the current automatic orchestrator model. Separately, Canvas AI: Add Tools dropdown to chat UI is progressing the front-end counterpart, giving users a visible dropdown to select tools for each message.

                                A new accessibility audit identified 6 axe-core accessibility violations (2 critical) in the editor chrome, including keyboard navigation and colour contrast issues in the editor toolbar and controls. Remediation work has not yet begun.

                                How can I help on this project?

                                • Assign or fund developer time to address the two critical accessibility violations in the editor; these affect every site builder using Canvas.
                                • Review and approve the AI agent settings and chat UI work to unlock the simplified workflow outlined in the roadmap.

                                Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm) [1], Lionel Enkaoua (heyyo), Rajab Natshah (RajabNatshah), Tekla Aivazashvili (aivazashvilit)

                                ---

                                Context Control Center (CCC)

                                Activity this period focused on planning improvements to the user experience and scope configuration. Work continued on three issues addressing how the module presents guidance to editors and how conditional subcontext settings behave when disabled.

                                Progress was made on Decouple context item form descriptions from scope plugin descriptions, which addresses confusion caused by reusing the same guidance text in different parts of the interface. This will help editors understand scope settings more clearly in each context where they appear.

                                Planning also advanced on Improve conditional subcontext disabled-state behavior and admin UX, which will clarify what happens when the conditional subcontext feature is turned off and ensure editors understand why certain items become inactive.

                                Work continued on Prepare demo content and demo context items for the CCC to show how it works, which will provide realistic sample data to help new users understand how the module's components work together before configuring their own implementation.

                                How can I help on this project?

                                • Confirm resourcing for user experience refinements to support a stable release.
                                • Identify stakeholders who can review and validate the planned demo content to ensure it reflects realistic organisational use cases.
                                ---

                                AI translate

                                A fix addressing translation issues with media entities was submitted during the reporting period. The work targets a problem where media content was being processed with an invalid language code during translation operations, which would prevent these assets from being properly translated. A merge request addressing translation language handling for media entities is now under review.

                                This fix is important for organizations using the module to translate media-rich content, as it extends reliable translation capabilities beyond text to images, documents, and other media assets.

                                How can I help on this project?

                                • Prioritize review and testing resources to evaluate the media translation fix currently awaiting merge.
                                • Consider allocating development capacity to expand test coverage for media translation scenarios to prevent similar issues.
                                Contributors: szato (odi) ---

                                Orchestration

                                Activity this period focused on planning and feature design rather than code delivery. Two issues saw updates that clarify the module's strategic direction.

                                Work continued on adding an ECA action to invoke Orchestration services. This feature will enable workflows built in ECA (a popular rule engine) to call any service registered with the Orchestration module. Currently, the integration works in only one direction: external systems can trigger ECA workflows via Orchestration's HTTP interface. Completing the reverse path will allow organisations to use ECA's event and condition logic to trigger orchestrated services, expanding automation possibilities without custom code.

                                Separately, discussion advanced on using JSON Schema to define service inputs, outputs, and configuration. This architectural decision would establish formal contracts for each service, improving validation, documentation, and the ability to auto-generate user interfaces. The approach supports safer composition of complex workflows and better runtime error handling.

                                No code was merged this period. Both efforts remain in the planning and acceptance phase.

                                How can I help on this project?

                                • Prioritise resourcing to move accepted feature work from planning into implementation, particularly the ECA integration which has clear user demand.
                                • Support architectural decisions around JSON Schema adoption to unblock design work and maintain momentum on the module's roadmap.
                                ======================================================================== ## [18] factcheck:capabilities:executive ======================================================================== Layer-1 corrections: 2 Judge flags: 0