# Prompt log — 24h 2026-08-25 ======================================================================== ## [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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: eduardo morales alberti (EduardoMoralesAlberti), Giorgio Alfredo Pagano (sjpagan), Jan Kellermann (werk21), Joshua Fernandes (joshua1234511), Konstantine Kirkitadze (kotekirkitadze), Ricardo Castañeda (cadence96), Rob Loach (robloach), Scott Euser (scotteuser), Shivam Sen (shivamsen_12579), 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

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). ### [DeepChat block lost backwards compatibility for its old configuration in 1.5.x](https://git.drupalcode.org/project/ai/-/work_items/3586668) State: opened | Updated: 2026-08-26 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, Release blocker Description: ## Problem/Motivation #3585077 and #3585075 moved the DeepChat block onto the ChatProcessor plugin system. In doing so, block-level settings were removed from `block.settings.ai_deepchat_block`: `ai_assistant` (since restored as `type: ignore`), `verbose_mode` and `show_structured_results`. This breaks sites that deploy the chatbot block from exported configuration: 1. Importing an existing `block.block.*.yml` that still carries `verbose_mode` or `show_structured_results` fails schema validation. `ai_chatbot_post_update_chat_processor()` only fixes sites that update in place; it does nothing… ### [Write QA plan for 1.5.0](https://git.drupalcode.org/project/ai/-/work_items/3586684) State: opened | Updated: 2026-08-26 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Marcus Johansson (Marcus_Johansson) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::task Description: We are close to releasing the 1.5.0 with a RC available, however we need to do a release plan for it. **Issue** * Write a test plan for 1.5.0 for new install usage - this is what can be automated for any 1.5.x release afterwards. * Write a test plan for 1.5.0 update from 1.4.x. This can be manually tested once. * Write a test plan for 1.5.0 usage with Drupal CMS. This can be manually tested once. It should all be written in markdown format and shared with QA team here. ### [AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice](https://git.drupalcode.org/project/ai/-/work_items/3586667) State: opened | Updated: 2026-08-26 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1960 [Issue #3586667: Add the $object parameter to ExecutableInterface::execute() implementations.](https://git.drupalcode.org/project/ai/-/merge_requests/1960) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 319 diff lines Description: ## Summary Running PHPUnit kernel tests that instantiate `AiFunctionCall` plugins produces repeated deprecation notices: ``` The "Drupal\ai\Plugin\AiFunctionCall\ActionPluginBase::execute()" method will require a new "object|null $object" argument in the next major version of its interface "Drupal\Core\Executable\ExecutableInterface", not defining it is deprecated. ``` The same notice is triggered for other classes implementing `ExecutableInterface::execute()`, including test fixture plugins under `Drupal\ai_test\Plugin\AiFunctionCall\*` (`Weather`, `Trigger`, `UrlTest`, `Calculator`) and `… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Joonas Meriläinen (mErilainen) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, Has Testing Steps Description: >>> [!note] Migrated issue Reported by: [heyyo](https://www.drupal.org/user/474388) Related to !1277 >>> Problem/Motivation ChatBot closes itself, and impossible to reopen-it, without refreshing the page Steps to reproduce 1. Create new content with CKEditor, for example basic page 2. Open ChatBot 3. Add Media into Ckeditor, we can see ChatBot closes 4. Include the Media 5. It's impossible to reopen the ChatBot ### [Add an #allow_duplicates option to the ai_tools_library element so the same tool can be selected more than once](https://git.drupalcode.org/project/ai/-/work_items/3586689) State: opened | Updated: 2026-08-26 | Author: Joshua Fernandes (joshua1234511) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: ## Problem/Motivation The `ai_tools_library` form element treats its value as a _set_ of function call plugin ids. A tool is either selected, or it is not, and the element has no way to express "this tool, twice, configured each time differently. That is a real limitation for consumers who can configure each occurrence separately. \[#3552038\] in AI Agents does exactly this: an agent stores a list of tool _instances_, each with its own function name and settings, so one generic tool (a node lookup, an HTTP call, a sub-agent) can be offered to the LLM several times with different configuratio… ### [Add support embeddings via symfony/ai](https://git.drupalcode.org/project/ai/-/work_items/3586495) State: opened | Updated: 2026-08-26 | Author: Wolfgang Ziegler (fago) | Assigned: Jordan Graham (COBadger) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: ## Motivation Support embeddings with symfony/ai. See parent issues. ## API New API: ``` // Pick the embeddings-capable platform(s). $platforms = \Drupal::service('plugin.manager.ai.platform') ->getPlatformsForOperationType('embeddings'); $platform = reset($platforms); // Operation-agnostic invoke. Input is a plain string (or list). $result = $platform->invoke('text-embedding-3-small', 'Hello world')->getResult(); // Symfony VectorResult. $vectors = $result->getContent(); $floats = $vectors[0]->getData(); $dim = $vectors[0]->getDimensions(); ``` Legacy API: ``` // BC usage — pick … ### [Introduce DDEV Contrib Config](https://git.drupalcode.org/project/ai/-/work_items/3586688) State: opened | Updated: 2026-08-26 | Author: Rob Loach (robloach) | Assigned: Rob Loach (robloach), Tormi Tabor (tormi) | Labels: state::needsWork Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1963 [Issue #3586688: Add DDEV Contrib Config](https://git.drupalcode.org/project/ai/-/merge_requests/1963) | State: opened | Author: Rob Loach (robloach), 53 diff lines Description: [DDEV Contrib Config](https://github.com/ddev/ddev-drupal-contrib/) is a DDEV Addon that allows rapid spin ups of development environment from a contrib directory. Having a base configuration of it would allow developers to git clone the AI module, and instantly start developing features for the AI module. The idea of it was brought up by @tormi in https://git.drupalcode.org/project/one_line_installer/-/work_items/3601366#note_1905980 . This issue is a discussion space around it. ### Example With DDEV installed, once the config is available, we could do: ```bash git clone git@git.drupal.or… ### [AI CKEditor Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai/-/work_items/3586580) State: opened | Updated: 2026-08-26 | Author: Ricardo Castañeda (cadence96) | Assigned: Joonas Meriläinen (mErilainen) | Labels: 2026Sprint17, AI Initiative Sprint, Has Testing Steps, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1738 [Issue #3586580: Fix summarize prompt translating text instead of preserving original language](https://git.drupalcode.org/project/ai/-/merge_requests/1738) | State: opened | Author: Ricardo Castañeda (cadence96), 13 diff lines Description: Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Install Drupal on a clean site. Install and enable the AI module and AI CKEditor integration. Configure an AI provider. Go to /admin/config/content/formats/manage/full_html. Enable the AI CKEditor assistant/tools for the Full HTML text format. Enable the Summarize option. Edit o… ### [ai_test EchoProvider ToolsOutput type mismatch causes crashes when testing tool calls](https://git.drupalcode.org/project/ai/-/work_items/3586656) State: opened | Updated: 2026-08-26 | Author: Rodel Duterte (rduterte) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1943 [#3586656: return tool calls as a flat ToolsFunctionOutput list from EchoProvider](https://git.drupalcode.org/project/ai/-/merge_requests/1943) | State: opened | Author: Giorgio Alfredo Pagano (sjpagan), 65 diff lines Description: Problem/Motivation While testing an agent locally specifically: https://git.drupalcode.org/project/ai_agents/-/work_items/3550098 using echoai as the provider, I hit a crash when the agent had sub-agent tools configured: ``` TypeError: Drupal\ai_agents\Service\ArtifactHelper::replaceArtifactArguments(): Argument #1 ($tool) must be of type Drupal\ai\OperationType\Chat\Tools\ToolsFunctionOutputInterface, Drupal\ai\OperationType\Chat\Tools\ToolsOutput given ``` Using xdebug, tracing the stack, I found that `EchoProvider::chat()` sets a ToolsOutput object on the `ChatMessage` when tools are pre… ### [Update AI Observability docs and config form to reference Logger, not Extended Logger module](https://git.drupalcode.org/project/ai/-/work_items/3586686) State: opened | Updated: 2026-08-26 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Quick Win, category::task, priority::minor, state::accepted Description: Based on [this Slack thread](https://drupal.slack.com/archives/CDL2YPBNX/p1787556971699459?thread_ts=1782331081.811709&cid=CDL2YPBNX), it seems like we should be steering folks to the [Logger](https://www.drupal.org/project/logger) module instead of the [Extended logger](https://www.drupal.org/project/extended_logger) module. This will require some string changes to the AI observability configuration page (/admin/config/ai/observability) as well as some of the docs (https://git.drupalcode.org/project/ai/-/tree/1.x/docs/modules/ai_observability?ref_type=heads) I _think_ that's it, but there … ### [Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests](https://git.drupalcode.org/project/ai/-/work_items/3582633) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, Has Testing Steps Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1432 [Issue #3582633: Add Functional JavaScript testing conventions and validation script](https://git.drupalcode.org/project/ai/-/merge_requests/1432) | State: opened | Author: Shivam Sen (shivamsen_12579), 278 diff lines Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1432 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module has a system for running FunctionalJavascript tests in CI that relies on two conventions: Every new FJS test class must have a @group annotation with the issue number it belongs to, so the filter script (scripts/filter-functio… ### [DeepChat block loads the whole jQuery UI dialog stack on every page](https://git.drupalcode.org/project/ai/-/work_items/3586670) State: opened | Updated: 2026-08-26 | Author: eduardo morales alberti (EduardoMoralesAlberti) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1946 [bug: #3586670 DeepChat block loads the whole jQuery UI dialog stack on every page](https://git.drupalcode.org/project/ai/-/merge_requests/1946) | State: opened | Author: eduardo morales alberti (EduardoMoralesAlberti), 475 diff lines Description: ## Summary The core/drupal.dialog.ajax dependency is added for the structured-results modal in deepchat-init.js ``` ... // Structured results should open in modal. deepchatElement.htmlClassUtilities['structured-results'] = { 'events': { 'click': (event) => { event.preventDefault(); let details = event.target.closest('.message-bubble').querySelector('.structured-results-dump').cloneNode(true); Drupal.dialog(details, { 'title': Drupal.t('Structured results'), 'width'… ### [HostnameFilter handling of HTML in JSON](https://git.drupalcode.org/project/ai/-/work_items/3586677) State: opened | Updated: 2026-08-25 | Author: Daniel Mundra (dmundra) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: ## Summary For the https://www.drupal.org/project/ai_migration module, the module retrieves the HTML for given URLs, sanitizes it with https://www.drupal.org/project/document_loader_html_processor. Then the modules take the schema for a Drupal content type and gives the HTML + schema to an AI model to return JSON in the structure that we can import the content into the site. We have had to use full trust mode to accomplish the migration because the JSON (with the HTML) was being sanitized in a such a way to cause the JSON decoding to fail. We looking at whether there are ways to control the … ### [Load the DeepChat bundle on demand instead of on every page](https://git.drupalcode.org/project/ai/-/work_items/3586671) State: opened | Updated: 2026-08-25 | Author: eduardo morales alberti (EduardoMoralesAlberti) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1947 [feat: #3586671 Load the DeepChat bundle on demand instead of on every page](https://git.drupalcode.org/project/ai/-/merge_requests/1947) | State: opened | Author: eduardo morales alberti (EduardoMoralesAlberti), 585 diff lines Description: ## Summary The library ai_chatbot/deepchat loads deepchat/deepchat.bundle.js on every page where the DeepChat block is placed, before the visitor has done anything. The block is typically placed site-wide with no visibility conditions, so every anonymous page view downloads, parses and executes the whole chat widget even though most visitors never open the chat. Measured on a Drupal 11.4.5 site with the block in the content region: ``` ┌────────────────────────────┬─────────────────────┐ │ │ │ ├────────────────────────────┼───────────────… ### [Using image style when configuring automator with vision results in an error](https://git.drupalcode.org/project/ai/-/work_items/3555656) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, aiAutomators Description: >>> [!note] Migrated issue Reported by: [ultimike](https://www.drupal.org/user/51132) >>> Problem/Motivation When creating an automator with an "AI Provider" with vision, in the "Provider configuration", when I select any image style other than "Use original", get the following warning message (and no text suggestion is provided): Warning messageError invoking model response: messages.0.content.1.image.source.base64.media_type: Input should be 'image/jpeg', 'image/png', 'image/gif' or 'image/webp'Steps to reproduce (required for bugs, but not feature requests) Drupal core 11.2.5, AI module… ### [Block deletion when the inference provider is referenced by one or more ai_platform config entities](https://git.drupalcode.org/project/ai/-/work_items/3586590) State: opened | Updated: 2026-08-25 | Author: Dezső Biczó (mxr576) | Assigned: Konstantine Kirkitadze (kotekirkitadze) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Description ### Background … ### [Agent-backed assistants drop the page context that classic assistants consume](https://git.drupalcode.org/project/ai/-/work_items/3586681) State: opened | Updated: 2026-08-25 | Author: Bruno Potyguara (brunopl) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: ## Summary This came out of CCC QA work: #3586226+ and #3586440+ When an AI Assistant is configured to run an agent, the page context sent by the frontend never reaches anything. Classic (non-agent) assistants pass the same context into the system prompt, so this is an asymmetry between the two assistant modes rather than a missing feature. `AgentRunner::runAsAgent()` packages the context into `AiAssistantPassContextToAgentEvent`, dispatches it, and then never reads it back. No subscriber to that event exists anywhere in contrib. ## Steps to reproduce 1. Install `ai`, `ai_assistant_api`, … ### [Guardrails: Make messages translatable](https://git.drupalcode.org/project/ai/-/work_items/3586687) State: opened | Updated: 2026-08-25 | Author: Jan Kellermann (werk21) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1961 [Issue #3586687: Guardrails: Make messages translatable](https://git.drupalcode.org/project/ai/-/merge_requests/1961) | State: opened | Author: Jan Kellermann (werk21), 105 diff lines Description: ## Summary You can define messages for Guardrails which will be send direct as asstants answer. ## Problem The messages are defined in plugins which are not translatable. ## Proposed solution - Make plugins translatable or change config type. - Translate message via User interface translation (see MR !1961) as workaround ## Workaround - No workaround without MR!1961 ## Affected modules / components *(optional)* ### [LLM: Text / LLM: Text (simple) automators silently drop Base Field content when Base Field and Target Field are both long-text types (Basic input mode)](https://git.drupalcode.org/project/ai/-/work_items/3586659) State: opened | Updated: 2026-08-25 | Author: Adrian McKee (Adrianm6254) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Problem/Motivation When configuring an LLM: Text (llm_text_long) or LLM: Text (simple) (llm_simple_text_long) automator in Basic input mode, with Automator Base Field set to another long-text field on the same entity (e.g. Body → a new summary field, both text_long/string_long type), the Base Field's content is not included in the request sent to the AI provider. The model consistently responds as though no source content was provided at all, e.g.: "I don't see an article provided in your message. Please share the article you'd like me to summarize..." This happens regardless of whether the… --- MERGE REQUESTS (24h) --- ### [Issue #3586689: Add an #allow_duplicates option to the ai_tools_library element](https://git.drupalcode.org/project/ai/-/merge_requests/1964) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3586689-add-an-allow-duplicates-option-to-the-ai-tools-library-element-so-the-same-tool-can-be-selected-more-than-once | 517 diff lines Description: ## Description Closes #3586689 Adds an `#allow_duplicates` option to the `ai_tools_library` form element, so a consumer can let the same tool be selected more than once and configure each occurrence separately. Defaults to `FALSE`, so nothing changes for existing consumers. **Why:** the element treated its value as a _set_ of plugin ids — a tool was either selected or it was not. \[#3552038\] in AI Agents needs the same tool several times, each occurrence with its own function name and settings, so one generic tool can be offered to the LLM more than once with different configuration. That … ### [Resolve #3586495 "Add support embeddings via symfony/ai"](https://git.drupalcode.org/project/ai/-/merge_requests/1856) State: opened | Author: Scott Euser (scotteuser) | Branch: 3586495-add-support-embedings-via-symfonyai | 659 diff lines Description: Closes #3586495 ### [Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{...](https://git.drupalcode.org/project/ai/-/merge_requests/1962) State: opened | Author: Konstantine Kirkitadze (kotekirkitadze) | Branch: 3586659-issue-branch | 21 diff lines Description: Follows the investigation in #3586659. ## What this changes Two lines in `AiAutomatorFieldConfig.php`: 1. The **Automator Prompt** description now states that the Base Field is only included when the prompt references `{{ context }}`. 2. The **Placeholders available** details element is `'#open' => TRUE` instead of collapsed. ## Why The issue was reported as Base Field content being silently dropped when the Base Field and Target Field are both long-text. That turned out not to be the case — @annmarysruthy diagnosed it first, and rendering the prompt actually sent to the provider confirms… --- 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Abhinav Jha (ajabhinavjha30)". 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 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). ### [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-25 | 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… ### [Create documentation on how to create issues that are testable on DrupalForge](https://git.drupalcode.org/project/ai_initiative/-/work_items/3583362) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !16 [Issue #3583362: Add drupalforge-testable-issues skill](https://git.drupalcode.org/project/ai_initiative/-/merge_requests/16) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 169 diff lines Description: >>> [!note] Migrated issue Reported by: [afoster](https://www.drupal.org/user/594458) >>> [Tracker] Update Summary: Blocked — document how to create DrupalForge-testable issues spanning multiple dev module versions Check-in Date: 04/13/2026 Additional Collaborators: Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Many AI issues span multiple modules at once. For example, when we work on UI improvements in the AI module and need to use those same improvements in CCC, reviewers need dev versions of both modules installed together to t… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [3] summariseModule:ai_provider_azure:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Microsoft Azure AI (machine name: ai_provider_azure) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Joshua Fernandes (joshua1234511)". 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

      Microsoft Azure AI

      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) --- ### [[#3614660] Support the Responses API](https://git.drupalcode.org/project/ai_provider_azure/-/merge_requests/33) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: feature/responses_api_compatibility | 1362 diff lines --- COMMITS (24h) --- (none) ======================================================================== ## [4] summariseModule:ai_vdb_provider_milvus:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Milvus VDB Provider (machine name: ai_vdb_provider_milvus) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Remco Hoeneveld (RemcoHoeneveld)". 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

        Milvus VDB Provider

        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: Milvus connection failures fixes.](https://git.drupalcode.org/project/ai_vdb_provider_milvus/-/merge_requests/51) State: opened | Author: Remco Hoeneveld (RemcoHoeneveld) | Branch: 3608584-milvus-connection-failures | 484 diff lines Description: Closes #3608584 --- COMMITS (24h) --- (none) ======================================================================== ## [5] summariseModule:ai_vdb_provider_postgres:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Postgres VDB Provider (machine name: ai_vdb_provider_postgres) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

          Postgres VDB Provider

          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). ### [Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Rob Loach (robloach) | Labels: 2026Sprint14, 2026Sprint16, AI Initiative Sprint, ai inside Description: >>> [!note] Migrated issue Reported by: [nikro](https://www.drupal.org/user/576416) Related to !30 >>> Problem/Motivation The AI module is introducing batch embeddings as a first-class capability, so indexing can embed and store multiple chunks per request instead of one at a time. This meaningfully reduces indexing time. See the parent work item #3568648: Batch embeddings for improved indexing performance. Vector database providers are being aligned with this capability so they participate in the batched indexing path. The Milvus provider has already been updated in ai_vdb_provider_milvu… ### [Offer to help maintain (`robloach`)](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614501) State: opened | Updated: 2026-08-25 | Author: Rob Loach (robloach) | Assigned: unassigned | Labels: Description: I'm willing to help maintain this module. There's an issue that is good to go, so would be willing to help push that forwards, and make sure it hits a release: https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 - https://www.drupal.org/project/ai_vdb_provider_postgres - https://www.drupal.org/u/robloach In addition, Sergiu Nagailic (Nikro), and dan2k3k4 have shown interest in helping out too. So I can coordinate with them afterwards. --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:ai_image_alt_text:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Image Alt Text (machine name: ai_image_alt_text) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: codebymikey". 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 Image Alt Text

            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) --- ### [Issue #3476380: Add support for other image based widgets](https://git.drupalcode.org/project/ai_image_alt_text/-/merge_requests/3) State: opened | Author: codebymikey | Branch: 3476380-improve-widget-support | 246 diff lines Description: Also includes some coding standard improvements and optimizations such as not adding Drupal settings and JS files if it's not actually used on the page, or calling `$(this)` multiple times. Closes #3476380 --- COMMITS (24h) --- (none) ======================================================================== ## [7] summariseModule:ai_agents:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Nicolae Procopan (thebumikgmail.com)". 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 Agents

              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). ### [[DISCUSS] Make it possible to create tool instances](https://git.drupalcode.org/project/ai_agents/-/work_items/3552038) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Joshua Fernandes (joshua1234511) | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !232 >>> Problem/Motivation Currently you can only use one tool per agent. This is restrictive with tools that are fairly generic. It would be nice if we could create tool instances. Also right now the tool configuration is a little bit over the place and doesn't have a schema. We should add this at the same time as well. [DISCUSS] This is part of a wider discussion, is this linked to composible issues? Is this the right way of doing it? Proposed resolution * Add so you can add tools … ### [Better function calls for field agent](https://git.drupalcode.org/project/ai_agents/-/work_items/3586075) State: opened | Updated: 2026-08-25 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Marcus Johansson (Marcus_Johansson) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai::inside Description: I've been testing around the field agent and it causes some issues using more reasoning agents, that try to be over verbose. This means that they might try to load a field storage config, field config and the form config at the same time for instance, but right now we kill the process on form config if the field doesn't exist. Also they for some reason get the config first and then storage wrong, causing errors. We need to fix and help it on the way. --- MERGE REQUESTS (24h) --- ### [Resolve #3552038 "Make it possible"](https://git.drupalcode.org/project/ai_agents/-/merge_requests/232) State: opened | Author: Nicolae Procopan (thebumikgmail.com) | Branch: 3552038-make-it-possible | 2335 diff lines Description: Closes #3552038 --- COMMITS (24h) --- (none) ======================================================================== ## [8] summariseModule:tool:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Tool API (machine name: tool) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                Tool API

                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). ### [Display Tool Description in Tool Explorer](https://git.drupalcode.org/project/tool/-/work_items/3582950) State: opened | Updated: 2026-08-25 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Quick Win, category::feature, priority::minor, state::accepted Description: It might be useful to display the tool description after selecting a tool in the Tool Explorer. My pixel perfect mockup: -mike --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [9] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm) [3], Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Georgi Ivanov (givanov), Harjot Singh (harjot.singh), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii) [1], Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wolfgang Ziegler (fago), wotnak [1]". 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). ### [Media library remove button is not visible in Canvas component form when selected media is SVG](https://git.drupalcode.org/project/canvas/-/work_items/3591987) State: opened | Updated: 2026-08-26 | Author: Narendra Singh Rathore (NarendraR) | Assigned: Narendra Singh Rathore (NarendraR) | Labels: category::bug, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1557 [3591987: Media library remove button is not visible in Canvas component form when selected media is SVG](https://git.drupalcode.org/project/canvas/-/merge_requests/1557) | State: opened | Author: Narendra Singh Rathore (NarendraR), 203 diff lines Description: **Description** In Canvas component editing (right contextual panel), selecting an SVG in a media library widget can hide the remove button (red “x”) for that selected item. PNG/JPG selections show the remove button correctly. This happens because SVG items may render as filename/title-only rows (no thumbnail image), while the remove button is positioned with thumbnail-dependent CSS offset. The button ends up outside the visible row area. **Steps to reproduce** 1\. Enable `canvas_test_sdc` module.\ 2. Ensure image media type allows SVG upload.\ 3. Open Canvas editor and place Card compon… ### [Add missing request body schemas to `openapi.yml`](https://git.drupalcode.org/project/canvas/-/work_items/3472584) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: DX (Developer Experience), Novice, category::task, internalHttpApi Description: >>> [!note] Migrated issue Reported by: [traviscarden](https://www.drupal.org/user/236758) Related to !271 >>> In order to ease transition while we were adding API request validation in #3466555: Also validate request bodies against the OpenAPI spec, we bypassed paths that aren't specified in openapi.yml yet. We fixed that in #3499703: Make all XB HTTP API routes consistently prefixed, ensure they all have OpenAPI specs, and tests to keep it so. But #3499703: did not remove the silencing/debug logging of the "no path" exception, we should remove that only added response body schemas, not… ### [Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/work_items/3591967) State: closed | Updated: 2026-08-26 | Author: wotnak | Assigned: wotnak | Labels: state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1559 [fix: #3591967 Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/merge_requests/1559) | State: merged 2026-08-26 | Author: wotnak, 1061 diff lines Description: When Canvas is updated to a version including page variants, the existing global regions are automatically migrated to a default page variant (that still uses Drupal theme regions for rendering). But when a site is installed from a site template (recipe) that provides global regions, the automatic migration isn't run, global regions are no longer displayed, and no default page variant is automatically created. We need to avoid breaking existing site templates or requiring them to be updated before Canvas update. ### Proposed resolution Ensure the Page content marker component is created ev… ### [Canvas icon / logo for Project Browser and project page](https://git.drupalcode.org/project/canvas/-/work_items/3545468) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Ryan Witcombe (ryan_witcombe) | Labels: Novice, category::task, miscellaneous, priority::normal Description: >>> [!note] Migrated issue Reported by: [darren oh](https://www.drupal.org/user/30772) >>> Overview We need a visual representation of the project. The logo candidates for Experience Builder are not relevant now that the project has been renamed. Proposed resolution Candidate 1 Candidate 2 Candidate 3 ### [canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs](https://git.drupalcode.org/project/canvas/-/work_items/3591992) State: opened | Updated: 2026-08-26 | Author: Manoj Selvan (Manoj_Selvan) | Assigned: unassigned | Labels: Description: Problem: canvas_ai.schema.yml constrains component_context keys with SequenceKeysMatchRegex: /^(sdc|js|block)$/. Sites that register a custom ComponentSource plugin (e.g. a design-system source) and enable it via the Component Description settings form produce a config key the schema disallows. Config::save() doesn't enforce constraints, so it works at runtime, but drush config:validate / strict config-schema tests flag it, and a future release that enforces the constraint would break those sites. Proposed fix: validate the keys against the registered component source plugin IDs (via the Comp… ### [Brand Kit color support](https://git.drupalcode.org/project/canvas/-/work_items/3591838) State: closed | Updated: 2026-08-26 | Author: Ben Mullins (bnjmnm) | Assigned: Ben Mullins (bnjmnm) | Labels: state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1504 [#3591838 style updates](https://git.drupalcode.org/project/canvas/-/merge_requests/1504) | State: merged 2026-08-26 | Author: Ben Mullins (bnjmnm), 84 diff lines - MR !1555 [#3591838 prevent duplicate names](https://git.drupalcode.org/project/canvas/-/merge_requests/1555) | State: opened | Author: Ben Mullins (bnjmnm), 421 diff lines - MR !1503 [#3591838 preserve color format in addition to color scheme](https://git.drupalcode.org/project/canvas/-/merge_requests/1503) | State: merged 2026-08-26 | Author: Ben Mullins (bnjmnm), 476 diff lines - MR !1561 [#3591838 css variable name can be edited](https://git.drupalcode.org/project/canvas/-/merge_requests/1561) | State: opened | Author: Ben Mullins (bnjmnm), 136 diff lines - MR !1479 [#3591838 Phase 3: Usage data + deletion](https://git.drupalcode.org/project/canvas/-/merge_requests/1479) | State: merged 2026-08-25 | Author: Ben Mullins (bnjmnm), 5066 diff lines Description: ## Brand Kit: Color management ### Summary Add a Color entity type to Brand Kit, enabling brand owners to define, organize, and manage a color palette globally. This is the foundational layer — color props on components (allowing editors to select brand colors when configuring components) will follow in a later issue. ### What this adds - **Color entity type** using the [W3C color design tokens spec](https://www.designtokens.org/tr/2025.10/color/#srgb-linear) for storing color values, along with a human-readable name and CSS variable name. - **Brand Kit panel** — colors tab in Brand Kit fo… ### [Require x-allowed-schemes again for wildcard contentMediaType props](https://git.drupalcode.org/project/canvas/-/work_items/3591978) State: opened | Updated: 2026-08-25 | Author: Matt Glaman (mglaman) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1546 [Require x-allowed-schemes for wildcard contentMediaType props](https://git.drupalcode.org/project/canvas/-/merge_requests/1546) | State: opened | Author: Matt Glaman (mglaman), 251 diff lines Description: ## Overview [#3591885](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152) (concern 4) made `x-allowed-schemes` optional in the wildcard `contentMediaType` branch of `JsonSchemaStringFormat::toDataTypeShapeRequirements()`. Before that MR the branch read `$schema['x-allowed-schemes']` unguarded, which crashed on a schema without the annotation; the fix was to make it optional instead of failing with a clear error. That contradicts the rule documented in the code comment and in [the `x-allowed-schemes` change record](https://www.drupal.org/node/3542579): "no SDC prop e… ### [Canvas AI: Add a dev page builder agent and wire the placement tools](https://git.drupalcode.org/project/canvas/-/work_items/3591921) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: Rodel Duterte (rduterte), Ahmad Khalil (ahmad-khalil-imagex) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai Description: ## Summary Add an `ai_agent` config entity to `canvas_dev_ai` that builds a page by placing one component row per hop, and wire the four placement tools that currently ship inert. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Current behavior `canvas_dev_ai` runs one agent per chat turn as a client-side hop loop, and only `canvas_component_agent` is wired to it — so the dev flow can build JS code components but cannot build a page. `canvas_ai:place_components`, `canvas_ai:edit_components`, `canvas_ai:set_page_value` and `canvas_ai:get_component_details` are all … ### [[later phase] Make Component `audit` operation performant/scalable](https://git.drupalcode.org/project/canvas/-/work_items/3522953) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: Performance, category::task, dataModel, priority::normal Description: >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) >>> Overview #3457504: XB field type: calculate all dependencies, store them, surface in new Component "Audit" operation introduced: the audit operation on Component config entities the \Drupal\experience_builder\Audit\ComponentAudit service the \Drupal\experience_builder\Controller\ComponentAuditController (+ test) However, it's implemented in the most naïve/simple way possible — intentionally! — and for example loads every entity revision 😅 Proposed resolution So we'll need t… ### [Support translations tracking on Component "Audit" operation content listing when using asymmetric translations](https://git.drupalcode.org/project/canvas/-/work_items/3522198) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: category::task, dataModel, priority::normal, v1.x-dev Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) >>> Overview In #3457504: XB field type: calculate all dependencies, store them, surface in new Component "Audit" operation we added a new Component audit controller that lists usage of components in content entities. But depending on translation configuration for the component tree fields (symmetric or asymmetric), these could vary per language. Currently only the negotiated language usage will be shown. Ideally we would show all the usages, no matter the language. Proposed resolution Verify that if … ### [Allow passing a view mode in Headless SDK's fetch page API](https://git.drupalcode.org/project/canvas/-/work_items/3591990) State: opened | Updated: 2026-08-25 | Author: Harumi Jang (hooroomoo) | Assigned: Harumi Jang (hooroomoo) | Labels: 1.x-dev, headless Description: Extend headless SDK (fetch page API) to allow passing a view mode so users can navigate to ex.) `http://localhost:3000/node/2?viewMode=teaser` in their headless app and see the different view modes. ### [Canvas AI: Add a Drupal Canvas Agent that answers general questions](https://git.drupalcode.org/project/canvas/-/work_items/3591924) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1528 [Add a tool-less Drupal Canvas Agent that answers general questions and names...](https://git.drupalcode.org/project/canvas/-/merge_requests/1528) | State: opened | Author: Konstantine Kirkitadze (kotekirkitadze), 480 diff lines Description: ## Summary Add an `ai_agent` config entity to `canvas_dev_ai`, labelled **Drupal Canvas Agent**, that answers general questions about Canvas from its system prompt and uses no tools. It is the main agent of the dev chat. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Why Every agent in the dev chat performs work. A user who asks what Canvas can do, or which Tool to pick, has nothing to talk to — the turn goes to whichever working agent is configured. This agent is the chat's entry point; Tools are what the user switches to for a task. ## Proposed Create the age… ### [Fix Brand Kit font family and variant row layout](https://git.drupalcode.org/project/canvas/-/work_items/3591954) State: closed | Updated: 2026-08-25 | Author: Lauri Timmanee (lauriii) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1518 [Brand Kit font family and variant rows lost their layout](https://git.drupalcode.org/project/canvas/-/merge_requests/1518) | State: merged 2026-08-25 | Author: Lauri Timmanee (lauriii), 167 diff lines Description: ## Overview The font family rows in the brand kit panel are somewhat broken: Before: After: ### [Canvas AI: Require ai_agents ^1.3.3](https://git.drupalcode.org/project/canvas/-/work_items/3591776) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, 2026Sprint17, AI Initiative Sprint, ai Description: ## Problem/Motivation Canvas depends on `drupal/ai_agents: ^1.2`. The 1.2 line will be unsupported soon, and `^1.3` — specifically `^1.3.3` — carries features required by the work on the roadmap, https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Proposed resolution 1. Set the `drupal/ai_agents` constraint in `composer.json` to `^1.3.3`. 2. Re-save every agent shipped in the `canvas_ai` module, export their configuration, and compare it against the defaults in `modules/canvas_ai/config/install/`: - `canvas_ai_orchestrator` - `canvas_component_agent` - `canvas_page_b… ### [Canvas AI: Unify error handling in Canvas AI tools](https://git.drupalcode.org/project/canvas/-/work_items/3591958) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: These tools validate a list of items, but stop at the first error and report only that one: - `EditComponents` — YAML parse (`:136`) and per-edit shape (`:125`) abort the call. The "not found on page" check (`:169`) and prop validation (`:183`) already accumulate. - `PlaceComponents` — accumulates parse and placement errors, then aborts at `validateComponentStructure()` (`:130`). The errors already collected are discarded, because the throw skips the report at `:135`. - `SetAIGeneratedComponentStructure` — same as above at `:118`, skipping the report at `:121`. - `SetAIGeneratedTemplateData` … ### [Canvas AI: Prevent the selected Tool from changing during a chat turn](https://git.drupalcode.org/project/canvas/-/work_items/3591952) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: ## Summary One chat turn in the dev AI chat runs as several requests to `/admin/api/canvas/ai-dev`, all sharing one `request_id`. Each of those requests carries the selected Tool as `selected_tool`. The Tools dropdown stays interactive throughout, so the user can change or clear the Tool while a turn is still running. The selection must be fixed for the whole turn, in the UI and on the server. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Current behavior A turn is not one request. Set the component agent as the main agent, open the chat with the browser networ… ### [Canvas AI: Add Playwright coverage for the chat Tools dropdown](https://git.drupalcode.org/project/canvas/-/work_items/3591951) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: ## Summary https://git.drupalcode.org/project/canvas/-/work_items/3591856 added a Tools dropdown to the dev chat UI. Install `canvas_dev_ai`, open the chat, and the dropdown is there. Nothing covers it in a browser. Add Playwright coverage. ## Current behavior No browser coverage exists for the dropdown. The tool list, the selection, the active tool pill, and the `selected_tool` request parameter are all untested. ## Proposed Cover these assertions: 1. Every tool configured in `canvas_dev_ai.settings` renders in the dropdown, with its label and description. 2. With no tools configured, t… ### [Canvas breaks uploading files with spaces for the whole site](https://git.drupalcode.org/project/canvas/-/work_items/3591986) State: opened | Updated: 2026-08-25 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1556 [fix: correctly validate file URIs with streams](https://git.drupalcode.org/project/canvas/-/merge_requests/1556) | State: opened | Author: Wolfgang Ziegler (fago), 121 diff lines Description: ## Problem Canvas customizes file-uri validation for its shape matching, as discussed in https://git.drupalcode.org/project/canvas/-/work_items/3577155. For that, it adds an URI-constraint on file uris of all file fields. This constraints fails to validate for file names that contain spaces. Result: For every file field on the site (also unrelated the canvas) file uploads stop accepting files containing spaces in the filename. The error is simply "This value should be a valid URI." ## Suggested fix the canvas URI-constraint-validator treats file-URIs as regular RFC 3986 URIs, but they are… ### [Form ajax errors are swallowed by canvas](https://git.drupalcode.org/project/canvas/-/work_items/3591989) State: opened | Updated: 2026-08-25 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1558 [Do not swallow BrokenPostRequestException](https://git.drupalcode.org/project/canvas/-/merge_requests/1558) | State: opened | Author: Wolfgang Ziegler (fago), 156 diff lines Description: **Problem** When embedding a form in canvas (e.g. via webform block), a broken ajax submission may be swalloed. The page is displayed with an ugly error on the component, and cached like this. The is related issue about caching exceptions: https://git.drupalcode.org/project/canvas/-/work_items/3591845 ** Reproduction ** Add webform block to canvas, open the route with "?ajax_form=1" appended **Proposed resolution** Instead of swalling the form ajax error, let it pass through, like working ajax requests. ### [Prevent Canvas from caching blocks that throw exceptions](https://git.drupalcode.org/project/canvas/-/work_items/3591845) State: opened | Updated: 2026-08-25 | Author: Alexey Beloglazov (beloglazov91) | Assigned: unassigned | Labels: Description: **Problem** When a block rendered inside a Canvas layout throws an exception, the Canvas module captures and caches the resulting error output. Because this broken state is saved in the cache, subsequent page loads will continue to display the exception message. This happens even after the underlying code issue is fixed or the temporary error condition clears. **Cause** The module lacks a validation check during the caching process to detect block execution failures. It treats exception outputs as standard, cacheable block content, failing to invalidate the cache entry when an error occurs. --- MERGE REQUESTS (24h) --- ### [3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message](https://git.drupalcode.org/project/canvas/-/merge_requests/1551) State: opened | Author: Narendra Singh Rathore (NarendraR) | Branch: 3591983-brand-kit-fix-double-escaped-markup | 123 diff lines Description: \[Description of changes\] When creating a color with a CSS variable name that is already in use, the error message renders raw HTML instead of the variable name. ![Screenshot 2026-08-24 at 12.45.06 PM.png](/uploads/4f026745674cb36ff7913799df0d1370/Screenshot_2026-08-24_at_12.45.06_PM.png){width=372 height=600} **Actual**: `Failed to create color — CSS variable --red is already in use by another color.` **Expected**: `Failed to create color — CSS variable --red is already in use by another color.` AI-Generated: Yes (Used opencode to fix the issue and write test). ## Testing instructions… ### [Check for the recipe runner](https://git.drupalcode.org/project/canvas/-/merge_requests/1554) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3591985-broaden-our-check-to-determine-if-a-recipe-is-being-applied | 86 diff lines Description: Fixes https://git.drupalcode.org/project/canvas/-/work_items/3591985. AI-Generated: No ### [feat(Headless): #3591962 Enable page variants in Canvas Headless](https://git.drupalcode.org/project/canvas/-/merge_requests/1542) State: opened | Author: wotnak | Branch: 3591962-enable-page-variants-in-canvas-headless | 2526 diff lines Description: - adds support for page variants in Canvas Headless content api, editor preview and headless SDK ## Testing instructions - build ui and packages and enable canvas_headless - `npm run build` - `npm run packages:build` - `ddev drush cr` - `npm link -ws` - `ddev drush en canvas_headless` - create a headless app: `npx @drupal-canvas/create@latest --experimental-headless --template nextjs` - start headless app - `npm link @drupal-canvas/headless @drupal-canvas/headless-next @drupal-canvas/headless-react` (if using a template other than the nextjs, link `@drupal-canvas/headless` and fra… ### [Issue #3472584: Add missing request body schemas to openapi.yml](https://git.drupalcode.org/project/canvas/-/merge_requests/1562) State: opened | Author: Georgi Ivanov (givanov) | Branch: 3472584-add-missing-request-body-schemas-to-openapiyml | 526 diff lines Description: Twelve POST and PATCH operations in `openapi.yml` had no `requestBody`. Eight of them receive one; four do not. The eight are the `form/*` operations. They receive form-encoded data, not JSON, because Drupal's Form API reads these values from the request's parameter bag. Two shared request bodies cover them: - `ComponentInstanceFormGeneration` — the three PATCH operations that generate a component instance form. Documents `form_canvas_tree`, `form_canvas_props`, `form_canvas_selected`, `latestUndoRedoActionId` and `ajaxPageState`. - `DrupalAjaxFormSubmission` — the five POST operations that … ### [chore: version packages](https://git.drupalcode.org/project/canvas/-/merge_requests/1527) State: opened | Author: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010) | Branch: changeset-release/1.x | 125 diff lines Description: Automated merge request created from pending changesets. Merging it publishes the new package versions to npm. Do not commit to this branch manually; it is force-pushed on every push to 1.x. ### [Draft: feat(CLI Tool,Headless): #3591981 Provide consistent Code Component metadata validation across CLI and Drupal"](https://git.drupalcode.org/project/canvas/-/merge_requests/1549) State: opened | Author: Bálint Kléri (balintbrews) | Branch: 3591981-code-component-metadata-validation | 4728 diff lines Description: - `component-metadata.schema.json` now defines the shape of the `component.yml` files. - The CLI `validate` command checks resolvable prop schemas and their first examples. It is also aware of the Canvas-owned `$ref` definitions. - A new `/canvas/api/v0/code-components/validate` endpoint is used by the CLI `push` to do a preflight before any mutation is done. The target Drupal site's config schema validation is the authoritative source: Not only some of the validations can't be expressed in TypeScript (without writing a custom compiler), but the validation is also dependent on the Drupal in… ### [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 | 964 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 | 72 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.3.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.3.0?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.13.0`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.13.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.13.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.13.0?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… ### [issue #3591965: add condition to just load lib on required theme](https://git.drupalcode.org/project/canvas/-/merge_requests/1529) State: opened | Author: julio retkwa (julioretkwa) | Branch: 3591965-canvas-library-is-loaded-on-admin-ui-even-when-not-requested | 14 diff lines Description: adds condition to just load `canvas/canvas.scoped.admin.css` if canvas_stark theme is the default ## Testing instructions * [ ] Install Drupal with the Gin admin theme active. * [ ] Install and enable the Canvas module * [ ] Create or edit a content type that includes a media library field (e.g. an image field using the Media Library widget). * [ ] Navigate to a node edit page for that content type * [ ] Click the "Add media" button to open the media library widget modal. * [ ] Observe that the Gin secondary toolbar (the bar containing "Search", "Shortcuts" ,"Drupal Canvas ") is displaced up… ### [Draft: #3591860: Added a button to close the right panel](https://git.drupalcode.org/project/canvas/-/merge_requests/1548) State: opened | Author: Harjot Singh (harjot.singh) | Branch: 3591860-add-a-button-to-close-the-right-tray | 70 diff lines Description: Add a button to close the right tray This change still need designs but created MR to setup a starting point for working with @tim.plunkett and @bnjmnm . AI-Generated: No ## Testing instructions - [ ] Add component in drupal site. - [ ] Click on settings tab on the right-side menu. - [ ] Click on the close icon in the top right corner. Closes #3591860 ### [feat(Headless): Allow passing a view mode in Headless SDK's fetch page API](https://git.drupalcode.org/project/canvas/-/merge_requests/1560) State: opened | Author: Harumi Jang (hooroomoo) | Branch: DXFE-32 | 365 diff lines Description: #3591990 AI Disclosure: Yes used GPT-5.4 Add explicit viewMode support to headless routed page fetches so headless apps can request content-template rendering for a specific view mode, such as teaser, outside the Canvas preview iframe flow. This also keeps existing Canvas preview behavior working by continuing to fall back to the draft session’s stored preview view mode when no explicit viewMode is passed. - Drupal canvas_headless content API now honors top-level viewMode for general routed content requests, not only preview-scoped ones. * `/canvas/content-api?requestUri=/node/1&viewMode=… ### [Identify the document shape by standardization and drop scalar composites the media-source path covers](https://git.drupalcode.org/project/canvas/-/merge_requests/1547) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591979-document-shape-ref-dedupe | 195 diff lines Description: Resolves https://git.drupalcode.org/project/canvas/-/work_items/3591979 ## What changed Two gaps in `EntityFieldPropSourceMatcher::matchDocumentShapeToMediaTypes()` from [#3591885 concerns 2 and 3](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152). ## Why **Concern 2 reproduced, with a twist.** A pdf-only File media type reached through a media reference field produced two expressions: the media-source match, plus a scalar-heuristic composite through the same field with `title` ↝ revision author name, `filename` ↝ owner name, `mimetype` ↝ media name. Not an exact… ### [Anchor the wildcard MIME type regex and compare file extensions case-insensitively](https://git.drupalcode.org/project/canvas/-/merge_requests/1544) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591977-wildcard-regex-extension-case | 169 diff lines Description: Resolves https://git.drupalcode.org/project/canvas/-/work_items/3591977 ## What changed Two shape-matching bugs from the [#3591885 post-merge review](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152) (concerns 5 and 6). ## Why - `UriTargetMediaTypeConstraint::isValidWildCard()` matched anywhere in the string, so `application/*junk` and `foo application/*` passed as valid wildcards. - File extension intersection for the `document` shape was case-sensitive while core's `FileExtension` upload validation is not. A field configured with `PDF` never matched `x-allowed-… ### [#3591934: Added component name to settings form](https://git.drupalcode.org/project/canvas/-/merge_requests/1534) State: opened | Author: Harjot Singh (harjot.singh) | Branch: 3591934-add-component-label-to-settings-form | 74 diff lines Description: Added component label to settings form This change still need designs but created MR to setup a starting point for working with @tim.plunkett and @bnjmnm . AI-Generated: No ## Testing instructions - [x] First step for someone to test the changes in this MR Add component in drupal site. Click on settings tab on the right-side menu. Closes #3591934 ### [#3591973: Reconcile external document media through the CLI and HTTP API](https://git.drupalcode.org/project/canvas/-/merge_requests/1536) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591973-cli-document-media | 1327 diff lines Description: Makes external document media reconcilable through `canvas push` / `canvas reconcile-media`, closing the gap left after #3591885 added the `document` object `$ref`. The filed issue scoped this to the CLI, but the CLI alone dead-ends: the upload endpoint and the OAuth scope generator were both image-only. One commit per layer: 1. **HTTP API** — `ApiMediaControllers::upload()` now accepts media types using the `file` source alongside `image`: per-source validators (no `FileIsImage` for files), the file field's `description` property from a `description` request field (`title` names the media e… ### [User cannot publish changes after unpublishing a page when Metatag module is installed](https://git.drupalcode.org/project/canvas/-/merge_requests/1467) State: opened | Author: Chandan Singh (chandu7929) | Branch: 3591909-user-cannot-publish-changes-for-the-unpublish-page-action-on-source | 337 diff lines Description: When the Metatag module is installed, a user cannot publish changes to a Canvas page after it has been unpublished via the page listing dropdown. **Root cause:** The metatag field stores all of its tags as one JSON string, and `AutoSaveManager::normalizeEntity()` hashes that string byte for byte. `MetatagFieldItem::preSave()` canonicalizes it on a real entity save — sorting the tags by key and stripping tags that match metatag's config defaults — but auto-save snapshots the entity into key-value storage instead, so it never calls `preSave()`. Two mismatches follow: 1. **Order.** The `metatag… ### [#3591972: Add a Document prop type to the code editor](https://git.drupalcode.org/project/canvas/-/merge_requests/1535) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591972-document-prop-type | 1512 diff lines Description: Adds a "Document" prop type to the code editor for the `document` object `$ref` introduced in #3591885. Before this, a prop with `$ref: json-schema-definitions://canvas.module/document` derived to `null`, disappeared from the props panel, and "Document" was not offered in the type select. Changes, one commit per concern: 1. `derivedPropTypes.ts` now matches the `image` and `video` object shapes by exact `$ref` instead of `$ref?.includes()`. 2. Adds the `document` registry entry, `FormPropTypeDocument` with a bundled `ui/assets/documents/sample.pdf` example, multi-value support in `Props.tsx`… ### [Resolve "Canvas AI: Add a dev page builder agent and wire the placement tools"](https://git.drupalcode.org/project/canvas/-/merge_requests/1505) State: opened | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3591921-canvas-ai-add-a-dev-page-builder-agent-and-wire-the-placement-tools | 2376 diff lines Description: **For testing steps, please refer**: https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1940926 ## What this MR does Adds the **dev page builder agent** (`canvas_dev_page_builder_agent`) and wires the new placement tools end-to-end through `canvas_dev_ai`'s client-side hop loop. One agent now covers what the four live agents (`canvas_page_builder_agent`, `canvas_template_builder_agent`, `canvas_title_generation_agent`, `canvas_metadata_generation_agent`) split between them: building pages, extending them, editing components already on the page, and setting page title/descrip… --- COMMITS (24h) --- - [9d0d789f](https://git.drupalcode.org/project/canvas/-/commit/9d0d789ff6429120a21e3a2640c996cd2029a3f6) fix: #3591838 Brand Kit color support style updates — Ben Mullins (2026-08-26T09:55:48.000+00:00) - [e18e5a2a](https://git.drupalcode.org/project/canvas/-/commit/e18e5a2aa2346f744505a146b3ff7f56cf770bc0) fix: #3591967 Improve page variant backward compatibility for recipes — wotnak (2026-08-26T07:48:53.000+00:00) - [5705fd62](https://git.drupalcode.org/project/canvas/-/commit/5705fd6251680aa6159fd0e7cf1b421424796e89) feat(Brand Kit): #3591838 Preserve color format in addition to color scheme — Ben Mullins (2026-08-26T02:26:15.000+00:00) - [c2bef787](https://git.drupalcode.org/project/canvas/-/commit/c2bef7877bf4c0efb961ee1c415b97c97eeb8598) feat: #3591838 Brand Kit color support, part 3 [Usage data + deletion] — Ben Mullins (2026-08-25T20:32:23.000+00:00) - [fe9d51a7](https://git.drupalcode.org/project/canvas/-/commit/fe9d51a70cc9134905e60bbb0b2ffa357751dfa6) fix(Brand Kit): #3591954 Fix Brand Kit font family and variant row layout — Lauri Timmanee (2026-08-25T15:57:56.000+00:00) ======================================================================== ## [10] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)". 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

                    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). ### [Split scope display weight from subscription scoring weight](https://git.drupalcode.org/project/ai_context/-/work_items/3586438) State: opened | Updated: 2026-08-26 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !285 [Issue #3586438: Split scope display weight from subscription scoring weight](https://git.drupalcode.org/project/ai_context/-/merge_requests/285) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 1528 diff lines Description: ## Problem/Motivation Plugin `weight` does two unrelated jobs: 1. Form, tab, and listing order. 2. Subscription scoring influence in `AiContextScopeResolver::calculateScopeScore()`. The scope reorder on #3586415+s showed why that is a problem. Moving Roles in the form silently changed which subscribed context items win: Context Tags (80) began outranking Entity Types (30), where before the reorder Entity Types (60) outranked Context Tags (40). Nobody asked for a ranking change. It was a side effect of a form layout change, and nothing in the code or the tests could have caught it. Three fu… ### [Add automated CCC tests with dummy echoai provider to test integration](https://git.drupalcode.org/project/ai_context/-/work_items/3586428) State: opened | Updated: 2026-08-26 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Description: ## Problem/motivation Our automated tests did not include tests that run a real agent, which meant CCC injection had to be verified manually every time. That is the highest-value thing to automate before release. We don't need a real AI model, because we don't care what the output is in order to see if CCC is working properly. Our job is just to see that the correct context is added based on the configuration. The `echoai` test provider from `ai_test` is enough. ## What EchoAI uniquely proves EchoAI is worth it for **injection**, not for **matching**. The scope plugin tests (for example `A… ### [Create ai_ckeditor context consumer plugin](https://git.drupalcode.org/project/ai_context/-/work_items/3586452) State: opened | Updated: 2026-08-25 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: fixme this will be in their queue blocked on #3586346+s ### [Implement plugin-based generic context consumers and unified consumer configuration](https://git.drupalcode.org/project/ai_context/-/work_items/3586346) State: opened | Updated: 2026-08-25 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, 2026Sprint16, 2026Sprint17, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !283 [Issue #3586346: Implement plugin-based generic context consumers and unified consumer configuration.](https://git.drupalcode.org/project/ai_context/-/merge_requests/283) | State: opened | Author: Kristen Pol (kepol), 20664 diff lines Description: ## Summary **Review the plan carefully before proceeding with implementation in case it needs adjustments.** Implement the architecture accepted in [#3586319](https://git.drupalcode.org/project/ai_context/-/work_items/3586319): AI Context will treat everything that receives context as a consumer, with agents becoming one consumer type. Consumer types will use Drupal attribute plugins, all configured consumers will use one configuration store, and agent and non-agent requests will share the same request-building and selection pipeline. This is a clean-slate beta change. Agent-specific factor… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [11] summariseModule:ai_ckeditor:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI CKEditor (machine name: ai_ckeditor) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                      AI CKEditor

                      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 CKEditor (Standalone): Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai_ckeditor/-/work_items/3613735) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) Related to !5 !3 !4 >>> This issue was originally reported in the AI project before AI CKEditor became a standalone project. I'm recreating it here so it can be tracked in the appropriate repository. Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Ins… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [12] summariseModule:field_widget_actions:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Field Widget Actions (machine name: field_widget_actions) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                        Field Widget Actions

                        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). ### [Bug when trying to "Remove action"?](https://git.drupalcode.org/project/field_widget_actions/-/work_items/3578826) State: opened | Updated: 2026-08-25 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have a fresh Drupal 11.4.5 site with AI 1.4.7 and Field Widget Actions 1.4.1 After creating a simple "LLM: text" automator and adding it to a Text (plain, long) field via FWA, it works as expected - no problems there. But, if I return to the "Manage form display" page for the content type and try to remove the FWA from the field's configuration, it doesn't let me. Here's exactly what what I did and what happens: 1. `drush cr` (because, of course I did) 2. Navigate to the "Manage form display" page for the content type. 3. Click to configure the Text field (via its gear icon.) 4. Opened th… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [13] summariseModule:flowdrop:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: FlowDrop (machine name: flowdrop) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                          FlowDrop

                          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). ### [Unmatched gateway outcome must be loud: default branch port or error Output, never a silent dead subtree](https://git.drupalcode.org/project/flowdrop/-/work_items/3592404) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: Description: **Project:** FlowDrop · **Category:** Bug · **Priority:** Major · **Version:** 2.x-dev · **Component:** Code ### Problem/Motivation When no configured branch matches a gateway's outcome, `nameForValue()` returns the caller's fallback literal, the emitted branch name matches no configured port, and every downstream edge is gated off — silently (registry BR-4 ⚠). A misconfigured gateway (e.g. branches whose values denote no boolean) kills its whole subtree with no error, no warning, and a "completed" run. This is the canonical gateway anti-pattern: BPMN/Camunda throw on a no-match exclusive ga… ### [R6.a: a node with no node-type anchor escapes the config-shape check](https://git.drupalcode.org/project/flowdrop/-/work_items/3592430) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: R6.a — "A node's `data.config`, where present, must be a JSON object. … This is a requirement on config's shape rather than on its contents, so it applies to every node, including a node that records no node type and a node whose node type does not resolve." (https://flowdrop.io/spec/rules/gr-val/r6-a/) Observed: `WorkflowValidator::checkConfig()` (modules/flowdrop_workflow/src/Service/WorkflowValidator.php:302-305) does `if ($nodeTypeId === '') { continue; }` before the non-object guard, so a node with no `node_type_id` anchor and `config: 7` validates clean. `WorkflowValidatorTest::te… ### [PIPE-9: the full pipeline document publishes "now" as createdAt when no creation stamp is recorded](https://git.drupalcode.org/project/flowdrop/-/work_items/3592429) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: PIPE-9 — "`createdAt` is the run's creation stamp, or null where none is recorded, on both documents equally. No timestamp is substituted for a missing one." (https://flowdrop.io/spec/rules/rt-pipe/pipe-9/) Observed: `PipelineApiController::formatPipelineData()` (modules/flowdrop_pipeline/src/Controller/PipelineApiController.php:242) builds `createdAt` as `$created_at ? date('c', …) : date('c')` — the request time stands in for a missing creation stamp. The lightweight document (`getPipelineStatus`, :177) returns null in the same situation, so the two documents disagree. `PipelineApiPay… ### [LANG-28: a case-insensitive regex comparison lowercases the pattern itself](https://git.drupalcode.org/project/flowdrop/-/work_items/3592428) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: LANG-28 — "Where the comparison is case-insensitive it is performed case-insensitively; the pattern itself is never rewritten, so a regular expression keeps its case-sensitive character classes." (https://flowdrop.io/spec/rules/gr-lang/lang-28/) Observed: the condition node lowercases both operands before the operator switch, so with the default `caseSensitive: FALSE` the pattern `/^[A-Z]+$/` becomes `/^[a-z]+$/` and matches the all-lowercase input it was written to reject. `IfElseTest::testCaseInsensitiveRegexLowercasesThePatternItself` (modules/flowdrop_node_processor/tests/src/Unit/P… ### [LANG-21 / LANG-29: DataMapper catches only RuntimeException, so an engine's other throwables escape without the port name or an error-edge route](https://git.drupalcode.org/project/flowdrop/-/work_items/3592427) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: LANG-21 — "When the expression for a mapper output fails, the node fails, the failure names the output port whose expression failed"; LANG-29 — "An expression error … fails the node, and the failure routes to the error edge. This holds uniformly across every node that evaluates an author's expression." (https://flowdrop.io/spec/rules/gr-lang/lang-21/, …/lang-29/) Observed: DataMapper wraps only `\RuntimeException`; DataShaper and DataExtractor wrap `\Throwable`. An `\InvalidArgumentException` (or a `\TypeError`) raised by an engine inside the mapper propagates as-is — no port name in th… ### [DYN-3: a dynamic port name with a trailing newline passes the identifier pattern](https://git.drupalcode.org/project/flowdrop/-/work_items/3592426) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: DYN-3 — "A dynamic port name begins with an ASCII letter and continues with ASCII letters, digits or underscores. … A definition that breaks any of these is refused." (https://flowdrop.io/spec/rules/gr-dyn/dyn-3/) Observed: `DynamicPortTrait::validateNames()` (src/Plugin/FlowDropNodeProcessor/DynamicPortTrait.php:318) checks `preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', $name)`. Without the `D` modifier, `$` matches before a final newline, so `"port\n"` is accepted and the value is collected under the key `"port\n"`. `DynamicPortTraitTest::testTrailingNewlineNameIsAccepted` (tests/src/Unit/P… ### [ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice](https://git.drupalcode.org/project/flowdrop/-/work_items/3592425) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: ORC-14 — "Claiming a unit of work for execution is atomic with respect to other workers: no unit of work is executed twice because two workers claimed it concurrently. Queueing a run for execution does not deliver the same work twice." (https://flowdrop.io/spec/rules/rt-orc/orc-14/) Observed: `AsynchronousOrchestrator::queuePipelineExecution()` enqueues unconditionally. Two `startPipeline()` calls for one run create two queue items with the same `pipeline_id` and `action`, and nothing at this layer stops two workers from claiming the same pipeline. Pinned as today's behaviour by `module… ### [CMP-2: Compiling a pre-built workflow DTO skips node-metadata re-enrichment](https://git.drupalcode.org/project/flowdrop/-/work_items/3592424) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::task, code, spec-registry Description: Spec: CMP-2 — stored node metadata is rebuilt from the live node types on every compile, and "this holds at every entry point into compilation". (https://flowdrop.io/spec/rules/rt-cmp/cmp-2/) Observed: re-enrichment hangs off the array entry point of `WorkflowCompiler::compile()`. Handing `compile()` a pre-built `WorkflowDTO` uses it as-is — a stale `executor_plugin`/description in the DTO reaches the compiled mapping. Pinned as a caller contract by `modules/flowdrop_runtime/tests/src/Kernel/WorkflowCompilerRunEnrichmentTest.php:222-247` (`testCompilingPrebuiltDtoSkipsEnrichment`: "every serv… ### [MAN-7: An empty object default is dropped from the published contract; the spec keeps it](https://git.drupalcode.org/project/flowdrop/-/work_items/3592423) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: MAN-7 — "A `default` survives into the published contract when it is null, a scalar, or a collection one level deep whose every member is null or a scalar, an empty collection included." (https://flowdrop.io/spec/rules/gr-man/man-7/) Observed: `WorkflowSchemaBuilder::sanitiseDefault()` (`modules/flowdrop_workflow/src/Service/WorkflowSchemaBuilder.php` ~256-258) rejects an empty object default (`get_object_vars($default) === []`) and drops it with a warning; the parallel array branch has no such check and retains `[]`. Pinned by `WorkflowSchemaBuilderTest::testEmptyObjectDefaultIsDropped… ### [EXPO-11: An output schema with no declared properties bypasses exposure stripping entirely](https://git.drupalcode.org/project/flowdrop/-/work_items/3592422) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: EXPO-11 — "A hidden declared output must be stripped whatever else the result contains, including where the processor declares no output ports at all." (https://flowdrop.io/spec/rules/gr-expo/expo-11/) Observed: `NodeRuntimeService::filterUnexposedOutputs()` early-returns when the processor's output schema has `properties: []`, so an output the node type marks `exposed: FALSE` (and the instance override hides) is delivered anyway — into the unified `output` port, job records and tool results. Pinned as a known gap by `modules/flowdrop_runtime/tests/src/Unit/Service/Runtime/NodeRuntimeSe… ### [STORE-9: A bundle import refused for its flow id answers 422 with an empty `details` list](https://git.drupalcode.org/project/flowdrop/-/work_items/3592421) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: STORE-9 — "Every refusal names its reason: it carries at least one `details` entry identifying the cause, and a flow-id refusal locates itself at `flow.id`." (https://flowdrop.io/spec/rules/gr-store/store-9/) Observed: a bundle whose `flow.id` fails `^[a-z0-9_]+$` (e.g. `evil.config.name`) is refused with `422 {"success": false, "error": "Workflow validation failed", "details": []}`. `BundleImporter` reuses the (passing) validation result for the INVALID status, so nothing itemises the id. Pinned as a known gap in `modules/flowdrop_workflow/tests/src/Kernel/BundleImporterTest.php` — `te… ### [API-7: A malformed `search` query parameter answers the generic 500 instead of a 400](https://git.drupalcode.org/project/flowdrop/-/work_items/3592419) State: opened | Updated: 2026-08-25 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: API-7 — "A failure an implementation can classify must be answered as that classification (a client error as a client error …), and a generic server failure must never stand in for a refusal the door is able to name." (https://flowdrop.io/spec/rules/gr-api/api-7/) Observed: `GET /api/flowdrop/workflows?search[]=a` (an array-valued `search`) is refused by the input layer before the query is built; `WorkflowsController::getWorkflows()`'s blanket `catch (\Exception)` turns that into `500 {"success": false, "error": "Failed to fetch workflows"}`. Pinned as the current shape — explicitly "no… ### [API-8: Most API refusals still carry no `error_code`](https://git.drupalcode.org/project/flowdrop/-/work_items/3592420) State: opened | Updated: 2026-08-25 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::task, code, spec-registry Description: Spec: API-8 — "Every refusal an API door emits carries a stable, machine-readable `error_code` alongside the human-readable `error` string." (https://flowdrop.io/spec/rules/gr-api/api-8/) Observed: `ApiResponseTrait::errorResponse()` (`src/Controller/Api/ApiResponseTrait.php:84-97`) emits `error_code` only when a caller supplies one. Of ~115 `errorResponse()` call sites across `src/` and `modules/*/src/`, only the three signal-API 409s on `PipelineSignalController` supply a code (`PIPELINE_TERMINAL`, `INWARD_SIGNAL_ALREADY_PENDING`, `NO_ACTIVE_PAUSE`; pinned by `PipelineSignalRoutedPathTest::… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [14] summariseModule:langfuse:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Langfuse (machine name: langfuse) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Ivo Van Geertruyen (mr.baileys)". 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

                            Langfuse

                            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) --- ### [Resolve #3594090 "Trace is stored"](https://git.drupalcode.org/project/langfuse/-/merge_requests/4) State: opened | Author: Ivo Van Geertruyen (mr.baileys) | Branch: 3594090-trace-is-stored | 956 diff lines Description: Closes #3594090 --- COMMITS (24h) --- (none) ======================================================================== ## [15] 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] DeepChat block lost backwards compatibility for its old configuration in 1.5.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586668 [2] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [3] AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586667 [4] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [5] Add an #allow_duplicates option to the ai_tools_library element so the same tool can be selected more than once (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586689 [6] Add support embeddings via symfony/ai (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586495 [7] Introduce DDEV Contrib Config (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586688 [8] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [9] ai_test EchoProvider ToolsOutput type mismatch causes crashes when testing tool calls (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586656 [10] Update AI Observability docs and config form to reference Logger, not Extended Logger module (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586686 [11] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [12] DeepChat block loads the whole jQuery UI dialog stack on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586670 [13] HostnameFilter handling of HTML in JSON (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586677 [14] Load the DeepChat bundle on demand instead of on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586671 [15] Using image style when configuring automator with vision results in an error (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3555656 [16] Block deletion when the inference provider is referenced by one or more ai_platform config entities (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586590 [17] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [18] Guardrails: Make messages translatable (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586687 [19] LLM: Text / LLM: Text (simple) automators silently drop Base Field content when Base Field and Target Field are both long-text types (Basic input mode) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586659 [20] Issue #3586667: Add the $object parameter to ExecutableInterface::execute() implementations. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1960 [21] Issue #3586689: Add an #allow_duplicates option to the ai_tools_library element (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1964 [22] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [23] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [24] Issue #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [25] bug: #3586670 DeepChat block loads the whole jQuery UI dialog stack on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1946 [26] Issue #3586688: Add DDEV Contrib Config (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1963 [27] feat: #3586671 Load the DeepChat bundle on demand instead of on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1947 [28] #3586656: return tool calls as a flat ToolsFunctionOutput list from EchoProvider (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1943 [29] Issue #3586687: Guardrails: Make messages translatable (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1961 [30] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [31] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [32] Create documentation on how to create issues that are testable on DrupalForge (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3583362 [33] Issue #3583362: Add drupalforge-testable-issues skill (ai_initiative, MR) — https://git.drupalcode.org/project/ai_initiative/-/merge_requests/16 [34] [#3614660] Support the Responses API (ai_provider_azure, MR) — https://git.drupalcode.org/project/ai_provider_azure/-/merge_requests/33 [35] fix: Milvus connection failures fixes. (ai_vdb_provider_milvus, MR) — https://git.drupalcode.org/project/ai_vdb_provider_milvus/-/merge_requests/51 [36] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [37] Offer to help maintain (`robloach`) (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614501 [38] Issue #3476380: Add support for other image based widgets (ai_image_alt_text, MR) — https://git.drupalcode.org/project/ai_image_alt_text/-/merge_requests/3 [39] [DISCUSS] Make it possible to create tool instances (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3552038 [40] Better function calls for field agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586075 [41] Resolve #3552038 "Make it possible" (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/232 [42] Display Tool Description in Tool Explorer (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582950 [43] Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591987 [44] Add missing request body schemas to `openapi.yml` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3472584 [45] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [46] Canvas icon / logo for Project Browser and project page (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3545468 [47] canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591992 [48] Brand Kit color support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591838 [49] Require x-allowed-schemes again for wildcard contentMediaType props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591978 [50] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [51] [later phase] Make Component `audit` operation performant/scalable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522953 [52] Support translations tracking on Component "Audit" operation content listing when using asymmetric translations (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522198 [53] Allow passing a view mode in Headless SDK's fetch page API (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591990 [54] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [55] Fix Brand Kit font family and variant row layout (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591954 [56] Canvas AI: Require ai_agents ^1.3.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591776 [57] Canvas AI: Unify error handling in Canvas AI tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591958 [58] Canvas AI: Prevent the selected Tool from changing during a chat turn (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591952 [59] Canvas AI: Add Playwright coverage for the chat Tools dropdown (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591951 [60] Canvas breaks uploading files with spaces for the whole site (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591986 [61] Form ajax errors are swallowed by canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591989 [62] Prevent Canvas from caching blocks that throw exceptions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591845 [63] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [64] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [65] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [66] Issue #3472584: Add missing request body schemas to openapi.yml (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1562 [67] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [68] #3591838 style updates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1504 [69] 3591987: Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1557 [70] Draft: feat(CLI Tool,Headless): #3591981 Provide consistent Code Component metadata validation across CLI and Drupal" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1549 [71] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [72] fix: #3591967 Improve page variant backward compatibility for recipes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1559 [73] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [74] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [75] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [76] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [77] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [78] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [79] #3591838 preserve color format in addition to color scheme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1503 [80] Draft: #3591860: Added a button to close the right panel (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1548 [81] feat(Headless): Allow passing a view mode in Headless SDK's fetch page API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1560 [82] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [83] Require x-allowed-schemes for wildcard contentMediaType props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1546 [84] #3591838 Phase 3: Usage data + deletion (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1479 [85] Identify the document shape by standardization and drop scalar composites the media-source path covers (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1547 [86] Anchor the wildcard MIME type regex and compare file extensions case-insensitively (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1544 [87] #3591934: Added component name to settings form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1534 [88] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [89] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [90] #3591972: Add a Document prop type to the code editor (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1535 [91] Brand Kit font family and variant rows lost their layout (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1518 [92] Resolve "Canvas AI: Add a dev page builder agent and wire the placement tools" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1505 [93] Do not swallow BrokenPostRequestException (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1558 [94] Add a tool-less Drupal Canvas Agent that answers general questions and names... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1528 [95] fix: correctly validate file URIs with streams (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1556 [96] Split scope display weight from subscription scoring weight (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586438 [97] Add automated CCC tests with dummy echoai provider to test integration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586428 [98] Create ai_ckeditor context consumer plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586452 [99] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [100] Issue #3586438: Split scope display weight from subscription scoring weight (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/285 [101] Issue #3586346: Implement plugin-based generic context consumers and unified consumer configuration. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/283 [102] AI CKEditor (Standalone): Summarize generates summaries in a different language than the selected text (ai_ckeditor, Issue) — https://git.drupalcode.org/project/ai_ckeditor/-/work_items/3613735 [103] Bug when trying to "Remove action"? (field_widget_actions, Issue) — https://git.drupalcode.org/project/field_widget_actions/-/work_items/3578826 [104] Unmatched gateway outcome must be loud: default branch port or error Output, never a silent dead subtree (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592404 [105] R6.a: a node with no node-type anchor escapes the config-shape check (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592430 [106] PIPE-9: the full pipeline document publishes "now" as createdAt when no creation stamp is recorded (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592429 [107] LANG-28: a case-insensitive regex comparison lowercases the pattern itself (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592428 [108] LANG-21 / LANG-29: DataMapper catches only RuntimeException, so an engine's other throwables escape without the port name or an error-edge route (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592427 [109] DYN-3: a dynamic port name with a trailing newline passes the identifier pattern (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592426 [110] ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592425 [111] CMP-2: Compiling a pre-built workflow DTO skips node-metadata re-enrichment (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592424 [112] MAN-7: An empty object default is dropped from the published contract; the spec keeps it (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592423 [113] EXPO-11: An output schema with no declared properties bypasses exposure stripping entirely (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592422 [114] STORE-9: A bundle import refused for its flow id answers 422 with an empty `details` list (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592421 [115] API-7: A malformed `search` query parameter answers the generic 500 instead of a 400 (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592419 [116] API-8: Most API refusals still carry no `error_code` (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592420 [117] Resolve #3594090 "Trace is stored" (langfuse, MR) — https://git.drupalcode.org/project/langfuse/-/merge_requests/4 --- MODULE SUMMARIES ---

                                AI (Artificial Intelligence)

                                The past 24 hours saw several new merge requests and continued issue triage focused on release blockers and quick fixes ahead of the 1.5.0 release candidate. Three deprecation and schema compatibility issues were addressed with open MRs: the AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice issue now has MR !1960 adding the required object parameter, while MR !1943 addresses the ai_test EchoProvider ToolsOutput type mismatch by returning tool calls as a flat ToolsFunctionOutput list. The DeepChat block backwards compatibility issue remains a release blocker.

                                Two performance-oriented MRs were opened to optimize the DeepChat block's asset loading: MR !1946 removes the jQuery UI dialog stack loaded on every page, and MR !1947 switches to loading the DeepChat bundle on demand. New feature work includes MR !1964 adding an #allow_duplicates option to the ai_tools_library element, enabling the same tool to be selected multiple times with separate configurations. Guardrails message translation support was proposed in MR !1961.

                                The LLM automators silently dropping Base Field content was diagnosed as a documentation issue rather than a bug—the prompt must reference {{ context }} for the Base Field to be included. MR !1962 improves form field descriptions to clarify this behavior.

                                How can I help on this project?

                                Review MR !1960 for the ExecutableInterface parameter fix or MR !1946 for the jQuery UI dialog removal. Pick up the unassigned AI Observability documentation update task to replace Extended Logger references with Logger module guidance.

                                Contributors: eduardo morales alberti (EduardoMoralesAlberti), Giorgio Alfredo Pagano (sjpagan), Jan Kellermann (werk21), Joshua Fernandes (joshua1234511), Konstantine Kirkitadze (kotekirkitadze), Ricardo Castañeda (cadence96), Rob Loach (robloach), Scott Euser (scotteuser), Shivam Sen (shivamsen_12579), Tekla Aivazashvili (aivazashvilit)

                                ---

                                Drupal AI Initiative

                                Activity over the past 24 hours was focused on documentation and testing workflow improvements. Work continued on ai_disclosure: Documentation - module docs and recorder API integrator guide, which targets documentation for the 1.0.0-alpha1 release. The documentation will cover site builder guides for bundle configuration, disclosure grades and profiles, formatter placement, and compliance reporting, as well as a regulatory primer on EU AI Act Article 50(4) requirements and the human review exemption.

                                Separately, Create documentation on how to create issues that are testable on DrupalForge saw updates, with an open merge request addressing how to structure issues spanning multiple development module versions for testing on DrupalForge infrastructure.

                                No merge requests were merged and no commits were pushed during this reporting period.

                                How can I help on this project?

                                Review MR !16 for DrupalForge-testable issue documentation. Help draft content for the ai_disclosure documentation covering site builder workflows or regulatory compliance aspects. Test alpha releases and report integration issues with AI provider modules.

                                Contributors: Abhinav Jha (ajabhinavjha30)

                                ---

                                Microsoft Azure AI

                                A new merge request was opened to add [#3614660] Support the Responses API. This substantial 1362-line change aims to integrate the module with the Responses API, extending compatibility with broader AI provider patterns in Drupal. The merge request is currently under review on the feature/responses_api_compatibility branch.

                                No commits were merged and no issues were closed during this period. The module appears focused on this API enhancement effort.

                                How can I help on this project?

                                • Review the open Responses API support merge request, testing the integration with existing Azure AI services and checking for any edge cases or API incompatibilities.
                                • Contribute documentation updates once the Responses API work merges to help other developers adopt the new patterns.

                                Contributors: Joshua Fernandes (joshua1234511)

                                ---

                                Milvus VDB Provider

                                A new merge request addressing Milvus connection failures fixes was opened during the reporting period. The MR contains 484 lines of diff and targets issue #3608584. No merges or commits were pushed in the last 24 hours, and the connection failures fix remains under review.

                                How can I help on this project?

                                Review the open Milvus connection failures fixes merge request to help move it toward completion. Test the patch against your own Milvus setup to validate the connection handling improvements.

                                Contributors: Remco Hoeneveld (RemcoHoeneveld) ---

                                Postgres VDB Provider

                                No merge activity occurred during the reporting period. The primary focus remains on implementing batch embeddings support. The work item Add batch embeddings continues to track alignment with the AI module's batch embeddings capability, which allows indexing to embed and store multiple chunks per request rather than one at a time. This change is expected to meaningfully reduce indexing time and bring the Postgres provider in line with other vector database providers like Milvus that have already adopted this pattern.

                                A maintenance interest work item was also updated, with multiple contributors expressing willingness to help coordinate ongoing development and releases for the module.

                                How can I help on this project?

                                • Review the open merge request (!30) associated with the Add batch embeddings work item to help move batch embedding support forward.
                                • Test the batch embeddings implementation against real-world indexing scenarios to validate performance improvements and API compatibility.
                                ---

                                AI Image Alt Text

                                A merge request addressing Issue #3476380: Add support for other image based widgets was opened during this period. The MR extends widget support beyond the current implementation and includes coding standard improvements and performance optimizations. Notably, it ensures Drupal settings and JavaScript files are only added to pages where the functionality is actually used, and eliminates redundant $(this) calls. The branch contains 246 lines of diff and is awaiting review.

                                How can I help on this project?

                                Review the open widget support MR to validate the approach and test the performance optimizations. Check that the conditional loading of JavaScript and settings works correctly across different image widget configurations. Provide feedback on the coding standards improvements.

                                Contributors: codebymikey ---

                                AI Agents

                                Work continued on tool instance configuration this period. The Resolve #3552038 "Make it possible" merge request remains open, addressing the current limitation that only permits one tool per agent. The MR proposes allowing tool instances to be created, which would enable more flexible use of generic tools. This work is connected to the broader discussion around composable agents and includes adding a proper schema for tool configuration, which currently lacks structure.

                                Meanwhile, the Better function calls for field agent issue was updated, highlighting challenges with reasoning agents that attempt overly verbose operations. The field agent currently terminates when form configuration is requested for non-existent fields, and agents sometimes request configuration and storage in the wrong order, causing errors. Improvements to the function call handling are needed to guide these agents more effectively.

                                How can I help on this project?

                                Review the tool instances MR and test whether the new configuration schema meets various use cases. Work on improving error handling in the field agent function calls to better support reasoning agents.

                                Contributors: Nicolae Procopan (thebumikgmail.com)

                                ---

                                Tool API

                                Activity remained quiet over the past 24 hours, with no merge requests or commits pushed to the repository. The Display Tool Description in Tool Explorer feature request was updated during the reporting period. The proposal aims to enhance the Tool Explorer interface by showing tool descriptions after a tool is selected, improving usability for developers working with the module's exploration features.

                                No blocking issues or API changes were reported during this period. The module appears to be in a stable state with no critical bugs requiring immediate attention.

                                How can I help on this project?

                                • Pick up the unassigned Display Tool Description in Tool Explorer feature request, which is marked as a Quick Win and has been accepted but has no patch or MR yet.
                                • Review the existing issue queue for other accepted issues that may need implementation work.
                                ---

                                Drupal Canvas

                                The past 24 hours saw significant progress on Brand Kit color support, backward compatibility improvements, and several bug fixes. The Brand Kit color support feature reached completion with three merge requests landing: style updates, color format preservation (maintaining both format and scheme), and usage tracking with deletion capabilities. The color entity type now tracks where brand colors are used across components and prevents deletion of colors still in use.

                                A critical backward compatibility issue was resolved in Improve page variant backward compatibility for recipes, ensuring that sites installed from recipes with global regions properly migrate to page variants when Canvas updates. The Brand Kit font family and variant row layout fix restored proper visual structure to font management rows.

                                Active development continues on several fronts. Open merge requests address document media reconciliation through the CLI and HTTP API, missing request body schemas in openapi.yml, and wildcard MIME type validation improvements. Two file-related bugs surfaced: Canvas breaks uploading files with spaces for the whole site and Form ajax errors are swallowed by canvas, both with open merge requests awaiting review.

                                The Canvas AI work stream added several new issues around agent orchestration, including a dev page builder agent, a general Drupal Canvas Agent for answering questions, and improved error handling across AI tools.

                                How can I help on this project?

                                Review MR !1556 addressing file URI validation with spaces, or MR !1558 fixing swallowed ajax form errors. Test MR !1557 for the SVG media library remove button visibility bug. Pick up unassigned issues like canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs.

                                Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm) [3], Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Georgi Ivanov (givanov), Harjot Singh (harjot.singh), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii) [1], Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wolfgang Ziegler (fago), wotnak [1]

                                ---

                                Context Control Center (CCC)

                                No merges or commits landed during this period. Development activity focused on issue updates and architecture work in progress.

                                Two significant refactors remain in review. The plugin-based generic context consumers work continues with MR !283 open, introducing a unified consumer configuration system that treats agents as one consumer type among many. Separately, splitting scope display weight from subscription scoring weight addresses a design problem where plugin weight serves two unrelated purposes: form ordering and subscription scoring in AiContextScopeResolver::calculateScopeScore(). MR !285 is open for review. The current coupling meant that reordering scopes in the UI silently changed scoring behavior without any way for tests to catch it.

                                Work on automated CCC tests with dummy echoai provider was updated to verify context injection integration without requiring real AI models. The ai_ckeditor context consumer plugin feature remains blocked on the consumer architecture work.

                                How can I help on this project?

                                Review MR !285 for the scope weight split, focusing on whether the new scoring_weight property adequately separates display concerns from subscription scoring. Review MR !283 for the consumer plugin architecture refactor, particularly the migration path and API surface changes.

                                Contributors: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) ---

                                AI CKEditor

                                The AI CKEditor project saw limited activity during the reporting period. An existing bug report regarding the Summarize feature generating summaries in a different language than the selected text was updated. This issue, originally reported in the main AI project before AI CKEditor became standalone, involves the Summarize option producing output in an incorrect language rather than matching the source text's language. The bug affects clean installations of the AI module 1.x branch and is related to three merge requests (!5, !3, !4).

                                No merge requests were merged and no commits were pushed during this period. The module appears to be in a quiet phase with no immediate releases or API changes shipping.

                                How can I help on this project?

                                Review the existing merge requests related to the language summarization bug to help move that work forward. Additional testing on clean installations with various language configurations would help validate the scope of the issue and ensure any proposed fixes work correctly.

                                ---

                                Field Widget Actions

                                No merge requests were merged or commits pushed during this reporting period.

                                A bug report was opened regarding issues with the "Remove action" functionality. When attempting to remove a Field Widget Actions configuration from a field on the "Manage form display" page, the removal does not persist as expected. The issue was observed on Drupal 11.4.5 with Field Widget Actions 1.4.1 and AI module 1.4.7, where an LLM text automator had been previously added to a Text field. The Bug when trying to "Remove action"? issue remains open with no merge requests or patches submitted yet.

                                How can I help on this project?

                                • Investigate and reproduce the Bug when trying to "Remove action"? issue to help identify the root cause in the form display configuration handling.
                                • Create a patch or merge request addressing the action removal bug once reproducible steps are confirmed.
                                ---

                                FlowDrop

                                The FlowDrop project saw a significant batch of spec-registry work this period, with 13 issues opened documenting gaps between the FlowDrop specification and the current implementation. These are not new bugs introduced in the last 24 hours, but rather newly catalogued deviations from the published spec, each pinned by existing test coverage that explicitly documents the non-conforming behaviour.

                                The issues span runtime semantics, API contracts, and data validation. Notable examples include Unmatched gateway outcome must be loud (gateways silently killing subtrees when no branch matches), ORC-14: The asynchronous handover is not atomic (runs may be queued and claimed twice), and LANG-28: a case-insensitive regex comparison lowercases the pattern itself (breaking character classes in condition nodes). Several validation bugs in WorkflowValidator and schema handling were also documented, including R6.a: a node with no node-type anchor escapes the config-shape check and MAN-7: An empty object default is dropped from the published contract.

                                No merge requests were merged and no commits were pushed during this period. All 13 issues remain open and unassigned, with no related MRs.

                                How can I help on this project?

                                Pick up any of the spec-registry issues opened this period. Each is already pinned by a failing test (or a test documenting the gap). Start with simpler validation fixes like DYN-3: trailing newline in port names or R6.a: config-shape validation bypass, which are confined to single functions.

                                ---

                                Langfuse

                                A new merge request titled Resolve #3594090 "Trace is stored" was opened during this period. The MR addresses issue #3594090 and contains 956 lines of changes across the codebase. The merge request remains open and awaiting review.

                                No other issues were updated, and no commits were pushed or MRs merged during this reporting period.

                                How can I help on this project?

                                • Review the open trace storage merge request to help move it toward completion.
                                • Test the 956-line changeset locally to verify functionality and check for edge cases or regressions.

                                Contributors: Ivo Van Geertruyen (mr.baileys)

                                ======================================================================== ## [16] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 0 Judge flags: 5 ======================================================================== ## [17] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: eduardo morales alberti (EduardoMoralesAlberti), Giorgio Alfredo Pagano (sjpagan), Jan Kellermann (werk21), Joshua Fernandes (joshua1234511), Konstantine Kirkitadze (kotekirkitadze), Ricardo Castañeda (cadence96), Rob Loach (robloach), Scott Euser (scotteuser), Shivam Sen (shivamsen_12579), 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

                                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). ### [DeepChat block lost backwards compatibility for its old configuration in 1.5.x](https://git.drupalcode.org/project/ai/-/work_items/3586668) State: opened | Updated: 2026-08-26 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, Release blocker Description: ## Problem/Motivation #3585077 and #3585075 moved the DeepChat block onto the ChatProcessor plugin system. In doing so, block-level settings were removed from `block.settings.ai_deepchat_block`: `ai_assistant` (since restored as `type: ignore`), `verbose_mode` and `show_structured_results`. This breaks sites that deploy the chatbot block from exported configuration: 1. Importing an existing `block.block.*.yml` that still carries `verbose_mode` or `show_structured_results` fails schema validation. `ai_chatbot_post_update_chat_processor()` only fixes sites that update in place; it does nothing… ### [Write QA plan for 1.5.0](https://git.drupalcode.org/project/ai/-/work_items/3586684) State: opened | Updated: 2026-08-26 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Marcus Johansson (Marcus_Johansson) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::task Description: We are close to releasing the 1.5.0 with a RC available, however we need to do a release plan for it. **Issue** * Write a test plan for 1.5.0 for new install usage - this is what can be automated for any 1.5.x release afterwards. * Write a test plan for 1.5.0 update from 1.4.x. This can be manually tested once. * Write a test plan for 1.5.0 usage with Drupal CMS. This can be manually tested once. It should all be written in markdown format and shared with QA team here. ### [AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice](https://git.drupalcode.org/project/ai/-/work_items/3586667) State: opened | Updated: 2026-08-26 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1960 [Issue #3586667: Add the $object parameter to ExecutableInterface::execute() implementations.](https://git.drupalcode.org/project/ai/-/merge_requests/1960) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 319 diff lines Description: ## Summary Running PHPUnit kernel tests that instantiate `AiFunctionCall` plugins produces repeated deprecation notices: ``` The "Drupal\ai\Plugin\AiFunctionCall\ActionPluginBase::execute()" method will require a new "object|null $object" argument in the next major version of its interface "Drupal\Core\Executable\ExecutableInterface", not defining it is deprecated. ``` The same notice is triggered for other classes implementing `ExecutableInterface::execute()`, including test fixture plugins under `Drupal\ai_test\Plugin\AiFunctionCall\*` (`Weather`, `Trigger`, `UrlTest`, `Calculator`) and `… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Joonas Meriläinen (mErilainen) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, Has Testing Steps Description: >>> [!note] Migrated issue Reported by: [heyyo](https://www.drupal.org/user/474388) Related to !1277 >>> Problem/Motivation ChatBot closes itself, and impossible to reopen-it, without refreshing the page Steps to reproduce 1. Create new content with CKEditor, for example basic page 2. Open ChatBot 3. Add Media into Ckeditor, we can see ChatBot closes 4. Include the Media 5. It's impossible to reopen the ChatBot ### [Add an #allow_duplicates option to the ai_tools_library element so the same tool can be selected more than once](https://git.drupalcode.org/project/ai/-/work_items/3586689) State: opened | Updated: 2026-08-26 | Author: Joshua Fernandes (joshua1234511) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: ## Problem/Motivation The `ai_tools_library` form element treats its value as a _set_ of function call plugin ids. A tool is either selected, or it is not, and the element has no way to express "this tool, twice, configured each time differently. That is a real limitation for consumers who can configure each occurrence separately. \[#3552038\] in AI Agents does exactly this: an agent stores a list of tool _instances_, each with its own function name and settings, so one generic tool (a node lookup, an HTTP call, a sub-agent) can be offered to the LLM several times with different configuratio… ### [Add support embeddings via symfony/ai](https://git.drupalcode.org/project/ai/-/work_items/3586495) State: opened | Updated: 2026-08-26 | Author: Wolfgang Ziegler (fago) | Assigned: Jordan Graham (COBadger) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: ## Motivation Support embeddings with symfony/ai. See parent issues. ## API New API: ``` // Pick the embeddings-capable platform(s). $platforms = \Drupal::service('plugin.manager.ai.platform') ->getPlatformsForOperationType('embeddings'); $platform = reset($platforms); // Operation-agnostic invoke. Input is a plain string (or list). $result = $platform->invoke('text-embedding-3-small', 'Hello world')->getResult(); // Symfony VectorResult. $vectors = $result->getContent(); $floats = $vectors[0]->getData(); $dim = $vectors[0]->getDimensions(); ``` Legacy API: ``` // BC usage — pick … ### [Introduce DDEV Contrib Config](https://git.drupalcode.org/project/ai/-/work_items/3586688) State: opened | Updated: 2026-08-26 | Author: Rob Loach (robloach) | Assigned: Rob Loach (robloach), Tormi Tabor (tormi) | Labels: state::needsWork Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1963 [Issue #3586688: Add DDEV Contrib Config](https://git.drupalcode.org/project/ai/-/merge_requests/1963) | State: opened | Author: Rob Loach (robloach), 53 diff lines Description: [DDEV Contrib Config](https://github.com/ddev/ddev-drupal-contrib/) is a DDEV Addon that allows rapid spin ups of development environment from a contrib directory. Having a base configuration of it would allow developers to git clone the AI module, and instantly start developing features for the AI module. The idea of it was brought up by @tormi in https://git.drupalcode.org/project/one_line_installer/-/work_items/3601366#note_1905980 . This issue is a discussion space around it. ### Example With DDEV installed, once the config is available, we could do: ```bash git clone git@git.drupal.or… ### [AI CKEditor Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai/-/work_items/3586580) State: opened | Updated: 2026-08-26 | Author: Ricardo Castañeda (cadence96) | Assigned: Joonas Meriläinen (mErilainen) | Labels: 2026Sprint17, AI Initiative Sprint, Has Testing Steps, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1738 [Issue #3586580: Fix summarize prompt translating text instead of preserving original language](https://git.drupalcode.org/project/ai/-/merge_requests/1738) | State: opened | Author: Ricardo Castañeda (cadence96), 13 diff lines Description: Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Install Drupal on a clean site. Install and enable the AI module and AI CKEditor integration. Configure an AI provider. Go to /admin/config/content/formats/manage/full_html. Enable the AI CKEditor assistant/tools for the Full HTML text format. Enable the Summarize option. Edit o… ### [ai_test EchoProvider ToolsOutput type mismatch causes crashes when testing tool calls](https://git.drupalcode.org/project/ai/-/work_items/3586656) State: opened | Updated: 2026-08-26 | Author: Rodel Duterte (rduterte) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1943 [#3586656: return tool calls as a flat ToolsFunctionOutput list from EchoProvider](https://git.drupalcode.org/project/ai/-/merge_requests/1943) | State: opened | Author: Giorgio Alfredo Pagano (sjpagan), 65 diff lines Description: Problem/Motivation While testing an agent locally specifically: https://git.drupalcode.org/project/ai_agents/-/work_items/3550098 using echoai as the provider, I hit a crash when the agent had sub-agent tools configured: ``` TypeError: Drupal\ai_agents\Service\ArtifactHelper::replaceArtifactArguments(): Argument #1 ($tool) must be of type Drupal\ai\OperationType\Chat\Tools\ToolsFunctionOutputInterface, Drupal\ai\OperationType\Chat\Tools\ToolsOutput given ``` Using xdebug, tracing the stack, I found that `EchoProvider::chat()` sets a ToolsOutput object on the `ChatMessage` when tools are pre… ### [Update AI Observability docs and config form to reference Logger, not Extended Logger module](https://git.drupalcode.org/project/ai/-/work_items/3586686) State: opened | Updated: 2026-08-26 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Quick Win, category::task, priority::minor, state::accepted Description: Based on [this Slack thread](https://drupal.slack.com/archives/CDL2YPBNX/p1787556971699459?thread_ts=1782331081.811709&cid=CDL2YPBNX), it seems like we should be steering folks to the [Logger](https://www.drupal.org/project/logger) module instead of the [Extended logger](https://www.drupal.org/project/extended_logger) module. This will require some string changes to the AI observability configuration page (/admin/config/ai/observability) as well as some of the docs (https://git.drupalcode.org/project/ai/-/tree/1.x/docs/modules/ai_observability?ref_type=heads) I _think_ that's it, but there … ### [Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests](https://git.drupalcode.org/project/ai/-/work_items/3582633) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, Has Testing Steps Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1432 [Issue #3582633: Add Functional JavaScript testing conventions and validation script](https://git.drupalcode.org/project/ai/-/merge_requests/1432) | State: opened | Author: Shivam Sen (shivamsen_12579), 278 diff lines Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1432 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module has a system for running FunctionalJavascript tests in CI that relies on two conventions: Every new FJS test class must have a @group annotation with the issue number it belongs to, so the filter script (scripts/filter-functio… ### [DeepChat block loads the whole jQuery UI dialog stack on every page](https://git.drupalcode.org/project/ai/-/work_items/3586670) State: opened | Updated: 2026-08-26 | Author: eduardo morales alberti (EduardoMoralesAlberti) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1946 [bug: #3586670 DeepChat block loads the whole jQuery UI dialog stack on every page](https://git.drupalcode.org/project/ai/-/merge_requests/1946) | State: opened | Author: eduardo morales alberti (EduardoMoralesAlberti), 475 diff lines Description: ## Summary The core/drupal.dialog.ajax dependency is added for the structured-results modal in deepchat-init.js ``` ... // Structured results should open in modal. deepchatElement.htmlClassUtilities['structured-results'] = { 'events': { 'click': (event) => { event.preventDefault(); let details = event.target.closest('.message-bubble').querySelector('.structured-results-dump').cloneNode(true); Drupal.dialog(details, { 'title': Drupal.t('Structured results'), 'width'… ### [HostnameFilter handling of HTML in JSON](https://git.drupalcode.org/project/ai/-/work_items/3586677) State: opened | Updated: 2026-08-25 | Author: Daniel Mundra (dmundra) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: ## Summary For the https://www.drupal.org/project/ai_migration module, the module retrieves the HTML for given URLs, sanitizes it with https://www.drupal.org/project/document_loader_html_processor. Then the modules take the schema for a Drupal content type and gives the HTML + schema to an AI model to return JSON in the structure that we can import the content into the site. We have had to use full trust mode to accomplish the migration because the JSON (with the HTML) was being sanitized in a such a way to cause the JSON decoding to fail. We looking at whether there are ways to control the … ### [Load the DeepChat bundle on demand instead of on every page](https://git.drupalcode.org/project/ai/-/work_items/3586671) State: opened | Updated: 2026-08-25 | Author: eduardo morales alberti (EduardoMoralesAlberti) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1947 [feat: #3586671 Load the DeepChat bundle on demand instead of on every page](https://git.drupalcode.org/project/ai/-/merge_requests/1947) | State: opened | Author: eduardo morales alberti (EduardoMoralesAlberti), 585 diff lines Description: ## Summary The library ai_chatbot/deepchat loads deepchat/deepchat.bundle.js on every page where the DeepChat block is placed, before the visitor has done anything. The block is typically placed site-wide with no visibility conditions, so every anonymous page view downloads, parses and executes the whole chat widget even though most visitors never open the chat. Measured on a Drupal 11.4.5 site with the block in the content region: ``` ┌────────────────────────────┬─────────────────────┐ │ │ │ ├────────────────────────────┼───────────────… ### [Using image style when configuring automator with vision results in an error](https://git.drupalcode.org/project/ai/-/work_items/3555656) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, aiAutomators Description: >>> [!note] Migrated issue Reported by: [ultimike](https://www.drupal.org/user/51132) >>> Problem/Motivation When creating an automator with an "AI Provider" with vision, in the "Provider configuration", when I select any image style other than "Use original", get the following warning message (and no text suggestion is provided): Warning messageError invoking model response: messages.0.content.1.image.source.base64.media_type: Input should be 'image/jpeg', 'image/png', 'image/gif' or 'image/webp'Steps to reproduce (required for bugs, but not feature requests) Drupal core 11.2.5, AI module… ### [Block deletion when the inference provider is referenced by one or more ai_platform config entities](https://git.drupalcode.org/project/ai/-/work_items/3586590) State: opened | Updated: 2026-08-25 | Author: Dezső Biczó (mxr576) | Assigned: Konstantine Kirkitadze (kotekirkitadze) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Description ### Background … ### [Agent-backed assistants drop the page context that classic assistants consume](https://git.drupalcode.org/project/ai/-/work_items/3586681) State: opened | Updated: 2026-08-25 | Author: Bruno Potyguara (brunopl) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: ## Summary This came out of CCC QA work: #3586226+ and #3586440+ When an AI Assistant is configured to run an agent, the page context sent by the frontend never reaches anything. Classic (non-agent) assistants pass the same context into the system prompt, so this is an asymmetry between the two assistant modes rather than a missing feature. `AgentRunner::runAsAgent()` packages the context into `AiAssistantPassContextToAgentEvent`, dispatches it, and then never reads it back. No subscriber to that event exists anywhere in contrib. ## Steps to reproduce 1. Install `ai`, `ai_assistant_api`, … ### [Guardrails: Make messages translatable](https://git.drupalcode.org/project/ai/-/work_items/3586687) State: opened | Updated: 2026-08-25 | Author: Jan Kellermann (werk21) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1961 [Issue #3586687: Guardrails: Make messages translatable](https://git.drupalcode.org/project/ai/-/merge_requests/1961) | State: opened | Author: Jan Kellermann (werk21), 105 diff lines Description: ## Summary You can define messages for Guardrails which will be send direct as asstants answer. ## Problem The messages are defined in plugins which are not translatable. ## Proposed solution - Make plugins translatable or change config type. - Translate message via User interface translation (see MR !1961) as workaround ## Workaround - No workaround without MR!1961 ## Affected modules / components *(optional)* ### [LLM: Text / LLM: Text (simple) automators silently drop Base Field content when Base Field and Target Field are both long-text types (Basic input mode)](https://git.drupalcode.org/project/ai/-/work_items/3586659) State: opened | Updated: 2026-08-25 | Author: Adrian McKee (Adrianm6254) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Problem/Motivation When configuring an LLM: Text (llm_text_long) or LLM: Text (simple) (llm_simple_text_long) automator in Basic input mode, with Automator Base Field set to another long-text field on the same entity (e.g. Body → a new summary field, both text_long/string_long type), the Base Field's content is not included in the request sent to the AI provider. The model consistently responds as though no source content was provided at all, e.g.: "I don't see an article provided in your message. Please share the article you'd like me to summarize..." This happens regardless of whether the… --- MERGE REQUESTS (24h) --- ### [Issue #3586689: Add an #allow_duplicates option to the ai_tools_library element](https://git.drupalcode.org/project/ai/-/merge_requests/1964) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3586689-add-an-allow-duplicates-option-to-the-ai-tools-library-element-so-the-same-tool-can-be-selected-more-than-once | 517 diff lines Description: ## Description Closes #3586689 Adds an `#allow_duplicates` option to the `ai_tools_library` form element, so a consumer can let the same tool be selected more than once and configure each occurrence separately. Defaults to `FALSE`, so nothing changes for existing consumers. **Why:** the element treated its value as a _set_ of plugin ids — a tool was either selected or it was not. \[#3552038\] in AI Agents needs the same tool several times, each occurrence with its own function name and settings, so one generic tool can be offered to the LLM more than once with different configuration. That … ### [Resolve #3586495 "Add support embeddings via symfony/ai"](https://git.drupalcode.org/project/ai/-/merge_requests/1856) State: opened | Author: Scott Euser (scotteuser) | Branch: 3586495-add-support-embedings-via-symfonyai | 659 diff lines Description: Closes #3586495 ### [Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{...](https://git.drupalcode.org/project/ai/-/merge_requests/1962) State: opened | Author: Konstantine Kirkitadze (kotekirkitadze) | Branch: 3586659-issue-branch | 21 diff lines Description: Follows the investigation in #3586659. ## What this changes Two lines in `AiAutomatorFieldConfig.php`: 1. The **Automator Prompt** description now states that the Base Field is only included when the prompt references `{{ context }}`. 2. The **Placeholders available** details element is `'#open' => TRUE` instead of collapsed. ## Why The issue was reported as Base Field content being silently dropped when the Base Field and Target Field are both long-text. That turned out not to be the case — @annmarysruthy diagnosed it first, and rendering the prompt actually sent to the provider confirms… --- COMMITS (24h) --- (none) ======================================================================== ## [18] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Abhinav Jha (ajabhinavjha30)". 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 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). ### [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-25 | 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… ### [Create documentation on how to create issues that are testable on DrupalForge](https://git.drupalcode.org/project/ai_initiative/-/work_items/3583362) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !16 [Issue #3583362: Add drupalforge-testable-issues skill](https://git.drupalcode.org/project/ai_initiative/-/merge_requests/16) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 169 diff lines Description: >>> [!note] Migrated issue Reported by: [afoster](https://www.drupal.org/user/594458) >>> [Tracker] Update Summary: Blocked — document how to create DrupalForge-testable issues spanning multiple dev module versions Check-in Date: 04/13/2026 Additional Collaborators: Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Many AI issues span multiple modules at once. For example, when we work on UI improvements in the AI module and need to use those same improvements in CCC, reviewers need dev versions of both modules installed together to t… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [19] summariseModule:ai_provider_azure:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Microsoft Azure AI (machine name: ai_provider_azure) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Joshua Fernandes (joshua1234511)". 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

                                    Microsoft Azure AI

                                    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) --- ### [[#3614660] Support the Responses API](https://git.drupalcode.org/project/ai_provider_azure/-/merge_requests/33) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: feature/responses_api_compatibility | 1362 diff lines --- COMMITS (24h) --- (none) ======================================================================== ## [20] summariseModule:ai_vdb_provider_milvus:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Milvus VDB Provider (machine name: ai_vdb_provider_milvus) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Remco Hoeneveld (RemcoHoeneveld)". 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

                                      Milvus VDB Provider

                                      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: Milvus connection failures fixes.](https://git.drupalcode.org/project/ai_vdb_provider_milvus/-/merge_requests/51) State: opened | Author: Remco Hoeneveld (RemcoHoeneveld) | Branch: 3608584-milvus-connection-failures | 484 diff lines Description: Closes #3608584 --- COMMITS (24h) --- (none) ======================================================================== ## [21] summariseModule:ai_vdb_provider_postgres:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Postgres VDB Provider (machine name: ai_vdb_provider_postgres) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                                        Postgres VDB Provider

                                        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). ### [Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Rob Loach (robloach) | Labels: 2026Sprint14, 2026Sprint16, AI Initiative Sprint, ai inside Description: >>> [!note] Migrated issue Reported by: [nikro](https://www.drupal.org/user/576416) Related to !30 >>> Problem/Motivation The AI module is introducing batch embeddings as a first-class capability, so indexing can embed and store multiple chunks per request instead of one at a time. This meaningfully reduces indexing time. See the parent work item #3568648: Batch embeddings for improved indexing performance. Vector database providers are being aligned with this capability so they participate in the batched indexing path. The Milvus provider has already been updated in ai_vdb_provider_milvu… ### [Offer to help maintain (`robloach`)](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614501) State: opened | Updated: 2026-08-25 | Author: Rob Loach (robloach) | Assigned: unassigned | Labels: Description: I'm willing to help maintain this module. There's an issue that is good to go, so would be willing to help push that forwards, and make sure it hits a release: https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 - https://www.drupal.org/project/ai_vdb_provider_postgres - https://www.drupal.org/u/robloach In addition, Sergiu Nagailic (Nikro), and dan2k3k4 have shown interest in helping out too. So I can coordinate with them afterwards. --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [22] summariseModule:ai_image_alt_text:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Image Alt Text (machine name: ai_image_alt_text) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: codebymikey". 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 Image Alt Text

                                          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) --- ### [Issue #3476380: Add support for other image based widgets](https://git.drupalcode.org/project/ai_image_alt_text/-/merge_requests/3) State: opened | Author: codebymikey | Branch: 3476380-improve-widget-support | 246 diff lines Description: Also includes some coding standard improvements and optimizations such as not adding Drupal settings and JS files if it's not actually used on the page, or calling `$(this)` multiple times. Closes #3476380 --- COMMITS (24h) --- (none) ======================================================================== ## [23] summariseModule:ai_agents:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Nicolae Procopan (thebumikgmail.com)". 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 Agents

                                            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). ### [[DISCUSS] Make it possible to create tool instances](https://git.drupalcode.org/project/ai_agents/-/work_items/3552038) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Joshua Fernandes (joshua1234511) | Labels: 2026Sprint14, 2026Sprint17, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !232 >>> Problem/Motivation Currently you can only use one tool per agent. This is restrictive with tools that are fairly generic. It would be nice if we could create tool instances. Also right now the tool configuration is a little bit over the place and doesn't have a schema. We should add this at the same time as well. [DISCUSS] This is part of a wider discussion, is this linked to composible issues? Is this the right way of doing it? Proposed resolution * Add so you can add tools … ### [Better function calls for field agent](https://git.drupalcode.org/project/ai_agents/-/work_items/3586075) State: opened | Updated: 2026-08-25 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Marcus Johansson (Marcus_Johansson) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai::inside Description: I've been testing around the field agent and it causes some issues using more reasoning agents, that try to be over verbose. This means that they might try to load a field storage config, field config and the form config at the same time for instance, but right now we kill the process on form config if the field doesn't exist. Also they for some reason get the config first and then storage wrong, causing errors. We need to fix and help it on the way. --- MERGE REQUESTS (24h) --- ### [Resolve #3552038 "Make it possible"](https://git.drupalcode.org/project/ai_agents/-/merge_requests/232) State: opened | Author: Nicolae Procopan (thebumikgmail.com) | Branch: 3552038-make-it-possible | 2335 diff lines Description: Closes #3552038 --- COMMITS (24h) --- (none) ======================================================================== ## [24] summariseModule:tool:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Tool API (machine name: tool) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                                              Tool API

                                              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). ### [Display Tool Description in Tool Explorer](https://git.drupalcode.org/project/tool/-/work_items/3582950) State: opened | Updated: 2026-08-25 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Quick Win, category::feature, priority::minor, state::accepted Description: It might be useful to display the tool description after selecting a tool in the Tool Explorer. My pixel perfect mockup: -mike --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [25] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm) [3], Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Georgi Ivanov (givanov), Harjot Singh (harjot.singh), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii) [1], Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wolfgang Ziegler (fago), wotnak [1]". 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). ### [Media library remove button is not visible in Canvas component form when selected media is SVG](https://git.drupalcode.org/project/canvas/-/work_items/3591987) State: opened | Updated: 2026-08-26 | Author: Narendra Singh Rathore (NarendraR) | Assigned: Narendra Singh Rathore (NarendraR) | Labels: category::bug, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1557 [3591987: Media library remove button is not visible in Canvas component form when selected media is SVG](https://git.drupalcode.org/project/canvas/-/merge_requests/1557) | State: opened | Author: Narendra Singh Rathore (NarendraR), 203 diff lines Description: **Description** In Canvas component editing (right contextual panel), selecting an SVG in a media library widget can hide the remove button (red “x”) for that selected item. PNG/JPG selections show the remove button correctly. This happens because SVG items may render as filename/title-only rows (no thumbnail image), while the remove button is positioned with thumbnail-dependent CSS offset. The button ends up outside the visible row area. **Steps to reproduce** 1\. Enable `canvas_test_sdc` module.\ 2. Ensure image media type allows SVG upload.\ 3. Open Canvas editor and place Card compon… ### [Add missing request body schemas to `openapi.yml`](https://git.drupalcode.org/project/canvas/-/work_items/3472584) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: DX (Developer Experience), Novice, category::task, internalHttpApi Description: >>> [!note] Migrated issue Reported by: [traviscarden](https://www.drupal.org/user/236758) Related to !271 >>> In order to ease transition while we were adding API request validation in #3466555: Also validate request bodies against the OpenAPI spec, we bypassed paths that aren't specified in openapi.yml yet. We fixed that in #3499703: Make all XB HTTP API routes consistently prefixed, ensure they all have OpenAPI specs, and tests to keep it so. But #3499703: did not remove the silencing/debug logging of the "no path" exception, we should remove that only added response body schemas, not… ### [Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/work_items/3591967) State: closed | Updated: 2026-08-26 | Author: wotnak | Assigned: wotnak | Labels: state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1559 [fix: #3591967 Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/merge_requests/1559) | State: merged 2026-08-26 | Author: wotnak, 1061 diff lines Description: When Canvas is updated to a version including page variants, the existing global regions are automatically migrated to a default page variant (that still uses Drupal theme regions for rendering). But when a site is installed from a site template (recipe) that provides global regions, the automatic migration isn't run, global regions are no longer displayed, and no default page variant is automatically created. We need to avoid breaking existing site templates or requiring them to be updated before Canvas update. ### Proposed resolution Ensure the Page content marker component is created ev… ### [Canvas icon / logo for Project Browser and project page](https://git.drupalcode.org/project/canvas/-/work_items/3545468) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: Ryan Witcombe (ryan_witcombe) | Labels: Novice, category::task, miscellaneous, priority::normal Description: >>> [!note] Migrated issue Reported by: [darren oh](https://www.drupal.org/user/30772) >>> Overview We need a visual representation of the project. The logo candidates for Experience Builder are not relevant now that the project has been renamed. Proposed resolution Candidate 1 Candidate 2 Candidate 3 ### [canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs](https://git.drupalcode.org/project/canvas/-/work_items/3591992) State: opened | Updated: 2026-08-26 | Author: Manoj Selvan (Manoj_Selvan) | Assigned: unassigned | Labels: Description: Problem: canvas_ai.schema.yml constrains component_context keys with SequenceKeysMatchRegex: /^(sdc|js|block)$/. Sites that register a custom ComponentSource plugin (e.g. a design-system source) and enable it via the Component Description settings form produce a config key the schema disallows. Config::save() doesn't enforce constraints, so it works at runtime, but drush config:validate / strict config-schema tests flag it, and a future release that enforces the constraint would break those sites. Proposed fix: validate the keys against the registered component source plugin IDs (via the Comp… ### [Brand Kit color support](https://git.drupalcode.org/project/canvas/-/work_items/3591838) State: closed | Updated: 2026-08-26 | Author: Ben Mullins (bnjmnm) | Assigned: Ben Mullins (bnjmnm) | Labels: state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1504 [#3591838 style updates](https://git.drupalcode.org/project/canvas/-/merge_requests/1504) | State: merged 2026-08-26 | Author: Ben Mullins (bnjmnm), 84 diff lines - MR !1555 [#3591838 prevent duplicate names](https://git.drupalcode.org/project/canvas/-/merge_requests/1555) | State: opened | Author: Ben Mullins (bnjmnm), 421 diff lines - MR !1503 [#3591838 preserve color format in addition to color scheme](https://git.drupalcode.org/project/canvas/-/merge_requests/1503) | State: merged 2026-08-26 | Author: Ben Mullins (bnjmnm), 476 diff lines - MR !1561 [#3591838 css variable name can be edited](https://git.drupalcode.org/project/canvas/-/merge_requests/1561) | State: opened | Author: Ben Mullins (bnjmnm), 136 diff lines - MR !1479 [#3591838 Phase 3: Usage data + deletion](https://git.drupalcode.org/project/canvas/-/merge_requests/1479) | State: merged 2026-08-25 | Author: Ben Mullins (bnjmnm), 5066 diff lines Description: ## Brand Kit: Color management ### Summary Add a Color entity type to Brand Kit, enabling brand owners to define, organize, and manage a color palette globally. This is the foundational layer — color props on components (allowing editors to select brand colors when configuring components) will follow in a later issue. ### What this adds - **Color entity type** using the [W3C color design tokens spec](https://www.designtokens.org/tr/2025.10/color/#srgb-linear) for storing color values, along with a human-readable name and CSS variable name. - **Brand Kit panel** — colors tab in Brand Kit fo… ### [Require x-allowed-schemes again for wildcard contentMediaType props](https://git.drupalcode.org/project/canvas/-/work_items/3591978) State: opened | Updated: 2026-08-25 | Author: Matt Glaman (mglaman) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1546 [Require x-allowed-schemes for wildcard contentMediaType props](https://git.drupalcode.org/project/canvas/-/merge_requests/1546) | State: opened | Author: Matt Glaman (mglaman), 251 diff lines Description: ## Overview [#3591885](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152) (concern 4) made `x-allowed-schemes` optional in the wildcard `contentMediaType` branch of `JsonSchemaStringFormat::toDataTypeShapeRequirements()`. Before that MR the branch read `$schema['x-allowed-schemes']` unguarded, which crashed on a schema without the annotation; the fix was to make it optional instead of failing with a clear error. That contradicts the rule documented in the code comment and in [the `x-allowed-schemes` change record](https://www.drupal.org/node/3542579): "no SDC prop e… ### [Canvas AI: Add a dev page builder agent and wire the placement tools](https://git.drupalcode.org/project/canvas/-/work_items/3591921) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: Rodel Duterte (rduterte), Ahmad Khalil (ahmad-khalil-imagex) | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai Description: ## Summary Add an `ai_agent` config entity to `canvas_dev_ai` that builds a page by placing one component row per hop, and wire the four placement tools that currently ship inert. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Current behavior `canvas_dev_ai` runs one agent per chat turn as a client-side hop loop, and only `canvas_component_agent` is wired to it — so the dev flow can build JS code components but cannot build a page. `canvas_ai:place_components`, `canvas_ai:edit_components`, `canvas_ai:set_page_value` and `canvas_ai:get_component_details` are all … ### [[later phase] Make Component `audit` operation performant/scalable](https://git.drupalcode.org/project/canvas/-/work_items/3522953) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: Performance, category::task, dataModel, priority::normal Description: >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) >>> Overview #3457504: XB field type: calculate all dependencies, store them, surface in new Component "Audit" operation introduced: the audit operation on Component config entities the \Drupal\experience_builder\Audit\ComponentAudit service the \Drupal\experience_builder\Controller\ComponentAuditController (+ test) However, it's implemented in the most naïve/simple way possible — intentionally! — and for example loads every entity revision 😅 Proposed resolution So we'll need t… ### [Support translations tracking on Component "Audit" operation content listing when using asymmetric translations](https://git.drupalcode.org/project/canvas/-/work_items/3522198) State: opened | Updated: 2026-08-25 | Author: drupalbot | Assigned: unassigned | Labels: category::task, dataModel, priority::normal, v1.x-dev Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) >>> Overview In #3457504: XB field type: calculate all dependencies, store them, surface in new Component "Audit" operation we added a new Component audit controller that lists usage of components in content entities. But depending on translation configuration for the component tree fields (symmetric or asymmetric), these could vary per language. Currently only the negotiated language usage will be shown. Ideally we would show all the usages, no matter the language. Proposed resolution Verify that if … ### [Allow passing a view mode in Headless SDK's fetch page API](https://git.drupalcode.org/project/canvas/-/work_items/3591990) State: opened | Updated: 2026-08-25 | Author: Harumi Jang (hooroomoo) | Assigned: Harumi Jang (hooroomoo) | Labels: 1.x-dev, headless Description: Extend headless SDK (fetch page API) to allow passing a view mode so users can navigate to ex.) `http://localhost:3000/node/2?viewMode=teaser` in their headless app and see the different view modes. ### [Canvas AI: Add a Drupal Canvas Agent that answers general questions](https://git.drupalcode.org/project/canvas/-/work_items/3591924) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1528 [Add a tool-less Drupal Canvas Agent that answers general questions and names...](https://git.drupalcode.org/project/canvas/-/merge_requests/1528) | State: opened | Author: Konstantine Kirkitadze (kotekirkitadze), 480 diff lines Description: ## Summary Add an `ai_agent` config entity to `canvas_dev_ai`, labelled **Drupal Canvas Agent**, that answers general questions about Canvas from its system prompt and uses no tools. It is the main agent of the dev chat. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Why Every agent in the dev chat performs work. A user who asks what Canvas can do, or which Tool to pick, has nothing to talk to — the turn goes to whichever working agent is configured. This agent is the chat's entry point; Tools are what the user switches to for a task. ## Proposed Create the age… ### [Fix Brand Kit font family and variant row layout](https://git.drupalcode.org/project/canvas/-/work_items/3591954) State: closed | Updated: 2026-08-25 | Author: Lauri Timmanee (lauriii) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1518 [Brand Kit font family and variant rows lost their layout](https://git.drupalcode.org/project/canvas/-/merge_requests/1518) | State: merged 2026-08-25 | Author: Lauri Timmanee (lauriii), 167 diff lines Description: ## Overview The font family rows in the brand kit panel are somewhat broken: Before: After: ### [Canvas AI: Require ai_agents ^1.3.3](https://git.drupalcode.org/project/canvas/-/work_items/3591776) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, 2026Sprint17, AI Initiative Sprint, ai Description: ## Problem/Motivation Canvas depends on `drupal/ai_agents: ^1.2`. The 1.2 line will be unsupported soon, and `^1.3` — specifically `^1.3.3` — carries features required by the work on the roadmap, https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Proposed resolution 1. Set the `drupal/ai_agents` constraint in `composer.json` to `^1.3.3`. 2. Re-save every agent shipped in the `canvas_ai` module, export their configuration, and compare it against the defaults in `modules/canvas_ai/config/install/`: - `canvas_ai_orchestrator` - `canvas_component_agent` - `canvas_page_b… ### [Canvas AI: Unify error handling in Canvas AI tools](https://git.drupalcode.org/project/canvas/-/work_items/3591958) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: These tools validate a list of items, but stop at the first error and report only that one: - `EditComponents` — YAML parse (`:136`) and per-edit shape (`:125`) abort the call. The "not found on page" check (`:169`) and prop validation (`:183`) already accumulate. - `PlaceComponents` — accumulates parse and placement errors, then aborts at `validateComponentStructure()` (`:130`). The errors already collected are discarded, because the throw skips the report at `:135`. - `SetAIGeneratedComponentStructure` — same as above at `:118`, skipping the report at `:121`. - `SetAIGeneratedTemplateData` … ### [Canvas AI: Prevent the selected Tool from changing during a chat turn](https://git.drupalcode.org/project/canvas/-/work_items/3591952) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: ## Summary One chat turn in the dev AI chat runs as several requests to `/admin/api/canvas/ai-dev`, all sharing one `request_id`. Each of those requests carries the selected Tool as `selected_tool`. The Tools dropdown stays interactive throughout, so the user can change or clear the Tool while a turn is still running. The selection must be fixed for the whole turn, in the UI and on the server. Part of https://git.drupalcode.org/project/canvas/-/work_items/3591777. ## Current behavior A turn is not one request. Set the component agent as the main agent, open the chat with the browser networ… ### [Canvas AI: Add Playwright coverage for the chat Tools dropdown](https://git.drupalcode.org/project/canvas/-/work_items/3591951) State: opened | Updated: 2026-08-25 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai, ai::inside Description: ## Summary https://git.drupalcode.org/project/canvas/-/work_items/3591856 added a Tools dropdown to the dev chat UI. Install `canvas_dev_ai`, open the chat, and the dropdown is there. Nothing covers it in a browser. Add Playwright coverage. ## Current behavior No browser coverage exists for the dropdown. The tool list, the selection, the active tool pill, and the `selected_tool` request parameter are all untested. ## Proposed Cover these assertions: 1. Every tool configured in `canvas_dev_ai.settings` renders in the dropdown, with its label and description. 2. With no tools configured, t… ### [Canvas breaks uploading files with spaces for the whole site](https://git.drupalcode.org/project/canvas/-/work_items/3591986) State: opened | Updated: 2026-08-25 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1556 [fix: correctly validate file URIs with streams](https://git.drupalcode.org/project/canvas/-/merge_requests/1556) | State: opened | Author: Wolfgang Ziegler (fago), 121 diff lines Description: ## Problem Canvas customizes file-uri validation for its shape matching, as discussed in https://git.drupalcode.org/project/canvas/-/work_items/3577155. For that, it adds an URI-constraint on file uris of all file fields. This constraints fails to validate for file names that contain spaces. Result: For every file field on the site (also unrelated the canvas) file uploads stop accepting files containing spaces in the filename. The error is simply "This value should be a valid URI." ## Suggested fix the canvas URI-constraint-validator treats file-URIs as regular RFC 3986 URIs, but they are… ### [Form ajax errors are swallowed by canvas](https://git.drupalcode.org/project/canvas/-/work_items/3591989) State: opened | Updated: 2026-08-25 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1558 [Do not swallow BrokenPostRequestException](https://git.drupalcode.org/project/canvas/-/merge_requests/1558) | State: opened | Author: Wolfgang Ziegler (fago), 156 diff lines Description: **Problem** When embedding a form in canvas (e.g. via webform block), a broken ajax submission may be swalloed. The page is displayed with an ugly error on the component, and cached like this. The is related issue about caching exceptions: https://git.drupalcode.org/project/canvas/-/work_items/3591845 ** Reproduction ** Add webform block to canvas, open the route with "?ajax_form=1" appended **Proposed resolution** Instead of swalling the form ajax error, let it pass through, like working ajax requests. ### [Prevent Canvas from caching blocks that throw exceptions](https://git.drupalcode.org/project/canvas/-/work_items/3591845) State: opened | Updated: 2026-08-25 | Author: Alexey Beloglazov (beloglazov91) | Assigned: unassigned | Labels: Description: **Problem** When a block rendered inside a Canvas layout throws an exception, the Canvas module captures and caches the resulting error output. Because this broken state is saved in the cache, subsequent page loads will continue to display the exception message. This happens even after the underlying code issue is fixed or the temporary error condition clears. **Cause** The module lacks a validation check during the caching process to detect block execution failures. It treats exception outputs as standard, cacheable block content, failing to invalidate the cache entry when an error occurs. --- MERGE REQUESTS (24h) --- ### [3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message](https://git.drupalcode.org/project/canvas/-/merge_requests/1551) State: opened | Author: Narendra Singh Rathore (NarendraR) | Branch: 3591983-brand-kit-fix-double-escaped-markup | 123 diff lines Description: \[Description of changes\] When creating a color with a CSS variable name that is already in use, the error message renders raw HTML instead of the variable name. ![Screenshot 2026-08-24 at 12.45.06 PM.png](/uploads/4f026745674cb36ff7913799df0d1370/Screenshot_2026-08-24_at_12.45.06_PM.png){width=372 height=600} **Actual**: `Failed to create color — CSS variable --red is already in use by another color.` **Expected**: `Failed to create color — CSS variable --red is already in use by another color.` AI-Generated: Yes (Used opencode to fix the issue and write test). ## Testing instructions… ### [Check for the recipe runner](https://git.drupalcode.org/project/canvas/-/merge_requests/1554) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3591985-broaden-our-check-to-determine-if-a-recipe-is-being-applied | 86 diff lines Description: Fixes https://git.drupalcode.org/project/canvas/-/work_items/3591985. AI-Generated: No ### [feat(Headless): #3591962 Enable page variants in Canvas Headless](https://git.drupalcode.org/project/canvas/-/merge_requests/1542) State: opened | Author: wotnak | Branch: 3591962-enable-page-variants-in-canvas-headless | 2526 diff lines Description: - adds support for page variants in Canvas Headless content api, editor preview and headless SDK ## Testing instructions - build ui and packages and enable canvas_headless - `npm run build` - `npm run packages:build` - `ddev drush cr` - `npm link -ws` - `ddev drush en canvas_headless` - create a headless app: `npx @drupal-canvas/create@latest --experimental-headless --template nextjs` - start headless app - `npm link @drupal-canvas/headless @drupal-canvas/headless-next @drupal-canvas/headless-react` (if using a template other than the nextjs, link `@drupal-canvas/headless` and fra… ### [Issue #3472584: Add missing request body schemas to openapi.yml](https://git.drupalcode.org/project/canvas/-/merge_requests/1562) State: opened | Author: Georgi Ivanov (givanov) | Branch: 3472584-add-missing-request-body-schemas-to-openapiyml | 526 diff lines Description: Twelve POST and PATCH operations in `openapi.yml` had no `requestBody`. Eight of them receive one; four do not. The eight are the `form/*` operations. They receive form-encoded data, not JSON, because Drupal's Form API reads these values from the request's parameter bag. Two shared request bodies cover them: - `ComponentInstanceFormGeneration` — the three PATCH operations that generate a component instance form. Documents `form_canvas_tree`, `form_canvas_props`, `form_canvas_selected`, `latestUndoRedoActionId` and `ajaxPageState`. - `DrupalAjaxFormSubmission` — the five POST operations that … ### [chore: version packages](https://git.drupalcode.org/project/canvas/-/merge_requests/1527) State: opened | Author: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010) | Branch: changeset-release/1.x | 125 diff lines Description: Automated merge request created from pending changesets. Merging it publishes the new package versions to npm. Do not commit to this branch manually; it is force-pushed on every push to 1.x. ### [Draft: feat(CLI Tool,Headless): #3591981 Provide consistent Code Component metadata validation across CLI and Drupal"](https://git.drupalcode.org/project/canvas/-/merge_requests/1549) State: opened | Author: Bálint Kléri (balintbrews) | Branch: 3591981-code-component-metadata-validation | 4728 diff lines Description: - `component-metadata.schema.json` now defines the shape of the `component.yml` files. - The CLI `validate` command checks resolvable prop schemas and their first examples. It is also aware of the Canvas-owned `$ref` definitions. - A new `/canvas/api/v0/code-components/validate` endpoint is used by the CLI `push` to do a preflight before any mutation is done. The target Drupal site's config schema validation is the authoritative source: Not only some of the validations can't be expressed in TypeScript (without writing a custom compiler), but the validation is also dependent on the Drupal in… ### [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 | 964 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 | 72 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.3.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.3.0?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.13.0`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.13.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.13.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.13.0?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… ### [issue #3591965: add condition to just load lib on required theme](https://git.drupalcode.org/project/canvas/-/merge_requests/1529) State: opened | Author: julio retkwa (julioretkwa) | Branch: 3591965-canvas-library-is-loaded-on-admin-ui-even-when-not-requested | 14 diff lines Description: adds condition to just load `canvas/canvas.scoped.admin.css` if canvas_stark theme is the default ## Testing instructions * [ ] Install Drupal with the Gin admin theme active. * [ ] Install and enable the Canvas module * [ ] Create or edit a content type that includes a media library field (e.g. an image field using the Media Library widget). * [ ] Navigate to a node edit page for that content type * [ ] Click the "Add media" button to open the media library widget modal. * [ ] Observe that the Gin secondary toolbar (the bar containing "Search", "Shortcuts" ,"Drupal Canvas ") is displaced up… ### [Draft: #3591860: Added a button to close the right panel](https://git.drupalcode.org/project/canvas/-/merge_requests/1548) State: opened | Author: Harjot Singh (harjot.singh) | Branch: 3591860-add-a-button-to-close-the-right-tray | 70 diff lines Description: Add a button to close the right tray This change still need designs but created MR to setup a starting point for working with @tim.plunkett and @bnjmnm . AI-Generated: No ## Testing instructions - [ ] Add component in drupal site. - [ ] Click on settings tab on the right-side menu. - [ ] Click on the close icon in the top right corner. Closes #3591860 ### [feat(Headless): Allow passing a view mode in Headless SDK's fetch page API](https://git.drupalcode.org/project/canvas/-/merge_requests/1560) State: opened | Author: Harumi Jang (hooroomoo) | Branch: DXFE-32 | 365 diff lines Description: #3591990 AI Disclosure: Yes used GPT-5.4 Add explicit viewMode support to headless routed page fetches so headless apps can request content-template rendering for a specific view mode, such as teaser, outside the Canvas preview iframe flow. This also keeps existing Canvas preview behavior working by continuing to fall back to the draft session’s stored preview view mode when no explicit viewMode is passed. - Drupal canvas_headless content API now honors top-level viewMode for general routed content requests, not only preview-scoped ones. * `/canvas/content-api?requestUri=/node/1&viewMode=… ### [Identify the document shape by standardization and drop scalar composites the media-source path covers](https://git.drupalcode.org/project/canvas/-/merge_requests/1547) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591979-document-shape-ref-dedupe | 195 diff lines Description: Resolves https://git.drupalcode.org/project/canvas/-/work_items/3591979 ## What changed Two gaps in `EntityFieldPropSourceMatcher::matchDocumentShapeToMediaTypes()` from [#3591885 concerns 2 and 3](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152). ## Why **Concern 2 reproduced, with a twist.** A pdf-only File media type reached through a media reference field produced two expressions: the media-source match, plus a scalar-heuristic composite through the same field with `title` ↝ revision author name, `filename` ↝ owner name, `mimetype` ↝ media name. Not an exact… ### [Anchor the wildcard MIME type regex and compare file extensions case-insensitively](https://git.drupalcode.org/project/canvas/-/merge_requests/1544) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591977-wildcard-regex-extension-case | 169 diff lines Description: Resolves https://git.drupalcode.org/project/canvas/-/work_items/3591977 ## What changed Two shape-matching bugs from the [#3591885 post-merge review](https://git.drupalcode.org/project/canvas/-/work_items/3591885#note_1877152) (concerns 5 and 6). ## Why - `UriTargetMediaTypeConstraint::isValidWildCard()` matched anywhere in the string, so `application/*junk` and `foo application/*` passed as valid wildcards. - File extension intersection for the `document` shape was case-sensitive while core's `FileExtension` upload validation is not. A field configured with `PDF` never matched `x-allowed-… ### [#3591934: Added component name to settings form](https://git.drupalcode.org/project/canvas/-/merge_requests/1534) State: opened | Author: Harjot Singh (harjot.singh) | Branch: 3591934-add-component-label-to-settings-form | 74 diff lines Description: Added component label to settings form This change still need designs but created MR to setup a starting point for working with @tim.plunkett and @bnjmnm . AI-Generated: No ## Testing instructions - [x] First step for someone to test the changes in this MR Add component in drupal site. Click on settings tab on the right-side menu. Closes #3591934 ### [#3591973: Reconcile external document media through the CLI and HTTP API](https://git.drupalcode.org/project/canvas/-/merge_requests/1536) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591973-cli-document-media | 1327 diff lines Description: Makes external document media reconcilable through `canvas push` / `canvas reconcile-media`, closing the gap left after #3591885 added the `document` object `$ref`. The filed issue scoped this to the CLI, but the CLI alone dead-ends: the upload endpoint and the OAuth scope generator were both image-only. One commit per layer: 1. **HTTP API** — `ApiMediaControllers::upload()` now accepts media types using the `file` source alongside `image`: per-source validators (no `FileIsImage` for files), the file field's `description` property from a `description` request field (`title` names the media e… ### [User cannot publish changes after unpublishing a page when Metatag module is installed](https://git.drupalcode.org/project/canvas/-/merge_requests/1467) State: opened | Author: Chandan Singh (chandu7929) | Branch: 3591909-user-cannot-publish-changes-for-the-unpublish-page-action-on-source | 337 diff lines Description: When the Metatag module is installed, a user cannot publish changes to a Canvas page after it has been unpublished via the page listing dropdown. **Root cause:** The metatag field stores all of its tags as one JSON string, and `AutoSaveManager::normalizeEntity()` hashes that string byte for byte. `MetatagFieldItem::preSave()` canonicalizes it on a real entity save — sorting the tags by key and stripping tags that match metatag's config defaults — but auto-save snapshots the entity into key-value storage instead, so it never calls `preSave()`. Two mismatches follow: 1. **Order.** The `metatag… ### [#3591972: Add a Document prop type to the code editor](https://git.drupalcode.org/project/canvas/-/merge_requests/1535) State: opened | Author: Matt Glaman (mglaman) | Branch: 3591972-document-prop-type | 1512 diff lines Description: Adds a "Document" prop type to the code editor for the `document` object `$ref` introduced in #3591885. Before this, a prop with `$ref: json-schema-definitions://canvas.module/document` derived to `null`, disappeared from the props panel, and "Document" was not offered in the type select. Changes, one commit per concern: 1. `derivedPropTypes.ts` now matches the `image` and `video` object shapes by exact `$ref` instead of `$ref?.includes()`. 2. Adds the `document` registry entry, `FormPropTypeDocument` with a bundled `ui/assets/documents/sample.pdf` example, multi-value support in `Props.tsx`… ### [Resolve "Canvas AI: Add a dev page builder agent and wire the placement tools"](https://git.drupalcode.org/project/canvas/-/merge_requests/1505) State: opened | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3591921-canvas-ai-add-a-dev-page-builder-agent-and-wire-the-placement-tools | 2376 diff lines Description: **For testing steps, please refer**: https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1940926 ## What this MR does Adds the **dev page builder agent** (`canvas_dev_page_builder_agent`) and wires the new placement tools end-to-end through `canvas_dev_ai`'s client-side hop loop. One agent now covers what the four live agents (`canvas_page_builder_agent`, `canvas_template_builder_agent`, `canvas_title_generation_agent`, `canvas_metadata_generation_agent`) split between them: building pages, extending them, editing components already on the page, and setting page title/descrip… --- COMMITS (24h) --- - [9d0d789f](https://git.drupalcode.org/project/canvas/-/commit/9d0d789ff6429120a21e3a2640c996cd2029a3f6) fix: #3591838 Brand Kit color support style updates — Ben Mullins (2026-08-26T09:55:48.000+00:00) - [e18e5a2a](https://git.drupalcode.org/project/canvas/-/commit/e18e5a2aa2346f744505a146b3ff7f56cf770bc0) fix: #3591967 Improve page variant backward compatibility for recipes — wotnak (2026-08-26T07:48:53.000+00:00) - [5705fd62](https://git.drupalcode.org/project/canvas/-/commit/5705fd6251680aa6159fd0e7cf1b421424796e89) feat(Brand Kit): #3591838 Preserve color format in addition to color scheme — Ben Mullins (2026-08-26T02:26:15.000+00:00) - [c2bef787](https://git.drupalcode.org/project/canvas/-/commit/c2bef7877bf4c0efb961ee1c415b97c97eeb8598) feat: #3591838 Brand Kit color support, part 3 [Usage data + deletion] — Ben Mullins (2026-08-25T20:32:23.000+00:00) - [fe9d51a7](https://git.drupalcode.org/project/canvas/-/commit/fe9d51a70cc9134905e60bbb0b2ffa357751dfa6) fix(Brand Kit): #3591954 Fix Brand Kit font family and variant row layout — Lauri Timmanee (2026-08-25T15:57:56.000+00:00) ======================================================================== ## [26] 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-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)". 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

                                                  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). ### [Split scope display weight from subscription scoring weight](https://git.drupalcode.org/project/ai_context/-/work_items/3586438) State: opened | Updated: 2026-08-26 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !285 [Issue #3586438: Split scope display weight from subscription scoring weight](https://git.drupalcode.org/project/ai_context/-/merge_requests/285) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 1528 diff lines Description: ## Problem/Motivation Plugin `weight` does two unrelated jobs: 1. Form, tab, and listing order. 2. Subscription scoring influence in `AiContextScopeResolver::calculateScopeScore()`. The scope reorder on #3586415+s showed why that is a problem. Moving Roles in the form silently changed which subscribed context items win: Context Tags (80) began outranking Entity Types (30), where before the reorder Entity Types (60) outranked Context Tags (40). Nobody asked for a ranking change. It was a side effect of a form layout change, and nothing in the code or the tests could have caught it. Three fu… ### [Add automated CCC tests with dummy echoai provider to test integration](https://git.drupalcode.org/project/ai_context/-/work_items/3586428) State: opened | Updated: 2026-08-26 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Quick Win, ai::inside Description: ## Problem/motivation Our automated tests did not include tests that run a real agent, which meant CCC injection had to be verified manually every time. That is the highest-value thing to automate before release. We don't need a real AI model, because we don't care what the output is in order to see if CCC is working properly. Our job is just to see that the correct context is added based on the configuration. The `echoai` test provider from `ai_test` is enough. ## What EchoAI uniquely proves EchoAI is worth it for **injection**, not for **matching**. The scope plugin tests (for example `A… ### [Create ai_ckeditor context consumer plugin](https://git.drupalcode.org/project/ai_context/-/work_items/3586452) State: opened | Updated: 2026-08-25 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: fixme this will be in their queue blocked on #3586346+s ### [Implement plugin-based generic context consumers and unified consumer configuration](https://git.drupalcode.org/project/ai_context/-/work_items/3586346) State: opened | Updated: 2026-08-25 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, 2026Sprint16, 2026Sprint17, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !283 [Issue #3586346: Implement plugin-based generic context consumers and unified consumer configuration.](https://git.drupalcode.org/project/ai_context/-/merge_requests/283) | State: opened | Author: Kristen Pol (kepol), 20664 diff lines Description: ## Summary **Review the plan carefully before proceeding with implementation in case it needs adjustments.** Implement the architecture accepted in [#3586319](https://git.drupalcode.org/project/ai_context/-/work_items/3586319): AI Context will treat everything that receives context as a consumer, with agents becoming one consumer type. Consumer types will use Drupal attribute plugins, all configured consumers will use one configuration store, and agent and non-agent requests will share the same request-building and selection pipeline. This is a clean-slate beta change. Agent-specific factor… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [27] summariseModule:ai_ckeditor:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI CKEditor (machine name: ai_ckeditor) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                                                    AI CKEditor

                                                    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 CKEditor (Standalone): Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai_ckeditor/-/work_items/3613735) State: opened | Updated: 2026-08-26 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) Related to !5 !3 !4 >>> This issue was originally reported in the AI project before AI CKEditor became a standalone project. I'm recreating it here so it can be tracked in the appropriate repository. Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Ins… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [28] summariseModule:field_widget_actions:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Field Widget Actions (machine name: field_widget_actions) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                                                      Field Widget Actions

                                                      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). ### [Bug when trying to "Remove action"?](https://git.drupalcode.org/project/field_widget_actions/-/work_items/3578826) State: opened | Updated: 2026-08-25 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have a fresh Drupal 11.4.5 site with AI 1.4.7 and Field Widget Actions 1.4.1 After creating a simple "LLM: text" automator and adding it to a Text (plain, long) field via FWA, it works as expected - no problems there. But, if I return to the "Manage form display" page for the content type and try to remove the FWA from the field's configuration, it doesn't let me. Here's exactly what what I did and what happens: 1. `drush cr` (because, of course I did) 2. Navigate to the "Manage form display" page for the content type. 3. Click to configure the Text field (via its gear icon.) 4. Opened th… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [29] summariseModule:flowdrop:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: FlowDrop (machine name: flowdrop) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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

                                                        FlowDrop

                                                        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). ### [Unmatched gateway outcome must be loud: default branch port or error Output, never a silent dead subtree](https://git.drupalcode.org/project/flowdrop/-/work_items/3592404) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: Description: **Project:** FlowDrop · **Category:** Bug · **Priority:** Major · **Version:** 2.x-dev · **Component:** Code ### Problem/Motivation When no configured branch matches a gateway's outcome, `nameForValue()` returns the caller's fallback literal, the emitted branch name matches no configured port, and every downstream edge is gated off — silently (registry BR-4 ⚠). A misconfigured gateway (e.g. branches whose values denote no boolean) kills its whole subtree with no error, no warning, and a "completed" run. This is the canonical gateway anti-pattern: BPMN/Camunda throw on a no-match exclusive ga… ### [R6.a: a node with no node-type anchor escapes the config-shape check](https://git.drupalcode.org/project/flowdrop/-/work_items/3592430) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: R6.a — "A node's `data.config`, where present, must be a JSON object. … This is a requirement on config's shape rather than on its contents, so it applies to every node, including a node that records no node type and a node whose node type does not resolve." (https://flowdrop.io/spec/rules/gr-val/r6-a/) Observed: `WorkflowValidator::checkConfig()` (modules/flowdrop_workflow/src/Service/WorkflowValidator.php:302-305) does `if ($nodeTypeId === '') { continue; }` before the non-object guard, so a node with no `node_type_id` anchor and `config: 7` validates clean. `WorkflowValidatorTest::te… ### [PIPE-9: the full pipeline document publishes "now" as createdAt when no creation stamp is recorded](https://git.drupalcode.org/project/flowdrop/-/work_items/3592429) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: PIPE-9 — "`createdAt` is the run's creation stamp, or null where none is recorded, on both documents equally. No timestamp is substituted for a missing one." (https://flowdrop.io/spec/rules/rt-pipe/pipe-9/) Observed: `PipelineApiController::formatPipelineData()` (modules/flowdrop_pipeline/src/Controller/PipelineApiController.php:242) builds `createdAt` as `$created_at ? date('c', …) : date('c')` — the request time stands in for a missing creation stamp. The lightweight document (`getPipelineStatus`, :177) returns null in the same situation, so the two documents disagree. `PipelineApiPay… ### [LANG-28: a case-insensitive regex comparison lowercases the pattern itself](https://git.drupalcode.org/project/flowdrop/-/work_items/3592428) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: LANG-28 — "Where the comparison is case-insensitive it is performed case-insensitively; the pattern itself is never rewritten, so a regular expression keeps its case-sensitive character classes." (https://flowdrop.io/spec/rules/gr-lang/lang-28/) Observed: the condition node lowercases both operands before the operator switch, so with the default `caseSensitive: FALSE` the pattern `/^[A-Z]+$/` becomes `/^[a-z]+$/` and matches the all-lowercase input it was written to reject. `IfElseTest::testCaseInsensitiveRegexLowercasesThePatternItself` (modules/flowdrop_node_processor/tests/src/Unit/P… ### [LANG-21 / LANG-29: DataMapper catches only RuntimeException, so an engine's other throwables escape without the port name or an error-edge route](https://git.drupalcode.org/project/flowdrop/-/work_items/3592427) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: LANG-21 — "When the expression for a mapper output fails, the node fails, the failure names the output port whose expression failed"; LANG-29 — "An expression error … fails the node, and the failure routes to the error edge. This holds uniformly across every node that evaluates an author's expression." (https://flowdrop.io/spec/rules/gr-lang/lang-21/, …/lang-29/) Observed: DataMapper wraps only `\RuntimeException`; DataShaper and DataExtractor wrap `\Throwable`. An `\InvalidArgumentException` (or a `\TypeError`) raised by an engine inside the mapper propagates as-is — no port name in th… ### [DYN-3: a dynamic port name with a trailing newline passes the identifier pattern](https://git.drupalcode.org/project/flowdrop/-/work_items/3592426) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: DYN-3 — "A dynamic port name begins with an ASCII letter and continues with ASCII letters, digits or underscores. … A definition that breaks any of these is refused." (https://flowdrop.io/spec/rules/gr-dyn/dyn-3/) Observed: `DynamicPortTrait::validateNames()` (src/Plugin/FlowDropNodeProcessor/DynamicPortTrait.php:318) checks `preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', $name)`. Without the `D` modifier, `$` matches before a final newline, so `"port\n"` is accepted and the value is collected under the key `"port\n"`. `DynamicPortTraitTest::testTrailingNewlineNameIsAccepted` (tests/src/Unit/P… ### [ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice](https://git.drupalcode.org/project/flowdrop/-/work_items/3592425) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: ORC-14 — "Claiming a unit of work for execution is atomic with respect to other workers: no unit of work is executed twice because two workers claimed it concurrently. Queueing a run for execution does not deliver the same work twice." (https://flowdrop.io/spec/rules/rt-orc/orc-14/) Observed: `AsynchronousOrchestrator::queuePipelineExecution()` enqueues unconditionally. Two `startPipeline()` calls for one run create two queue items with the same `pipeline_id` and `action`, and nothing at this layer stops two workers from claiming the same pipeline. Pinned as today's behaviour by `module… ### [CMP-2: Compiling a pre-built workflow DTO skips node-metadata re-enrichment](https://git.drupalcode.org/project/flowdrop/-/work_items/3592424) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::task, code, spec-registry Description: Spec: CMP-2 — stored node metadata is rebuilt from the live node types on every compile, and "this holds at every entry point into compilation". (https://flowdrop.io/spec/rules/rt-cmp/cmp-2/) Observed: re-enrichment hangs off the array entry point of `WorkflowCompiler::compile()`. Handing `compile()` a pre-built `WorkflowDTO` uses it as-is — a stale `executor_plugin`/description in the DTO reaches the compiled mapping. Pinned as a caller contract by `modules/flowdrop_runtime/tests/src/Kernel/WorkflowCompilerRunEnrichmentTest.php:222-247` (`testCompilingPrebuiltDtoSkipsEnrichment`: "every serv… ### [MAN-7: An empty object default is dropped from the published contract; the spec keeps it](https://git.drupalcode.org/project/flowdrop/-/work_items/3592423) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: MAN-7 — "A `default` survives into the published contract when it is null, a scalar, or a collection one level deep whose every member is null or a scalar, an empty collection included." (https://flowdrop.io/spec/rules/gr-man/man-7/) Observed: `WorkflowSchemaBuilder::sanitiseDefault()` (`modules/flowdrop_workflow/src/Service/WorkflowSchemaBuilder.php` ~256-258) rejects an empty object default (`get_object_vars($default) === []`) and drops it with a warning; the parallel array branch has no such check and retains `[]`. Pinned by `WorkflowSchemaBuilderTest::testEmptyObjectDefaultIsDropped… ### [EXPO-11: An output schema with no declared properties bypasses exposure stripping entirely](https://git.drupalcode.org/project/flowdrop/-/work_items/3592422) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: EXPO-11 — "A hidden declared output must be stripped whatever else the result contains, including where the processor declares no output ports at all." (https://flowdrop.io/spec/rules/gr-expo/expo-11/) Observed: `NodeRuntimeService::filterUnexposedOutputs()` early-returns when the processor's output schema has `properties: []`, so an output the node type marks `exposed: FALSE` (and the instance override hides) is delivered anyway — into the unified `output` port, job records and tool results. Pinned as a known gap by `modules/flowdrop_runtime/tests/src/Unit/Service/Runtime/NodeRuntimeSe… ### [STORE-9: A bundle import refused for its flow id answers 422 with an empty `details` list](https://git.drupalcode.org/project/flowdrop/-/work_items/3592421) State: opened | Updated: 2026-08-26 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: STORE-9 — "Every refusal names its reason: it carries at least one `details` entry identifying the cause, and a flow-id refusal locates itself at `flow.id`." (https://flowdrop.io/spec/rules/gr-store/store-9/) Observed: a bundle whose `flow.id` fails `^[a-z0-9_]+$` (e.g. `evil.config.name`) is refused with `422 {"success": false, "error": "Workflow validation failed", "details": []}`. `BundleImporter` reuses the (passing) validation result for the INVALID status, so nothing itemises the id. Pinned as a known gap in `modules/flowdrop_workflow/tests/src/Kernel/BundleImporterTest.php` — `te… ### [API-7: A malformed `search` query parameter answers the generic 500 instead of a 400](https://git.drupalcode.org/project/flowdrop/-/work_items/3592419) State: opened | Updated: 2026-08-25 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::bug, code, spec-registry Description: Spec: API-7 — "A failure an implementation can classify must be answered as that classification (a client error as a client error …), and a generic server failure must never stand in for a refusal the door is able to name." (https://flowdrop.io/spec/rules/gr-api/api-7/) Observed: `GET /api/flowdrop/workflows?search[]=a` (an array-valued `search`) is refused by the input layer before the query is built; `WorkflowsController::getWorkflows()`'s blanket `catch (\Exception)` turns that into `500 {"success": false, "error": "Failed to fetch workflows"}`. Pinned as the current shape — explicitly "no… ### [API-8: Most API refusals still carry no `error_code`](https://git.drupalcode.org/project/flowdrop/-/work_items/3592420) State: opened | Updated: 2026-08-25 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: category::task, code, spec-registry Description: Spec: API-8 — "Every refusal an API door emits carries a stable, machine-readable `error_code` alongside the human-readable `error` string." (https://flowdrop.io/spec/rules/gr-api/api-8/) Observed: `ApiResponseTrait::errorResponse()` (`src/Controller/Api/ApiResponseTrait.php:84-97`) emits `error_code` only when a caller supplies one. Of ~115 `errorResponse()` call sites across `src/` and `modules/*/src/`, only the three signal-API 409s on `PipelineSignalController` supply a code (`PIPELINE_TERMINAL`, `INWARD_SIGNAL_ALREADY_PENDING`, `NO_ACTIVE_PAUSE`; pinned by `PipelineSignalRoutedPathTest::… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [30] summariseModule:langfuse:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Langfuse (machine name: langfuse) Reporting period: last 24h (2026-08-25T11:10:00+00:00 to 2026-08-26T11:10:00+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: Ivo Van Geertruyen (mr.baileys)". 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

                                                          Langfuse

                                                          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) --- ### [Resolve #3594090 "Trace is stored"](https://git.drupalcode.org/project/langfuse/-/merge_requests/4) State: opened | Author: Ivo Van Geertruyen (mr.baileys) | Branch: 3594090-trace-is-stored | 956 diff lines Description: Closes #3594090 --- COMMITS (24h) --- (none) ======================================================================== ## [31] 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] DeepChat block lost backwards compatibility for its old configuration in 1.5.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586668 [2] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [3] AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586667 [4] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [5] Add an #allow_duplicates option to the ai_tools_library element so the same tool can be selected more than once (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586689 [6] Add support embeddings via symfony/ai (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586495 [7] Introduce DDEV Contrib Config (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586688 [8] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [9] ai_test EchoProvider ToolsOutput type mismatch causes crashes when testing tool calls (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586656 [10] Update AI Observability docs and config form to reference Logger, not Extended Logger module (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586686 [11] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [12] DeepChat block loads the whole jQuery UI dialog stack on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586670 [13] HostnameFilter handling of HTML in JSON (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586677 [14] Load the DeepChat bundle on demand instead of on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586671 [15] Using image style when configuring automator with vision results in an error (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3555656 [16] Block deletion when the inference provider is referenced by one or more ai_platform config entities (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586590 [17] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [18] Guardrails: Make messages translatable (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586687 [19] LLM: Text / LLM: Text (simple) automators silently drop Base Field content when Base Field and Target Field are both long-text types (Basic input mode) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586659 [20] Issue #3586667: Add the $object parameter to ExecutableInterface::execute() implementations. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1960 [21] Issue #3586689: Add an #allow_duplicates option to the ai_tools_library element (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1964 [22] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [23] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [24] Issue #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [25] bug: #3586670 DeepChat block loads the whole jQuery UI dialog stack on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1946 [26] Issue #3586688: Add DDEV Contrib Config (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1963 [27] feat: #3586671 Load the DeepChat bundle on demand instead of on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1947 [28] #3586656: return tool calls as a flat ToolsFunctionOutput list from EchoProvider (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1943 [29] Issue #3586687: Guardrails: Make messages translatable (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1961 [30] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [31] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [32] Create documentation on how to create issues that are testable on DrupalForge (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3583362 [33] Issue #3583362: Add drupalforge-testable-issues skill (ai_initiative, MR) — https://git.drupalcode.org/project/ai_initiative/-/merge_requests/16 [34] [#3614660] Support the Responses API (ai_provider_azure, MR) — https://git.drupalcode.org/project/ai_provider_azure/-/merge_requests/33 [35] fix: Milvus connection failures fixes. (ai_vdb_provider_milvus, MR) — https://git.drupalcode.org/project/ai_vdb_provider_milvus/-/merge_requests/51 [36] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [37] Offer to help maintain (`robloach`) (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614501 [38] Issue #3476380: Add support for other image based widgets (ai_image_alt_text, MR) — https://git.drupalcode.org/project/ai_image_alt_text/-/merge_requests/3 [39] [DISCUSS] Make it possible to create tool instances (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3552038 [40] Better function calls for field agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586075 [41] Resolve #3552038 "Make it possible" (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/232 [42] Display Tool Description in Tool Explorer (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582950 [43] Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591987 [44] Add missing request body schemas to `openapi.yml` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3472584 [45] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [46] Canvas icon / logo for Project Browser and project page (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3545468 [47] canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591992 [48] Brand Kit color support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591838 [49] Require x-allowed-schemes again for wildcard contentMediaType props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591978 [50] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [51] [later phase] Make Component `audit` operation performant/scalable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522953 [52] Support translations tracking on Component "Audit" operation content listing when using asymmetric translations (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522198 [53] Allow passing a view mode in Headless SDK's fetch page API (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591990 [54] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [55] Fix Brand Kit font family and variant row layout (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591954 [56] Canvas AI: Require ai_agents ^1.3.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591776 [57] Canvas AI: Unify error handling in Canvas AI tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591958 [58] Canvas AI: Prevent the selected Tool from changing during a chat turn (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591952 [59] Canvas AI: Add Playwright coverage for the chat Tools dropdown (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591951 [60] Canvas breaks uploading files with spaces for the whole site (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591986 [61] Form ajax errors are swallowed by canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591989 [62] Prevent Canvas from caching blocks that throw exceptions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591845 [63] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [64] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [65] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [66] Issue #3472584: Add missing request body schemas to openapi.yml (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1562 [67] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [68] #3591838 style updates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1504 [69] 3591987: Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1557 [70] Draft: feat(CLI Tool,Headless): #3591981 Provide consistent Code Component metadata validation across CLI and Drupal" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1549 [71] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [72] fix: #3591967 Improve page variant backward compatibility for recipes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1559 [73] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [74] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [75] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [76] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [77] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [78] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [79] #3591838 preserve color format in addition to color scheme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1503 [80] Draft: #3591860: Added a button to close the right panel (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1548 [81] feat(Headless): Allow passing a view mode in Headless SDK's fetch page API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1560 [82] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [83] Require x-allowed-schemes for wildcard contentMediaType props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1546 [84] #3591838 Phase 3: Usage data + deletion (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1479 [85] Identify the document shape by standardization and drop scalar composites the media-source path covers (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1547 [86] Anchor the wildcard MIME type regex and compare file extensions case-insensitively (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1544 [87] #3591934: Added component name to settings form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1534 [88] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [89] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [90] #3591972: Add a Document prop type to the code editor (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1535 [91] Brand Kit font family and variant rows lost their layout (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1518 [92] Resolve "Canvas AI: Add a dev page builder agent and wire the placement tools" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1505 [93] Do not swallow BrokenPostRequestException (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1558 [94] Add a tool-less Drupal Canvas Agent that answers general questions and names... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1528 [95] fix: correctly validate file URIs with streams (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1556 [96] Split scope display weight from subscription scoring weight (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586438 [97] Add automated CCC tests with dummy echoai provider to test integration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586428 [98] Create ai_ckeditor context consumer plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586452 [99] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [100] Issue #3586438: Split scope display weight from subscription scoring weight (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/285 [101] Issue #3586346: Implement plugin-based generic context consumers and unified consumer configuration. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/283 [102] AI CKEditor (Standalone): Summarize generates summaries in a different language than the selected text (ai_ckeditor, Issue) — https://git.drupalcode.org/project/ai_ckeditor/-/work_items/3613735 [103] Bug when trying to "Remove action"? (field_widget_actions, Issue) — https://git.drupalcode.org/project/field_widget_actions/-/work_items/3578826 [104] Unmatched gateway outcome must be loud: default branch port or error Output, never a silent dead subtree (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592404 [105] R6.a: a node with no node-type anchor escapes the config-shape check (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592430 [106] PIPE-9: the full pipeline document publishes "now" as createdAt when no creation stamp is recorded (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592429 [107] LANG-28: a case-insensitive regex comparison lowercases the pattern itself (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592428 [108] LANG-21 / LANG-29: DataMapper catches only RuntimeException, so an engine's other throwables escape without the port name or an error-edge route (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592427 [109] DYN-3: a dynamic port name with a trailing newline passes the identifier pattern (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592426 [110] ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592425 [111] CMP-2: Compiling a pre-built workflow DTO skips node-metadata re-enrichment (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592424 [112] MAN-7: An empty object default is dropped from the published contract; the spec keeps it (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592423 [113] EXPO-11: An output schema with no declared properties bypasses exposure stripping entirely (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592422 [114] STORE-9: A bundle import refused for its flow id answers 422 with an empty `details` list (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592421 [115] API-7: A malformed `search` query parameter answers the generic 500 instead of a 400 (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592419 [116] API-8: Most API refusals still carry no `error_code` (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592420 [117] Resolve #3594090 "Trace is stored" (langfuse, MR) — https://git.drupalcode.org/project/langfuse/-/merge_requests/4 --- MODULE SUMMARIES ---

                                                              AI (Artificial Intelligence)

                                                              The AI module continued work toward its 1.5.0 release this period, with progress across compatibility improvements, performance optimization, and foundational feature work. Activity focused on refining recent architectural changes and preparing the release for broader adoption.

                                                              A quality assurance plan is being developed for the 1.5.0 release candidate, covering new installations, upgrades from 1.4.x, and integration with Drupal CMS. Separately, work began to support embeddings functionality through the Symfony AI library, expanding the module's capabilities for vector-based operations.

                                                              Several refinements addressed recent changes to the chat system. A backwards compatibility issue affecting the DeepChat block configuration was identified, where sites importing existing settings would fail schema validation. Work also continued on clarifying how prompts behave in automators: when a template does not explicitly reference content placeholders, the base field content is not automatically included—this is by design, but the interface now makes it clearer.

                                                              Performance work centered on the DeepChat chatbot. Two improvements were proposed: loading the chat widget bundle only when a visitor opens the chat rather than on every page load, and removing unnecessary jQuery UI dialog dependencies that add weight to every page where the block appears.

                                                              Additional housekeeping included fixes for deprecation warnings, translatable guardrails messages, and improvements to the developer experience with DDEV configuration. A new option for the tools library element will allow the same tool to be selected multiple times with different configurations, supporting more flexible agent workflows.

                                                              How can I help on this project?

                                                              • Allocate resources to execute the 1.5.0 QA plan once it is finalized, particularly for manual testing of upgrade paths and Drupal CMS integration scenarios.
                                                              • Prioritize a decision on backwards compatibility handling for existing DeepChat block configurations to unblock the 1.5.0 release.

                                                              Contributors: eduardo morales alberti (EduardoMoralesAlberti), Giorgio Alfredo Pagano (sjpagan), Jan Kellermann (werk21), Joshua Fernandes (joshua1234511), Konstantine Kirkitadze (kotekirkitadze), Ricardo Castañeda (cadence96), Rob Loach (robloach), Scott Euser (scotteuser), Shivam Sen (shivamsen_12579), Tekla Aivazashvili (aivazashvilit)

                                                              ---

                                                              Drupal AI Initiative

                                                              Activity this period focused on documentation and testing infrastructure. Work continued on the disclosure module documentation, which will help site builders understand how to configure disclosure settings for AI-generated content and maintain compliance with regulatory requirements. This documentation is being prepared for the upcoming alpha release and will cover both practical implementation steps and the regulatory context behind the disclosure requirements.

                                                              Separately, development progressed on documentation for creating testable issues on DrupalForge. A merge request was opened to address a testing challenge: many issues involve multiple modules working together, and reviewers need clear guidance on how to set up test environments that include development versions of all required components. This will streamline the review process and reduce friction for contributors.

                                                              No code was merged during this period. Both documentation efforts remain in progress and will improve the experience for site builders implementing AI features and for contributors helping to advance the project.

                                                              How can I help on this project?

                                                              • Prioritize reviewer availability to evaluate the pending DrupalForge testing documentation, which will accelerate contribution velocity across multiple AI modules.
                                                              • Consider stakeholder engagement around the disclosure module's regulatory approach to ensure alignment with organizational compliance requirements before the alpha release.
                                                              Contributors: Abhinav Jha (ajabhinavjha30) ---

                                                              Microsoft Azure AI

                                                              Work has begun on expanding the module's capabilities to support an additional type of content interaction. A [#3614660] Support the Responses API merge request was opened, representing a significant expansion that will enable new use cases for organizations using Azure's AI services within their Drupal applications. This work is currently under review and has not yet been integrated.

                                                              No other development activity occurred during this period. The module continues to be in active development as new functionality is added to broaden its feature set.

                                                              How can I help on this project?

                                                              • Ensure development resources are available to review and test the pending merge request to maintain development momentum.
                                                              • Clarify strategic priorities for Azure AI integration to help the team sequence future enhancements effectively.

                                                              Contributors: Joshua Fernandes (joshua1234511)

                                                              ---

                                                              Milvus VDB Provider

                                                              A merge request addressing Milvus connection failures fixes was opened during this period. This work aims to resolve issues preventing the system from establishing reliable connections to the Milvus database, which would otherwise block users from storing and retrieving vector data. The fix spans nearly 500 lines of changes, indicating a comprehensive approach to improving connection stability. Once merged and tested, this should reduce service interruptions and improve the overall reliability of the integration.

                                                              The module continues to mature as connection stability issues are identified and addressed. No commits were merged during this period, and the connection fix remains under review.

                                                              How can I help on this project?

                                                              • Ensure the team has sufficient testing resources or environments to validate the connection fixes before release.
                                                              • Support prioritization of code review to unblock the merge of stability improvements.
                                                              Contributors: Remco Hoeneveld (RemcoHoeneveld) ---

                                                              Postgres VDB Provider

                                                              The Postgres VDB Provider enables sites to use PostgreSQL as a vector database for AI-powered search and content recommendations. This module is part of the broader AI initiative to help Drupal sites deliver smarter, faster search experiences.

                                                              Two issues saw activity this period. Work continues on Add batch embeddings, which will allow the system to process multiple content chunks simultaneously rather than one at a time, significantly reducing the time needed to index content for AI-powered features. This aligns the provider with a broader performance improvement across the AI module suite.

                                                              Separately, a maintainer offer to help maintain was logged, indicating growing community interest in supporting the module's development and coordination among multiple contributors. This represents positive momentum for the project's sustainability.

                                                              No code was merged this period. The batch embeddings work has an active merge request under review.

                                                              How can I help on this project?

                                                              • Facilitate maintainer access decisions to capitalize on new volunteer capacity and accelerate delivery of pending improvements.
                                                              • Ensure the team has access to PostgreSQL infrastructure for testing performance improvements as batch embedding capabilities are finalized.
                                                              ---

                                                              AI Image Alt Text

                                                              A merge request was opened to expand the module's compatibility with additional image-based editing interfaces. Currently, the module's automated alt text generation works with a limited set of image editing tools. This expansion would allow more content creators across different workflows to benefit from AI-generated alternative text descriptions, reducing manual effort and improving accessibility compliance across a wider range of content types.

                                                              The work also includes optimizations to reduce unnecessary code loading when the AI alt text features are not actively being used on a page, which should improve overall site performance.

                                                              As an alpha-stage project, this development work is progressing normally. The module continues to expand its capabilities while refining its technical foundation.

                                                              How can I help on this project?

                                                              • Identify content teams or sites that could pilot the expanded widget support once merged, providing real-world feedback on accessibility improvements.
                                                              • Allocate testing resources to validate the performance optimizations across different content workflows before wider rollout.

                                                              Contributors: codebymikey

                                                              ---

                                                              AI Agents

                                                              Development activity this period focused on two areas aimed at improving the module's flexibility and reliability. Work is underway to enable the creation of multiple tool instances within a single agent. Currently, users are limited to one tool per agent, which restricts functionality when working with generic or reusable tools. A merge request addressing tool instances was opened, which also introduces a proper configuration schema to improve consistency. This change will allow more flexible agent configurations and better support complex workflows.

                                                              Separately, improvements are being made to the field agent's function calls. Testing revealed that more advanced reasoning agents can trigger errors by attempting to load multiple configuration types simultaneously, or by requesting them in the wrong sequence. The Better function calls for field agent issue was updated to address these reliability concerns, ensuring the agent can handle more verbose reasoning patterns without failing.

                                                              How can I help on this project?

                                                              • Prioritize testing resources for the tool instances feature once the merge request is ready for review, as this unlocks significant new capabilities.
                                                              • Ensure the team has access to diverse AI models for testing reasoning agent behaviors under real-world conditions.

                                                              Contributors: Nicolae Procopan (thebumikgmail.com)

                                                              ---

                                                              Tool API

                                                              Activity this period focused on planning enhancements to the user experience. A new feature request was opened to Display Tool Description in Tool Explorer, which would help users better understand their options when browsing available tools. The proposal has been accepted and tagged as a quick win, indicating it should be straightforward to implement once work begins.

                                                              No code was merged or committed during this period. The module continues in active development with feature refinement underway.

                                                              How can I help on this project?

                                                              • Allocate developer time to implement the accepted Tool Explorer enhancement, which is ready to proceed and flagged as low-effort.
                                                              • Clarify product priorities to help the team decide which user-facing improvements should be tackled next.
                                                              ---

                                                              Drupal Canvas

                                                              Canvas made progress on several fronts over the past day, focusing on brand management, backward compatibility, and bug fixes affecting media uploads and SVG handling.

                                                              The Brand Kit color support work advanced significantly, with three merge requests integrated to deliver color preservation features and usage tracking. These changes enable content teams to define and manage brand color palettes more reliably. Layout fixes for the Brand Kit font family and variant rows were also completed, resolving visual issues in the brand management panel.

                                                              A fix was merged to improve page variant backward compatibility for recipes, ensuring that sites installed from templates continue to display content correctly after Canvas updates. This reduces disruption for teams using site templates and avoids the need for immediate recipe rewrites.

                                                              Two active issues remain under review. A media library bug affecting SVG files has a merge request ready for testing; the issue prevents editors from removing SVG assets once selected in component forms. Separately, a proposed fix for file upload failures when filenames contain spaces is under consideration; this constraint currently blocks uploads across the entire site, not just Canvas-managed content.

                                                              How can I help on this project?

                                                              • Prioritize reviewer time for the SVG removal and file upload bug fixes to restore expected media handling behavior for content teams.
                                                              • Allocate design resources for the brand management and user interface polish work currently in draft or awaiting final direction.

                                                              Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm) [3], Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Georgi Ivanov (givanov), Harjot Singh (harjot.singh), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii) [1], Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wolfgang Ziegler (fago), wotnak [1]

                                                              ---

                                                              Context Control Center (CCC)

                                                              Development work this period focused on preparing the module's architecture for broader use beyond AI agents. Two foundational improvements are in progress that will enable the Context Control Center to deliver contextual information to more parts of Drupal applications.

                                                              Work continued on implementing plugin-based generic context consumers, which will allow any feature in Drupal to request and receive context through a unified system, not just AI agents. This architectural shift will make the module more flexible and reusable across different use cases.

                                                              A new improvement was initiated to split scope display weight from subscription scoring weight. Currently, when administrators reorder context scopes in the interface, it unintentionally changes which context items take priority in scoring decisions. This fix will separate the visual ordering from the functional ranking, preventing unexpected behavior when the interface is reorganized.

                                                              Testing capabilities were enhanced with automated integration tests that verify context injection works correctly without requiring a live AI model. This reduces manual verification effort before releases.

                                                              Planning also began for CKEditor integration, which remains blocked pending completion of the consumer plugin architecture.

                                                              How can I help on this project?

                                                              • Prioritize review cycles for the large consumer plugin refactor to accelerate the beta release timeline.
                                                              • Clarify requirements for CKEditor integration once the blocking architectural work is complete.

                                                              Contributors: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)

                                                              ---

                                                              AI CKEditor

                                                              Activity this period focused on issue tracking and project organization. A language behavior issue was migrated into the AI CKEditor project from the broader AI initiative. The summarize feature generating summaries in a different language than the selected text has been formally documented and is now being tracked in the correct repository. This issue affects the summarize function, where users experience summaries being produced in an unexpected language rather than matching the language of the content they selected.

                                                              No merge requests were completed and no code changes were committed during this period. The module remains in active development as part of the AI Initiative Sprint.

                                                              How can I help on this project?

                                                              • Prioritize resources to investigate and resolve the language inconsistency in the summarize feature, as it directly impacts user experience and content accuracy.
                                                              • Clarify product requirements around multilingual content handling to guide technical decisions and prevent similar issues.
                                                              ---

                                                              Field Widget Actions

                                                              No development activity was recorded during this period. A new issue was opened regarding the Bug when trying to "Remove action"?, where users are unable to remove previously configured actions from field settings. This affects the ability to modify or reverse configuration decisions once actions have been added to a field, which could impact workflow flexibility for site administrators.

                                                              The module remains in active use with version 1.4.1, and the issue is currently unassigned and awaiting investigation. As this is an early-stage module, open issues are part of the normal development process.

                                                              How can I help on this project?

                                                              • Allocate developer resources to investigate and resolve the configuration removal issue, which affects day-to-day site administration workflows.
                                                              • Consider prioritizing bug fixes if this module is part of critical content management processes within your organization.
                                                              ---

                                                              FlowDrop

                                                              Over the past 24 hours, thirteen detailed conformance issues were opened and documented as part of a systematic specification audit. This work focuses on ensuring that FlowDrop's runtime behavior matches its published specification across workflow validation, API behavior, data processing, and orchestration. The issues range from how the system handles misconfigured workflow gateways to inconsistencies in error responses and data exposure rules.

                                                              Key areas identified for alignment include: ensuring that gateway failures produce clear errors rather than silent execution paths (Unmatched gateway outcome must be loud: default branch port or error Output, never a silent subtree), preventing double-execution of asynchronous workflows (ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice), and standardizing API error responses with machine-readable codes (API-8: Most API refusals still carry no error_code). Several issues concern data validation edge cases, such as schema enforcement and port naming rules.

                                                              No merge requests or code changes were completed during this period. The activity represents diagnostic groundwork that will inform upcoming fixes to improve reliability and specification compliance.

                                                              How can I help on this project?

                                                              • Prioritize which specification conformance issues should be addressed first, balancing user-facing impact with technical dependencies.
                                                              • Ensure engineering capacity is allocated to resolve the atomic orchestration and silent gateway failure issues, which carry operational risk.
                                                              ---

                                                              Langfuse

                                                              A new merge request titled Resolve #3594090 "Trace is stored" was opened during this period, representing nearly 1,000 lines of changes. This work focuses on storing trace data within the module. The implementation is now awaiting review before it can be integrated into the project. Once merged, this will expand the module's capability to capture and persist trace information, which is foundational for tracking and analyzing system behavior.

                                                              No other issues were updated or commits pushed during this reporting period. The module continues its development trajectory with this storage capability representing a key building block for future functionality.

                                                              How can I help on this project?

                                                              • Ensure the team has access to technical reviewers who can evaluate the open merge request and provide feedback to move it toward integration.
                                                              • Clarify the project's roadmap priorities to help contributors focus effort on the most strategically important features after this storage work is completed.

                                                              Contributors: Ivo Van Geertruyen (mr.baileys)

                                                              ======================================================================== ## [32] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 0 Judge flags: 4 ======================================================================== ## [33] 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] DeepChat block lost backwards compatibility for its old configuration in 1.5.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586668 [2] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [3] AiFunctionCall plugins trigger ExecutableInterface::execute() deprecation notice (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586667 [4] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [5] Add an #allow_duplicates option to the ai_tools_library element so the same tool can be selected more than once (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586689 [6] Add support embeddings via symfony/ai (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586495 [7] Introduce DDEV Contrib Config (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586688 [8] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [9] ai_test EchoProvider ToolsOutput type mismatch causes crashes when testing tool calls (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586656 [10] Update AI Observability docs and config form to reference Logger, not Extended Logger module (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586686 [11] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [12] DeepChat block loads the whole jQuery UI dialog stack on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586670 [13] HostnameFilter handling of HTML in JSON (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586677 [14] Load the DeepChat bundle on demand instead of on every page (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586671 [15] Using image style when configuring automator with vision results in an error (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3555656 [16] Block deletion when the inference provider is referenced by one or more ai_platform config entities (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586590 [17] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [18] Guardrails: Make messages translatable (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586687 [19] LLM: Text / LLM: Text (simple) automators silently drop Base Field content when Base Field and Target Field are both long-text types (Basic input mode) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586659 [20] Issue #3586667: Add the $object parameter to ExecutableInterface::execute() implementations. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1960 [21] Issue #3586689: Add an #allow_duplicates option to the ai_tools_library element (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1964 [22] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [23] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [24] Issue #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [25] bug: #3586670 DeepChat block loads the whole jQuery UI dialog stack on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1946 [26] Issue #3586688: Add DDEV Contrib Config (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1963 [27] feat: #3586671 Load the DeepChat bundle on demand instead of on every page (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1947 [28] #3586656: return tool calls as a flat ToolsFunctionOutput list from EchoProvider (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1943 [29] Issue #3586687: Guardrails: Make messages translatable (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1961 [30] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [31] ai_disclosure: Documentation - module docs and recorder API integrator guide (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586651 [32] Create documentation on how to create issues that are testable on DrupalForge (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3583362 [33] Issue #3583362: Add drupalforge-testable-issues skill (ai_initiative, MR) — https://git.drupalcode.org/project/ai_initiative/-/merge_requests/16 [34] [#3614660] Support the Responses API (ai_provider_azure, MR) — https://git.drupalcode.org/project/ai_provider_azure/-/merge_requests/33 [35] fix: Milvus connection failures fixes. (ai_vdb_provider_milvus, MR) — https://git.drupalcode.org/project/ai_vdb_provider_milvus/-/merge_requests/51 [36] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [37] Offer to help maintain (`robloach`) (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3614501 [38] Issue #3476380: Add support for other image based widgets (ai_image_alt_text, MR) — https://git.drupalcode.org/project/ai_image_alt_text/-/merge_requests/3 [39] [DISCUSS] Make it possible to create tool instances (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3552038 [40] Better function calls for field agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586075 [41] Resolve #3552038 "Make it possible" (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/232 [42] Display Tool Description in Tool Explorer (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582950 [43] Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591987 [44] Add missing request body schemas to `openapi.yml` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3472584 [45] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [46] Canvas icon / logo for Project Browser and project page (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3545468 [47] canvas_ai.component_description.settings schema rejects custom ComponentSource plugin IDs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591992 [48] Brand Kit color support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591838 [49] Require x-allowed-schemes again for wildcard contentMediaType props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591978 [50] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [51] [later phase] Make Component `audit` operation performant/scalable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522953 [52] Support translations tracking on Component "Audit" operation content listing when using asymmetric translations (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3522198 [53] Allow passing a view mode in Headless SDK's fetch page API (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591990 [54] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [55] Fix Brand Kit font family and variant row layout (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591954 [56] Canvas AI: Require ai_agents ^1.3.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591776 [57] Canvas AI: Unify error handling in Canvas AI tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591958 [58] Canvas AI: Prevent the selected Tool from changing during a chat turn (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591952 [59] Canvas AI: Add Playwright coverage for the chat Tools dropdown (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591951 [60] Canvas breaks uploading files with spaces for the whole site (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591986 [61] Form ajax errors are swallowed by canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591989 [62] Prevent Canvas from caching blocks that throw exceptions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591845 [63] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [64] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [65] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [66] Issue #3472584: Add missing request body schemas to openapi.yml (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1562 [67] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [68] #3591838 style updates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1504 [69] 3591987: Media library remove button is not visible in Canvas component form when selected media is SVG (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1557 [70] Draft: feat(CLI Tool,Headless): #3591981 Provide consistent Code Component metadata validation across CLI and Drupal" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1549 [71] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [72] fix: #3591967 Improve page variant backward compatibility for recipes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1559 [73] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [74] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [75] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [76] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [77] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [78] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [79] #3591838 preserve color format in addition to color scheme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1503 [80] Draft: #3591860: Added a button to close the right panel (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1548 [81] feat(Headless): Allow passing a view mode in Headless SDK's fetch page API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1560 [82] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [83] Require x-allowed-schemes for wildcard contentMediaType props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1546 [84] #3591838 Phase 3: Usage data + deletion (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1479 [85] Identify the document shape by standardization and drop scalar composites the media-source path covers (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1547 [86] Anchor the wildcard MIME type regex and compare file extensions case-insensitively (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1544 [87] #3591934: Added component name to settings form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1534 [88] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [89] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [90] #3591972: Add a Document prop type to the code editor (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1535 [91] Brand Kit font family and variant rows lost their layout (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1518 [92] Resolve "Canvas AI: Add a dev page builder agent and wire the placement tools" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1505 [93] Do not swallow BrokenPostRequestException (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1558 [94] Add a tool-less Drupal Canvas Agent that answers general questions and names... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1528 [95] fix: correctly validate file URIs with streams (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1556 [96] Split scope display weight from subscription scoring weight (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586438 [97] Add automated CCC tests with dummy echoai provider to test integration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586428 [98] Create ai_ckeditor context consumer plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586452 [99] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [100] Issue #3586438: Split scope display weight from subscription scoring weight (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/285 [101] Issue #3586346: Implement plugin-based generic context consumers and unified consumer configuration. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/283 [102] AI CKEditor (Standalone): Summarize generates summaries in a different language than the selected text (ai_ckeditor, Issue) — https://git.drupalcode.org/project/ai_ckeditor/-/work_items/3613735 [103] Bug when trying to "Remove action"? (field_widget_actions, Issue) — https://git.drupalcode.org/project/field_widget_actions/-/work_items/3578826 [104] Unmatched gateway outcome must be loud: default branch port or error Output, never a silent dead subtree (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592404 [105] R6.a: a node with no node-type anchor escapes the config-shape check (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592430 [106] PIPE-9: the full pipeline document publishes "now" as createdAt when no creation stamp is recorded (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592429 [107] LANG-28: a case-insensitive regex comparison lowercases the pattern itself (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592428 [108] LANG-21 / LANG-29: DataMapper catches only RuntimeException, so an engine's other throwables escape without the port name or an error-edge route (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592427 [109] DYN-3: a dynamic port name with a trailing newline passes the identifier pattern (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592426 [110] ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592425 [111] CMP-2: Compiling a pre-built workflow DTO skips node-metadata re-enrichment (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592424 [112] MAN-7: An empty object default is dropped from the published contract; the spec keeps it (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592423 [113] EXPO-11: An output schema with no declared properties bypasses exposure stripping entirely (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592422 [114] STORE-9: A bundle import refused for its flow id answers 422 with an empty `details` list (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592421 [115] API-7: A malformed `search` query parameter answers the generic 500 instead of a 400 (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592419 [116] API-8: Most API refusals still carry no `error_code` (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592420 [117] Resolve #3594090 "Trace is stored" (langfuse, MR) — https://git.drupalcode.org/project/langfuse/-/merge_requests/4 --- TODAY'S MODULE SUMMARIES ---

                                                                AI (Artificial Intelligence)

                                                                The AI module continued work toward its 1.5.0 release this period, with progress across compatibility improvements, performance optimization, and foundational feature work. Activity focused on refining recent architectural changes and preparing the release for broader adoption.

                                                                A quality assurance plan is being developed for the 1.5.0 release candidate, covering new installations, upgrades from 1.4.x, and integration with Drupal CMS. Separately, work began to support embeddings functionality through the Symfony AI library, expanding the module's capabilities for vector-based operations.

                                                                Several refinements addressed recent changes to the chat system. A backwards compatibility issue affecting the DeepChat block configuration was identified, where sites importing existing settings would fail schema validation. Work also continued on clarifying how prompts behave in automators: when a template does not explicitly reference content placeholders, the base field content is not automatically included—this is by design, but the interface now makes it clearer.

                                                                Performance work centered on the DeepChat chatbot. Two improvements were proposed: loading the chat widget bundle only when a visitor opens the chat rather than on every page load, and removing unnecessary jQuery UI dialog dependencies that add weight to every page where the block appears.

                                                                Additional housekeeping included fixes for deprecation warnings, translatable guardrails messages, and improvements to the developer experience with DDEV configuration. A new option for the tools library element will allow the same tool to be selected multiple times with different configurations, supporting more flexible agent workflows.

                                                                How can I help on this project?

                                                                • Allocate resources to execute the 1.5.0 QA plan once it is finalized, particularly for manual testing of upgrade paths and Drupal CMS integration scenarios.
                                                                • Prioritize a decision on backwards compatibility handling for existing DeepChat block configurations to unblock the 1.5.0 release.

                                                                Contributors: eduardo morales alberti (EduardoMoralesAlberti), Giorgio Alfredo Pagano (sjpagan), Jan Kellermann (werk21), Joshua Fernandes (joshua1234511), Konstantine Kirkitadze (kotekirkitadze), Ricardo Castañeda (cadence96), Rob Loach (robloach), Scott Euser (scotteuser), Shivam Sen (shivamsen_12579), Tekla Aivazashvili (aivazashvilit)

                                                                ---

                                                                Drupal AI Initiative

                                                                Activity this period focused on documentation and testing infrastructure. Work continued on the disclosure module documentation, which will help site builders understand how to configure disclosure settings for AI-generated content and maintain compliance with regulatory requirements. This documentation is being prepared for the upcoming alpha release and will cover both practical implementation steps and the regulatory context behind the disclosure requirements.

                                                                Separately, development progressed on documentation for creating testable issues on DrupalForge. A merge request was opened to address a testing challenge: many issues involve multiple modules working together, and reviewers need clear guidance on how to set up test environments that include development versions of all required components. This will streamline the review process and reduce friction for contributors.

                                                                No code was merged during this period. Both documentation efforts remain in progress and will improve the experience for site builders implementing AI features and for contributors helping to advance the project.

                                                                How can I help on this project?

                                                                • Prioritize reviewer availability to evaluate the pending DrupalForge testing documentation, which will accelerate contribution velocity across multiple AI modules.
                                                                • Consider stakeholder engagement around the disclosure module's regulatory approach to ensure alignment with organizational compliance requirements before the alpha release.
                                                                Contributors: Abhinav Jha (ajabhinavjha30) ---

                                                                Microsoft Azure AI

                                                                Work has begun on expanding the module's capabilities to support an additional type of content interaction. A [#3614660] Support the Responses API merge request was opened, representing a significant expansion that will enable new use cases for organizations using Azure's AI services within their Drupal applications. This work is currently under review and has not yet been integrated.

                                                                No other development activity occurred during this period. The module continues to be in active development as new functionality is added to broaden its feature set.

                                                                How can I help on this project?

                                                                • Ensure development resources are available to review and test the pending merge request to maintain development momentum.
                                                                • Clarify strategic priorities for Azure AI integration to help the team sequence future enhancements effectively.

                                                                Contributors: Joshua Fernandes (joshua1234511)

                                                                ---

                                                                Milvus VDB Provider

                                                                A merge request addressing Milvus connection failures fixes was opened during this period. This work aims to resolve issues preventing the system from establishing reliable connections to the Milvus database, which would otherwise block users from storing and retrieving vector data. The fix spans nearly 500 lines of changes, indicating a comprehensive approach to improving connection stability. Once merged and tested, this should reduce service interruptions and improve the overall reliability of the integration.

                                                                The module continues to mature as connection stability issues are identified and addressed. No commits were merged during this period, and the connection fix remains under review.

                                                                How can I help on this project?

                                                                • Ensure the team has sufficient testing resources or environments to validate the connection fixes before release.
                                                                • Support prioritization of code review to unblock the merge of stability improvements.
                                                                Contributors: Remco Hoeneveld (RemcoHoeneveld) ---

                                                                Postgres VDB Provider

                                                                The Postgres VDB Provider enables sites to use PostgreSQL as a vector database for AI-powered search and content recommendations. This module is part of the broader AI initiative to help Drupal sites deliver smarter, faster search experiences.

                                                                Two issues saw activity this period. Work continues on Add batch embeddings, which will allow the system to process multiple content chunks simultaneously rather than one at a time, significantly reducing the time needed to index content for AI-powered features. This aligns the provider with a broader performance improvement across the AI module suite.

                                                                Separately, a maintainer offer to help maintain was logged, indicating growing community interest in supporting the module's development and coordination among multiple contributors. This represents positive momentum for the project's sustainability.

                                                                No code was merged this period. The batch embeddings work has an active merge request under review.

                                                                How can I help on this project?

                                                                • Facilitate maintainer access decisions to capitalize on new volunteer capacity and accelerate delivery of pending improvements.
                                                                • Ensure the team has access to PostgreSQL infrastructure for testing performance improvements as batch embedding capabilities are finalized.
                                                                ---

                                                                AI Image Alt Text

                                                                A merge request was opened to expand the module's compatibility with additional image-based editing interfaces. Currently, the module's automated alt text generation works with a limited set of image editing tools. This expansion would allow more content creators across different workflows to benefit from AI-generated alternative text descriptions, reducing manual effort and improving accessibility compliance across a wider range of content types.

                                                                The work also includes optimizations to reduce unnecessary code loading when the AI alt text features are not actively being used on a page, which should improve overall site performance.

                                                                As an alpha-stage project, this development work is progressing normally. The module continues to expand its capabilities while refining its technical foundation.

                                                                How can I help on this project?

                                                                • Identify content teams or sites that could pilot the expanded widget support once merged, providing real-world feedback on accessibility improvements.
                                                                • Allocate testing resources to validate the performance optimizations across different content workflows before wider rollout.

                                                                Contributors: codebymikey

                                                                ---

                                                                AI Agents

                                                                Development activity this period focused on two areas aimed at improving the module's flexibility and reliability. Work is underway to enable the creation of multiple tool instances within a single agent. Currently, users are limited to one tool per agent, which restricts functionality when working with generic or reusable tools. A merge request addressing tool instances was opened, which also introduces a proper configuration schema to improve consistency. This change will allow more flexible agent configurations and better support complex workflows.

                                                                Separately, improvements are being made to the field agent's function calls. Testing revealed that more advanced reasoning agents can trigger errors by attempting to load multiple configuration types simultaneously, or by requesting them in the wrong sequence. The Better function calls for field agent issue was updated to address these reliability concerns, ensuring the agent can handle more verbose reasoning patterns without failing.

                                                                How can I help on this project?

                                                                • Prioritize testing resources for the tool instances feature once the merge request is ready for review, as this unlocks significant new capabilities.
                                                                • Ensure the team has access to diverse AI models for testing reasoning agent behaviors under real-world conditions.

                                                                Contributors: Nicolae Procopan (thebumikgmail.com)

                                                                ---

                                                                Tool API

                                                                Activity this period focused on planning enhancements to the user experience. A new feature request was opened to Display Tool Description in Tool Explorer, which would help users better understand their options when browsing available tools. The proposal has been accepted and tagged as a quick win, indicating it should be straightforward to implement once work begins.

                                                                No code was merged or committed during this period. The module continues in active development with feature refinement underway.

                                                                How can I help on this project?

                                                                • Allocate developer time to implement the accepted Tool Explorer enhancement, which is ready to proceed and flagged as low-effort.
                                                                • Clarify product priorities to help the team decide which user-facing improvements should be tackled next.
                                                                ---

                                                                Drupal Canvas

                                                                Canvas made progress on several fronts over the past day, focusing on brand management, backward compatibility, and bug fixes affecting media uploads and SVG handling.

                                                                The Brand Kit color support work advanced significantly, with three merge requests integrated to deliver color preservation features and usage tracking. These changes enable content teams to define and manage brand color palettes more reliably. Layout fixes for the Brand Kit font family and variant rows were also completed, resolving visual issues in the brand management panel.

                                                                A fix was merged to improve page variant backward compatibility for recipes, ensuring that sites installed from templates continue to display content correctly after Canvas updates. This reduces disruption for teams using site templates and avoids the need for immediate recipe rewrites.

                                                                Two active issues remain under review. A media library bug affecting SVG files has a merge request ready for testing; the issue prevents editors from removing SVG assets once selected in component forms. Separately, a proposed fix for file upload failures when filenames contain spaces is under consideration; this constraint currently blocks uploads across the entire site, not just Canvas-managed content.

                                                                How can I help on this project?

                                                                • Prioritize reviewer time for the SVG removal and file upload bug fixes to restore expected media handling behavior for content teams.
                                                                • Allocate design resources for the brand management and user interface polish work currently in draft or awaiting final direction.

                                                                Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm) [3], Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Georgi Ivanov (givanov), Harjot Singh (harjot.singh), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Konstantine Kirkitadze (kotekirkitadze), Lauri Timmanee (lauriii) [1], Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wolfgang Ziegler (fago), wotnak [1]

                                                                ---

                                                                Context Control Center (CCC)

                                                                Development work this period focused on preparing the module's architecture for broader use beyond AI agents. Two foundational improvements are in progress that will enable the Context Control Center to deliver contextual information to more parts of Drupal applications.

                                                                Work continued on implementing plugin-based generic context consumers, which will allow any feature in Drupal to request and receive context through a unified system, not just AI agents. This architectural shift will make the module more flexible and reusable across different use cases.

                                                                A new improvement was initiated to split scope display weight from subscription scoring weight. Currently, when administrators reorder context scopes in the interface, it unintentionally changes which context items take priority in scoring decisions. This fix will separate the visual ordering from the functional ranking, preventing unexpected behavior when the interface is reorganized.

                                                                Testing capabilities were enhanced with automated integration tests that verify context injection works correctly without requiring a live AI model. This reduces manual verification effort before releases.

                                                                Planning also began for CKEditor integration, which remains blocked pending completion of the consumer plugin architecture.

                                                                How can I help on this project?

                                                                • Prioritize review cycles for the large consumer plugin refactor to accelerate the beta release timeline.
                                                                • Clarify requirements for CKEditor integration once the blocking architectural work is complete.

                                                                Contributors: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)

                                                                ---

                                                                AI CKEditor

                                                                Activity this period focused on issue tracking and project organization. A language behavior issue was migrated into the AI CKEditor project from the broader AI initiative. The summarize feature generating summaries in a different language than the selected text has been formally documented and is now being tracked in the correct repository. This issue affects the summarize function, where users experience summaries being produced in an unexpected language rather than matching the language of the content they selected.

                                                                No merge requests were completed and no code changes were committed during this period. The module remains in active development as part of the AI Initiative Sprint.

                                                                How can I help on this project?

                                                                • Prioritize resources to investigate and resolve the language inconsistency in the summarize feature, as it directly impacts user experience and content accuracy.
                                                                • Clarify product requirements around multilingual content handling to guide technical decisions and prevent similar issues.
                                                                ---

                                                                Field Widget Actions

                                                                No development activity was recorded during this period. A new issue was opened regarding the Bug when trying to "Remove action"?, where users are unable to remove previously configured actions from field settings. This affects the ability to modify or reverse configuration decisions once actions have been added to a field, which could impact workflow flexibility for site administrators.

                                                                The module remains in active use with version 1.4.1, and the issue is currently unassigned and awaiting investigation. As this is an early-stage module, open issues are part of the normal development process.

                                                                How can I help on this project?

                                                                • Allocate developer resources to investigate and resolve the configuration removal issue, which affects day-to-day site administration workflows.
                                                                • Consider prioritizing bug fixes if this module is part of critical content management processes within your organization.
                                                                ---

                                                                FlowDrop

                                                                Over the past 24 hours, thirteen detailed conformance issues were opened and documented as part of a systematic specification audit. This work focuses on ensuring that FlowDrop's runtime behavior matches its published specification across workflow validation, API behavior, data processing, and orchestration. The issues range from how the system handles misconfigured workflow gateways to inconsistencies in error responses and data exposure rules.

                                                                Key areas identified for alignment include: ensuring that gateway failures produce clear errors rather than silent execution paths (Unmatched gateway outcome must be loud: default branch port or error Output, never a silent subtree), preventing double-execution of asynchronous workflows (ORC-14: The asynchronous handover is not atomic — the same run can be queued and claimed twice), and standardizing API error responses with machine-readable codes (API-8: Most API refusals still carry no error_code). Several issues concern data validation edge cases, such as schema enforcement and port naming rules.

                                                                No merge requests or code changes were completed during this period. The activity represents diagnostic groundwork that will inform upcoming fixes to improve reliability and specification compliance.

                                                                How can I help on this project?

                                                                • Prioritize which specification conformance issues should be addressed first, balancing user-facing impact with technical dependencies.
                                                                • Ensure engineering capacity is allocated to resolve the atomic orchestration and silent gateway failure issues, which carry operational risk.
                                                                ---

                                                                Langfuse

                                                                A new merge request titled Resolve #3594090 "Trace is stored" was opened during this period, representing nearly 1,000 lines of changes. This work focuses on storing trace data within the module. The implementation is now awaiting review before it can be integrated into the project. Once merged, this will expand the module's capability to capture and persist trace information, which is foundational for tracking and analyzing system behavior.

                                                                No other issues were updated or commits pushed during this reporting period. The module continues its development trajectory with this storage capability representing a key building block for future functionality.

                                                                How can I help on this project?

                                                                • Ensure the team has access to technical reviewers who can evaluate the open merge request and provide feedback to move it toward integration.
                                                                • Clarify the project's roadmap priorities to help contributors focus effort on the most strategically important features after this storage work is completed.

                                                                Contributors: Ivo Van Geertruyen (mr.baileys)

                                                                ======================================================================== ## [34] factcheck:capabilities:executive ======================================================================== Layer-1 corrections: 1 Judge flags: 0