# Prompt log — 24h 2026-08-27 ======================================================================== ## [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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Ann Mary Sruthy (annmarysruthy), Konstantine Kirkitadze (kotekirkitadze), Miguel Guerreiro (gueguerreiro), Rob Loach (robloach), Scott Euser (scotteuser)". 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). ### [Separate AI Chatbot documentation from AI Assistant API](https://git.drupalcode.org/project/ai/-/work_items/3538657) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> Problem/Motivation Follow-up to: #3492940: Add ChatProcessor To split out the AI Chatbot documentation from AI Assistant API docs. See context in comments 2 and 5 of: #3538457: AI module documentation has warnings when running mkdocs serve Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Once the parent issue is done, split the docs. Remaining tasks Wait for parent Split docs, re… ### [Placeholders not available when using advanced (token) mode](https://git.drupalcode.org/project/ai/-/work_items/3525367) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::task, priority Description: >>> [!note] Migrated issue Reported by: [jhedstrom](https://www.drupal.org/user/208732) Related to !621 !1423 !1352 >>> --- AI TRACKER METADATA --- Update Summary: Needs to fix AnnMary’s feedback. Check-in Date: MM/DD/YYYY (US format) [When we should see progress/get an update] Due Date: MM/DD/YYYY (US format) [When the issue should be fully completed] Blocked by: [#XXXXXX] (New issues on new lines) Additional Collaborators: @username1, @username2 AI Tracker found here: https://www.drupalstarforge.ai/ --- END METADATA --- Problem/Motivation The advanced automator type that allows to… ### [Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="")](https://git.drupalcode.org/project/ai/-/work_items/3586624) State: opened | Updated: 2026-08-28 | Author: Ron Raney (rraney) | 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 !1883 [bug: #3586624 Streaming chat forces plain-text hostname filtering, corrupting...](https://git.drupalcode.org/project/ai/-/merge_requests/1883) | State: opened | Author: Ann Mary Sruthy (annmarysruthy), 790 diff lines Description: **Problem/Motivation** `StreamChatMessageIteratorTrait::getHostnameFilterService()` forces `HostnameFilter::setPlainTextMode(TRUE)` whenever code isn't running inside a PHP Fiber (which is the normal case for typical request-based streaming consumers, e.g. AI CKEditor's Reformat/Modify tools). With plain-text mode forced on, `HostnameFilter::filterText()` skips the HTML-aware filtering branch and instead runs `filterUrlsInPlainText()` — a raw regex substring replace across the entire response text, with no awareness of HTML structure. When AI-processed content contains an `` tag pointing to … ### [AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting](https://git.drupalcode.org/project/ai/-/work_items/3586654) State: opened | Updated: 2026-08-28 | Author: Miguel Guerreiro (gueguerreiro) | 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 !1915 [bug: #3586654 AiAutomatorEntityModifier::entityHasConfig() ignores the AI...](https://git.drupalcode.org/project/ai/-/merge_requests/1915) | State: opened | Author: Miguel Guerreiro (gueguerreiro), 155 diff lines Description: ## Summary **This is for version 1.x of the ai module** Disabling an AI Automator config entity (setting `status: false` in its configuration item) has no effect on whether it actually runs. Automators keep firing on every entity save even when we disable it. ## Steps to reproduce 1. Configure an AI Automator on any field so it auto-populates the field on save when left empty. 2. Save an entity with the field empty and verify the AI call fires and the field gets populated. 3. Disable the automator (set `status: false` in the exported config and reimport). 4. Save an entity with the fiel… ### [Reinstate ai_search and deprecate it before removal](https://git.drupalcode.org/project/ai/-/work_items/3586698) State: opened | Updated: 2026-08-28 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Release blocker, ai::inside Description: AI Search has never been deprecated. We need to reinstate it at its latest version in 1.4.x, but mark it as deprecated. Actual removal can then happen after the deprecation cycle in 1.6.0. The references composer.json version needs to be removed as well. Related to #3586684. ### [Add support embeddings via symfony/ai](https://git.drupalcode.org/project/ai/-/work_items/3586495) State: opened | Updated: 2026-08-28 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | 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-27 | Author: Rob Loach (robloach) | Assigned: Rob Loach (robloach), Tormi Tabor (tormi) | Labels: state::needsWork 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… ### [Reinstate AI CKEditor in composer.json and deprecate it before removal](https://git.drupalcode.org/project/ai/-/work_items/3586699) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Release blocker, ai::inside Description: AI CKEditor has never been deprecated. We need to reinstate it at its latest version in 1.4.x, but mark it as deprecated. Actual removal can then happen after the deprecation cycle in 1.6.0 release. The references composer.json version needs to be removed as well. Related to #3586684. ### [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-27 | 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`, … ### [PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent](https://git.drupalcode.org/project/ai/-/work_items/3586701) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted Description: Follow-up from #3586495 (MR !1856). Surfaced while adding `EmbeddingsCollectionInterface` to `PlatformProxy`; deferred there because it is pre-existing and structural rather than specific to embeddings. ## Problem `AiProviderPluginManager::createInstance()` returns `PlatformProxy` **un-wrapped** for `ai_platform:*` ids, and the proxy has no event dispatcher injected. As a result, the BC operations on it — `chat()`, `embeddings()` and now `embeddingsCollection()` — never dispatch: * `PreGenerateResponseEvent` * `PostGenerateResponseEvent` * `AiExceptionEvent` and none of `ProviderProxy::wra… ### [Define an error strategy for unavailable model catalogs](https://git.drupalcode.org/project/ai/-/work_items/3586700) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: No Estimation Available, category::plan, priority::normal Description: Follow-up from #3586495 (MR !1856), requested by @mxr576 and @fago on the MR review thread. ## Problem `AiPlatformPluginBase::getSupportedOperationTypes()` and `PlatformProxy::getConfiguredModels()` derive a platform's operation types and models from its Symfony model catalog. When the catalog is dynamic — e.g. fetched over HTTP — and unavailable at that moment, the plugin currently reports **no operations** rather than guessing, and (since !1856) logs a warning through the injected logger. `FallbackModelCatalog` has the same visible effect: it passes every model through with no capabilities… ### [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-27 | 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… ### [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-27 | Author: Dezső Biczó (mxr576) | Assigned: Konstantine Kirkitadze (kotekirkitadze) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Description ### Background … ### [Write QA plan for 1.5.0](https://git.drupalcode.org/project/ai/-/work_items/3586684) State: closed | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | 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. ### [QA testing: 1.5.0 update from 1.4.x test plan](https://git.drupalcode.org/project/ai/-/work_items/3586696) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: ai::inside, category::task, priority::normal, state::accepted Description: QA testing for the 1.5.0 update from 1.4.x test plan from #3586684. Testing instructions [qa15-upgrade.md](https://git.drupalcode.org/-/project/106525/uploads/4740d7767e8d8d1c7093dbf08bdcdc66/qa15-upgrade.md) --- MERGE REQUESTS (24h) --- ### [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 | 1227 diff lines Description: Closes #3586495 ### [Issue #3586698: Reinstate AI Search](https://git.drupalcode.org/project/ai/-/merge_requests/1970) State: opened | Author: Rob Loach (robloach) | Branch: 3586698-reinstate-ai-search | 6888 diff lines Description: Reinstates the ai_search submodule at its latest 1.4.x state, marks it lifecycle: deprecated, and removes the drupal/ai_search requirement from composer.json. Closes #3586698 ### [Issue #3586699: Reinstate AI CKEditor](https://git.drupalcode.org/project/ai/-/merge_requests/1969) State: opened | Author: Rob Loach (robloach) | Branch: 3586699-reinstate-ai-ckeditor | 11144 diff lines Description: Reinstates the ai_ckeditor submodule at its latest 1.4.x state, marks it lifecycle: deprecated, and removes the drupal/ai_ckeditor requirement from composer.json. Resolves #3586699 ### [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-27T10:02:25+00:00 to 2026-08-28T10:02:25+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

    Drupal AI Initiative

    then use

    ,

    ,

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

      How can I help on this project?

      " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Enterprise AI Summit: registration and sponsorship update with Michaela (2026-08-28)](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586782) State: closed | Updated: 2026-08-28 | Author: wouters_f (wouters_frederik) | Assigned: unassigned | Labels: Enterprise AI Summit, category::task, meetings, state::fixed Description: Bilateral check-in on registration progress toward the 100-attendee goal, drinks budget, income projection, and sponsorship page corrections. Participants: @micjur, Frederik Wouters. Topics: registration update (44 paid, working toward 100 total), drinks budget planning (14 EUR per person x 120 persons), income projection (approx 10k gross, minus drinks and branding leaves approx 7k), sponsorship sales update (Karla leading sponsorships, Dominique actively selling), sponsorship page copy corrections (change "Banner at the venue" to "Rollup at the venue", confirm gold sponsors appear on photo… ### [Enterprise AI Summit: core team sync — budget, registrations, Drupalcon, comms (2026-08-26)](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586781) State: closed | Updated: 2026-08-28 | Author: wouters_f (wouters_frederik) | Assigned: unassigned | Labels: Enterprise AI Summit, category::task, meetings, state::fixed Description: Core team sync on budget status, ticket registrations, Drupalcon deadline, communications flow, and post-event planning. Participants: @micjur (Dropsolid), @imre_gmelig_meijling, Paulina, @mfernanda.silva, Frederik Wouters. Topics: budget review (estimated profit 10k before full cost calculation), registration status (66 total: 41 paid, 24 complementary), ticket distribution strategy (coupon flow vs Kuoni-registered flow, processed weekly), Drupalcon deadline end of August, Drupal board meeting update (global committee recommendation to focus Drupalcon on contributors and developers), Emerce… ### [Update AI CMS recipe for CMS 2.2 release](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586780) State: opened | Updated: 2026-08-28 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: ## Problem/motivation Drupal CMS will likely create a 2.2 release in 2 to 3 weeks. We should see if there are any changes we want in the AI recipe. ## Solution Review possible changes for the recipe and create a list here and then update the recipe. Note this is a minor release so we need to be careful what is added/updated. ### [[Meta] ai_disclosure: EU AI Act Article 50 transparency module](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::plan, code, priority::normal, state::accepted Description: ## Problem / Motivation Article 50 of the EU AI Act (Regulation (EU) 2024/1689) applies since **2 August 2026**, with fines up to EUR 15M / 3% of worldwide turnover. For site operators ("deployers") the core duty is Art. 50(4): visibly disclose AI-generated or AI-manipulated text published to inform the public on matters of public interest, and deep-fake media — **unless** the content underwent substantive human review or editorial control and a person holds editorial responsibility (spell-check does not qualify, per the Commission Q&A). The Commission has published guidelines (2026-07-20), a… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [3] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Sergiu Nagailic (Nikro)". 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

      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). ### [Implement exposing raw vector](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3525329) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [nikro](https://www.drupal.org/user/576416) Related to !5 >>> Based on: https://www.drupal.org/project/ai/issues/3525296 To enable optional inclusion of raw embedding vectors in Search API AI results, implement the following: Add an optional method getRawEmbeddingFieldName() to the VDB provider plugin interface. This change allows retrieving raw vectors alongside search hits for efficient re‑ranking without extra database queries. ### [Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509) State: opened | Updated: 2026-08-28 | 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… --- MERGE REQUESTS (24h) --- ### [feat: #3610509 Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30) State: opened | Author: Sergiu Nagailic (Nikro) | Branch: 3610509-add-batch-embeddings | 255 diff lines Description: By: nikro Closes #3610509 --- COMMITS (24h) --- (none) ======================================================================== ## [4] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Gábor Hojtsy (goba), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Krasimir Bachev (c2h2o5), Lauri Timmanee (lauriii), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wim Leers (wimleers) [1], wotnak". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

        Drupal Canvas

        then use

        ,

        ,

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

          How can I help on this project?

          " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Canvas AI: Add a dev page builder agent and wire the placement tools](https://git.drupalcode.org/project/canvas/-/work_items/3591921) State: opened | Updated: 2026-08-27 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | 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 … ### [Turbo build does not invalidate drupal-canvas when schema.json changes](https://git.drupalcode.org/project/canvas/-/work_items/3592005) State: opened | Updated: 2026-08-27 | Author: Harumi Jang (hooroomoo) | Assigned: Harumi Jang (hooroomoo) | Labels: 1.x-dev ### [Translating a content template WSOD when the template has an optional link input with no value](https://git.drupalcode.org/project/canvas/-/work_items/3592006) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: bug, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1571 [Issue #3592006: Translating a content template WSODs when the template has an...](https://git.drupalcode.org/project/canvas/-/merge_requests/1571) | State: opened | Author: Gábor Hojtsy (goba), 33 diff lines Description: Submitting the core config translation form for a content template fails with a WSOD whenever the template contains an optional link prop whose URL is empty — even if the translator never touched that field: ``` LogicException: Drupal\canvas\PropSource\StaticPropSource::withValue called with invalid value for field type field_item:link. in Drupal\canvas\PropSource\StaticPropSource->withValue() (line 244 of modules/contrib/canvas/src/PropSource/StaticPropSource.php) Drupal\canvas\ConfigTranslation\CanvasStaticPropSourceFieldWidget->setConfig() ← Drupal\config_translation\FormElement\ListEleme… ### [Image removal in SDC field causes bug on re-render](https://git.drupalcode.org/project/canvas/-/work_items/3548247) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted, toBeTriaged Description: >>> [!note] Migrated issue Reported by: [kmwarboy](https://www.drupal.org/user/3842498) >>> Overview We have created a component that acts as a mosaic/media gallery. The component can have up to 5 images, and has options for image orientation on a few of the images. There is also some logic in the twig template that will hide or display certain images depending on the orientation of others. We ran into a bug where if we remove one of the images to try to replace it with another one, it breaks the component as rendered and shows none of the images. If we choose a new image for the removed i… ### [updateExistingComponentValues() never cancels an update that names a prop the component does not have](https://git.drupalcode.org/project/canvas/-/work_items/3592004) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702. `updateExistingComponentValues` in `ui/src/features/layout/layoutModelSlice.ts` intends to "exit early if attempting to update a prop that does not exist", but the `return` sits inside a `forEach` callback, so it only ends that iteration. The warning `Component X does not have a prop named Y. Update cancelled.` is logged and the update is then applied anyway, including the unknown key, which is written into the component's `reso… ### [Trim the chat history after filtering so progress entries do not consume the window](https://git.drupalcode.org/project/canvas/-/work_items/3592003) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702 `CanvasAiChatHelper::getFilteredChatHistory()` applies `array_slice(-$max_messages)` to the raw deep-chat messages _before_ it filters them into chat messages. Entries that never reach the model still occupy a slot in the window. The dev page builder stores an HTML progress entry per turn next to the user text and the final answer, so at the default `chat_history_max_messages` of 10 only about three turns of real context survive… ### [Normalize agent-written prop values against their schema and report values the component source cannot store](https://git.drupalcode.org/project/canvas/-/work_items/3592002) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702 `AiResponseValidator::validateComponentStructure()` feeds the model's parsed YAML prop values straight into `clientModelToInput()` and the validation constraints. Two consequences show up in live builds with GPT-5.2: 1. **Equivalent textual shapes are rejected.** The model regularly writes `width: '"90%"'`, `level: "2"` or `section_header: "false"`. The YAML parser keeps the inner quotes / string type, every enum, integer and bo… ### [Page variants entirely lack translation preview support](https://git.drupalcode.org/project/canvas/-/work_items/3592001) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: feature, priority::critical, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1570 [Issue #3592001: Page variants entirely lack translation preview support](https://git.drupalcode.org/project/canvas/-/merge_requests/1570) | State: opened | Author: Gábor Hojtsy (goba), 213 diff lines Description: ### Problem/Motivation When a `PageVariant` has a config translation, the translated values never appear in any Canvas preview — even though the front end renders them correctly. Switching the editor's language dropdown, or opening the preview route with `?language=hu`, still shows the base-language text. "Translation" as shown on frontend of the site: Lack of translation on Canvas preview of translation: So the editor's language switcher is effectively cosmetic for these entities: the preview contradicts what the site actually serves. ### Steps to reproduce 1. Add a second language;… ### [Auto-save draft on a global region, created before it has a translation, breaks editing on every page (assert(component_id) crash)](https://git.drupalcode.org/project/canvas/-/work_items/3591998) State: opened | Updated: 2026-08-27 | Author: Jochen Sunaert (jochen.sunaert) | Assigned: unassigned | Labels: Description: ### **What happened** Clicking "Edit" on any page in Canvas gave a 500 error: ▎ An unexpected error has occurred while fetching the layout. Checked the logs (drush ws) and found this: `AssertionError: assert(\array_key_exists('component_id', $component_instance)) in ComponentInputsMapping.php line 45 `Also saw a bunch of Undefined array key "uuid" warnings right before it. This was happening on literally every page, not just one, so editing was completely broken. **Root cause ( 99% sure )** in the Header page region (canvas.page_region.flexus.header). There was an unsaved/abandoned aut… ### [[PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates)](https://git.drupalcode.org/project/canvas/-/work_items/3565712) State: opened | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: DX (Developer Experience), Recipes initiative, category::task, configManagement Description: > [!NOTE] > Issue summary needs updating. Incorporate #3564135+'s different focus. >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) >>> Overview Ever since Component versions were introduced (#3523841: Versioned Component config entities (SDC, JS: prop_field_definitions, block: default_setting, all: slots for fallback) + component instances refer to versions ⇒ less data to store per XB field row), it became implicitly unsupported to ship an exported Component config entity with some Drupal extension in its config/install or config/optional direct… ### [Component version hashes go stale on single-process installs: prop-shape re-resolution is deferred to teardown and skipped on a cold cache](https://git.drupalcode.org/project/canvas/-/work_items/3591916) State: closed | Updated: 2026-08-27 | Author: Christian López Espínola (penyaskito) | Assigned: Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: Contributed project blocker, Drupal CMS dependency critical, category::bug, priority::critical Description: ### Overview A site installed with `drush site:install` (or any single-process recipe apply) can end up with Component config entities whose `active_version` hash does not match what the current site state generates — and the site stays that way until an unrelated event regenerates components. The same recipes applied through the browser installer produce a different (correct) version history, because the work is split across multiple requests. The cause is how `PersistentPropShapeRepository` refreshes storable prop shapes: - When config that affects prop shapes changes mid-process (e.g. a … ### [Automatically create components when themes are installed](https://git.drupalcode.org/project/canvas/-/work_items/3591898) State: opened | Updated: 2026-08-27 | Author: Adam G-H (phenaproxima) | Assigned: unassigned | Labels: Recipes initiative, configManagement, priority::major Description: With certain narrow exceptions, site templates -- and recipes more broadly -- should not be in the business of shipping `component` config entities. Component entities are ill-suited to be included in recipes because they are, fundamentally, **non-transferable**. They are the version history of a component as it has existed _in a particular site_. But a recipe is not a snapshot of a particular site; it is a generic package of configuration and setup steps. Up until now, Drupal CMS has worked around this by including the component entities in recipes' configuration. This has proven to be comp… ### [Translating a component tree config entity (such as PageVariant) that has an auto-save draft breaks Canvas layout validation](https://git.drupalcode.org/project/canvas/-/work_items/3592000) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: priority::critical, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1568 [Issue #3592000: Translating a component tree config entity that has an...](https://git.drupalcode.org/project/canvas/-/merge_requests/1568) | State: opened | Author: Gábor Hojtsy (goba), 136 diff lines Description: When a `PageVariant` (or `ContentTemplate`) has **unpublished changes sitting in an auto-save draft** and the entity then gets a config translation, the Canvas editor crashes on every layout request: ``` An unexpected error has occurred while fetching the layout. Error 500: assert(\array_key_exists('component_id', $component_instance)) ``` This happens on a **plain single-language-default site** — the site default language and the entity's langcode are both `en`. A broader version of this was reported at https://git.drupalcode.org/project/canvas/-/work_items/3591850 but this is reproducible … ### [Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form](https://git.drupalcode.org/project/canvas/-/work_items/3591971) State: closed | Updated: 2026-08-27 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: AI-accelerated, category::task, data integrity, dataModel Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1532 [#3591971: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form](https://git.drupalcode.org/project/canvas/-/merge_requests/1532) | State: merged 2026-08-27 | Author: Wim Leers (wimleers), 353 diff lines Description: ## Problem Three gaps in `ComponentTreeStructureConstraintValidator`, identified in #3591968+: 1. A cycle of `parent_uuid` references (A→B→A, or longer) passes validation. Each member's parent exists and its slot is valid; only direct self-parenting is rejected. At render time every cycle member is silently omitted. 2. The duplicate-UUID violation is one collection-level message naming neither the UUID nor which items carry it. 3. Uppercase and mixed-case UUIDs are accepted. The database columns compare case-insensitively, but parent lookups and rendering match exactly: case-variant spelling… ### [Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions](https://git.drupalcode.org/project/canvas/-/work_items/3571366) State: opened | Updated: 2026-08-27 | Author: drupalbot | Assigned: Matt Glaman (mglaman) | Labels: AI-accelerated, Chicago2026, DX (Developer Experience), Drupal CMS dependency critical Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) Related to !811 >>> Overview In https://git.drupalcode.org/project/canvas/-/work_items/3567413 we added the infra for updating component instances to the latest (active) version if there is no data impact. That is pretty defensive per nature, so we ensure no data loss. But there are some cases where e.g. contrib should be able to impact that. e.g. In \Drupal\canvas\Hook\ShapeMatchingHooks::mediaLibraryStorablePropShapeAlter we implement hook_canvas_storable_prop_shape_alter for media_library, and for… ### [Docs oriented to recipe authors integrating with Canvas](https://git.drupalcode.org/project/canvas/-/work_items/3564135) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: Contributed project blocker, DX (Developer Experience), Recipes initiative, category::task Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) >>> Overview We have very technical docs in markdown format at docs/* targeted to developers and contributors. We have (hope not so technical) user docs exposed as a website at https://project.pages.drupalcode.org/canvas/, with sources at docs/user/*, targeted to users and component developers. We miss an "intermediate" technical level here: docs targeted to e.g. recipe authors, where we could document the requirements for e.g. shipping patterns, potential error messages and how to solve them, etc. Pro… ### [Reset entity form state during SPA navigation](https://git.drupalcode.org/project/canvas/-/work_items/3591999) State: opened | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1569 [Draft: fix: #3591999 Reset entity form state during SPA navigation](https://git.drupalcode.org/project/canvas/-/merge_requests/1569) | State: opened | Author: wotnak, 407 diff lines Description: Canvas keeps page data and entity form values in shared client state. When SPA navigation changes the active entity, newly loaded data is merged into the existing state. Values and validation state from the previous entity can remain in the form and may be submitted when another field changes. To reproduce: 1. Open an entity with a distinct value in an optional Page data field. 2. Navigate through the Canvas SPA to another entity where that field is empty or has a different value. 3. Open the Page data form. 4. Change another field. The form may display or submit the value from the previous… ### [Document the recipe contract for Canvas content: ship canvas.component.* config (and generation runs after recipe content import)](https://git.drupalcode.org/project/canvas/-/work_items/3591659) State: closed | Updated: 2026-08-27 | Author: Alex Urevick-Ackelsberg (alexua) | Assigned: unassigned | Labels: Recipes initiative Description: Question for maintainers/docs rather than a bug report. Is shipping `canvas.component.*` config the intended contract for recipes that ship Canvas content? The `geo_starter` site template ships **11** such files (one per Mercury SDC its page trees use), and the Drupal CMS `byte` and `haven` site templates follow the same pattern — which suggests it is the de-facto contract. If that is the intended contract, documenting it (recipe-author docs or a change record) would save the next recipe author the diagnosis. A secondary observation, in case it belongs in the same docs: on this installer sta… ### [RecipeSubscriber is no longer needed, so remove it](https://git.drupalcode.org/project/canvas/-/work_items/3566813) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: Adam G-H (phenaproxima), Wim Leers (wimleers) | Labels: Drupal CMS release target, category::bug, code, priority::normal Description: >>> [!note] Migrated issue Reported by: [phenaproxima](https://www.drupal.org/user/205645) Related to !461 >>> Overview Canvas had a recipe event subscriber to ensure components were available at specific, necessary times (before content import, for example). This is a relic of component discovery being tied to volatile cache clears: a situation which, thankfully, is no longer the case. It works as expected now without this event subscriber, so let's just remove it. ### [Allow optional entity select fields to be cleared](https://git.drupalcode.org/project/canvas/-/work_items/3591997) State: opened | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1567 [fix: #3591997 Allow optional entity select fields to be cleared](https://git.drupalcode.org/project/canvas/-/merge_requests/1567) | State: opened | Author: wotnak, 202 diff lines Description: Drupal optional select widgets represent an empty selection with the `_none` sentinel. Canvas converts `_none` to `null` in the entity (Page data) form frontend so Redux state and JSON use a semantic empty value instead of a Drupal form implementation detail. The backend expands submitted entity form values with `http_build_query()`. This function omits `null` values, so the select field is missing from the reconstructed Drupal form submission and retains its previous value. Steps to reproduce: 1. Select a non-default page template for a Canvas page and publish it. 2. Change the Page templa… ### [Fatal error with config translation when page region contains rich text field](https://git.drupalcode.org/project/canvas/-/work_items/3591964) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: category::bug, state::needsReview, translation Description: 1. Install Drupal CMS with Haven. 2. Enable configuration translation. 3. Add a foreign language. 4. Try to add translation to Footer. ``` The website encountered an unexpected error. Try again later. Error: Call to a member function getValue() on null in Drupal\Core\Field\FieldItemList->getEntity() (line 54 of core/lib/Drupal/Core/Field/FieldItemList.php). Drupal\ckeditor5\Hook\Ckeditor5Hooks->fieldWidgetSingleElementFormAlter() (Line: 460) Drupal\Core\Extension\ModuleHandler->alter() (Line: 482) Drupal\Core\Field\WidgetBase->formSingleElement() (Line: 229) Drupal\Core\Field\WidgetBase->for… ### [Config in language other than site default language causes an exception](https://git.drupalcode.org/project/canvas/-/work_items/3591850) State: opened | Updated: 2026-08-27 | Author: Ted Bowman (tedbow) | Assigned: unassigned | Labels: category::bug, state::needsReview, translation Description: ### Problem When a Canvas config entity's `langcode` differs from the site default language, the Canvas editor throws exceptions. This happens when `PageRegion` (or `ContentTemplate`) entities are created while one language is the site default, and the site default is changed later. The entities keep their original `langcode`. Two exceptions: 1. `InvalidArgumentException: getTranslation() must not be called with the langcode of the default translation ("en")` — thrown when the preview validates a region with an auto-save draft. `CanvasConfigEntityTranslationsAreValidConstraintValidator` and… ### [RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it](https://git.drupalcode.org/project/canvas/-/work_items/3591996) State: opened | Updated: 2026-08-27 | Author: Jakub Piasecki (zaporylie) | Assigned: unassigned | Labels: category::bug, priority::critical Description: ## Overview Applying a site template recipe fails with: In ContainerBuilder.php line 1104: You have requested a synthetic service ("kernel"). The DIC does not know how to construct this service. `RecipeSubscriber::onApply()` calls `PageVariantMigration::migrateDefaultTheme()`, which calls `createFromPageRegions()`, which installs `canvas_page_template_component` when it is missing: ``` // src/PageVariantMigration.php:131 if (!\Drupal::moduleHandler()… ### [Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/work_items/3591967) State: closed | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: state::fixed 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 AI: Add a Drupal Canvas Agent that answers general questions](https://git.drupalcode.org/project/canvas/-/work_items/3591924) State: opened | Updated: 2026-08-27 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai 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… --- MERGE REQUESTS (24h) --- ### [feat(Headless): Show only components managed by the current headless frontend](https://git.drupalcode.org/project/canvas/-/merge_requests/1543) State: opened | Author: Harumi Jang (hooroomoo) | Branch: dxfe-7-4 | 1214 diff lines Description: #3591975 AI Disclosure: Yes used GPT 5.4 to generate code - Stores frontend-owned external component IDs in canvas_headless.settings.frontends\[\*\].components. - Updates that ownership list on every headless component sync, so sidebar availability follows the latest synced state. - Reuses GET /canvas/api/v0/headless/frontends as the editor-readable source of frontend component ownership, while keeping PATCH admin-only. - Filters the Canvas sidebar so the selected headless frontend shows only its own external components. - Keeps drupalSettings unchanged as lightweight bootstrap data; compone… ### [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 | 55 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… ### [Refreshes editor layout model after server changes](https://git.drupalcode.org/project/canvas/-/merge_requests/1147) State: opened | Author: Krasimir Bachev (c2h2o5) | Branch: 3591346-editor-doesnt-refresh | 45 diff lines Description: Refreshes the editor's in-memory layout model to ensure server-side mutations are immediately reflected. Previously, changes made during `hook_entity_presave` or `hook_canvas_page_presave` (e.g., during the Publish flow), which invalidate the layout, would not surface in the editor without a full page reload. This change modifies the page data query endpoints to extract the latest `layout` and `model` from the API response and dispatches an update to the in-memory layout model. This ensures the editor's view remains synchronized with the server's state, improving the user experience by elimin… ### [#3591838 prevent duplicate names](https://git.drupalcode.org/project/canvas/-/merge_requests/1555) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-prevent-duplicate-color-names | 546 diff lines Description: Replaced the not-working `UniqueNamePerFolderTypeConstraint` with the broadly applied `UniqueColorNameConstraint` and added e2e test for it. ## Testing instructions - [ ] Try to create a color with a name that exists - note it is prevented w/validation message in the form - [ ] Try to update the name of a color to that of one that exists - note that it is prevented with a validation message appearing below the inline input. Closes #3591838 ### [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 | 2843 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… ### [bug(build): Turbo build does not invalidate drupal-canvas when schema.json changes](https://git.drupalcode.org/project/canvas/-/merge_requests/1572) State: opened | Author: Harumi Jang (hooroomoo) | Branch: turbo-build-schema-1x | 33 diff lines Description: #3592005 Discovered while reviewing [#3591973: Reconcile external document media through the CLI and HTTP API](https://git.drupalcode.org/project/canvas/-/merge_requests/1536#note_1981051) * `packages/drupal-canvas` imports the repository root `schema.json`, and that file affects the bundled `dist/json-render-utils.js` artifact. Turbo was not treating the root `schema.json` as an input for the `drupal-canvas` package, so `npm run packages:build` could reuse a cached `drupal-canvas` build after schema changes. * add a changeset for `drupal-canvas` so we get a new version of `drupal-canvas` th… ### [#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… ### [Draft: Stage Canvas autosaves in a dedicated Workspace](https://git.drupalcode.org/project/canvas/-/merge_requests/1056) State: opened | Author: Lauri Timmanee (lauriii) | Branch: 3588540-stage-canvas-autosaves | 6877 diff lines Description: AI-Generated: Yes, Cursor was used to assist with the creation of this MR. ## Testing instructions * [ ] Apply MR + Run update hooks * [ ] Test making changes + publishing them Closes #3588540 ### [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 | 5075 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… ### [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 | 4687 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… ### [#3591994: invalidate folder tags on color delete + test](https://git.drupalcode.org/project/canvas/-/merge_requests/1565) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591994-color-folders-in-ui-not-deletion-aware | 76 diff lines Description: Invalidate folder API tags on color delete so UI info about folder contents is current. Otherwise, any requests subsequent requests specific to that folder will reference a color that no longer exists and error (such as moving an item to that folder) Note that since this is only due to clientside RTK cache, a page refresh circumvents the problem - this makes it so the refresh is not needed/ ## Testing instructions * [ ] Delete a color within a folder * [ ] Immediately move another color into the folder you just deleted a color from * [ ] Confirm it moved into the new folder and no console… ### [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… ### [feat: #3518272 support all entity types with configurable displays for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/791) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3518272-field-ui-base-route | 2389 diff lines Description: Closes #3518272 . ### [#3591838 css variable name can be edited](https://git.drupalcode.org/project/canvas/-/merge_requests/1561) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-edit-css-var | 144 diff lines Description: This adds the ability to edit a Color's CSS var name vs only being able to set them on create It also made the popovers scrollable as the increased height makes out-of-viewport more likely to occur ![Screenshot 2026-08-25 at 1.28.52 PM.png](/uploads/c63de452c9ed4c49d57cde962b052283/Screenshot_2026-08-25_at_1.28.52_PM.png){width=245 height=488} No designs available at the time of creating the MR. This uses the same styling as the create form. ## Testing instructions * [ ] Edit the CSS var name on an existing color Closes #3591838 ### [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 | 109 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… ### [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 | 349 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… ### [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. ### [Add ltrim call](https://git.drupalcode.org/project/canvas/-/merge_requests/461) State: closed | Author: Adam G-H (phenaproxima) | Branch: 3566813-recipesubscriber-needs-to | 102 diff lines Description: Closes #3566813 ### [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 --- COMMITS (24h) --- - [68055a68](https://git.drupalcode.org/project/canvas/-/commit/68055a68187cd299ef3c069fef94123a2618f449) chore(Data model): #3591971 Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form — Wim Leers (2026-08-27T12:37:04.000+00:00) ======================================================================== ## [5] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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). ### [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-28 | Author: Kristen Pol (kepol) | Assigned: unassigned | 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), 23504 diff lines Description: ## Summary **READY FOR REVIEW AND TESTING!!!** **MULTIPLE REVIEWERS/TESTERS ARE WELCOME TO REVIEW/TEST AT THE SAME TIME** **MULTIPLE ASSIGNEES ARE ALLOWED ON ISSUES SO ASSIGN EVEN IF YOU SEE OTHERS ASSIGNED** **NOTE TO REVIEWERS: THIS IS A MONSTER MR** - **YOU ARE NOT EXPECTED TO MANUALLY REVIEW THE CODE CHANGES (I HAVE DONE THAT EXCEPT FOR TESTS)** - **IT WOULD BE HELPFUL IF YOU MANUALLY REVIEWED THE NEW API METHODS BUT THAT'S NOT STRICTLY REQUIRED** - **HAVE YOUR AGENT(S) REVIEW THE CODE AND TEST IT (I HAVE USED GROK AND OPUS 5, SO USING DIFFERENT MODELS IS HELPFUL)** - **MANUAL TESTING… ### [Review all public CCC API naming and signatures before beta5 is tagged](https://git.drupalcode.org/project/ai_context/-/work_items/3586444) State: opened | Updated: 2026-08-27 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint17, AI Initiative Sprint, ai::internal, category::task Description: ## Problem/motivation Last call for changes ## Solution Do a final pass for any weird names/signatures/etc for public API Explicit naming things to review - check comments, lots there, some already handled in !283 - "request" usage, still using this in a lot of places - using "provider" with request? - using "invocation" - "router" vs "negotiator" - "match" for things other than selection matching - make excluded_request_tags configurable? - "candidate" for things other than selection matching - AiContextSelectionItemsSelectedEvent is a mouthful - AiContextItemsSelectedEvent / AiContextT… ### [Update Chicago demo with generic consumer patch after 1.0](https://git.drupalcode.org/project/ai_context/-/work_items/3586457) State: opened | Updated: 2026-08-27 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: category::plan, priority::normal, state::postponed, what::planning Description: ## Problem/motivation After #3586346+s, the agents config goes away and is replaced by consumer config. This breaks the configaction in the Chicago demo repo. ## Solution Add an issue in the github queue with this patch: [ai_context-consumers-demo-configaction.patch](https://git.drupalcode.org/-/project/191993/uploads/19804f53a703f83e39787ba1e92e87b6/ai_context-consumers-demo-configaction.patch) ### [Add automated CCC tests for remaining 1.0 coverage gaps](https://git.drupalcode.org/project/ai_context/-/work_items/3586455) State: opened | Updated: 2026-08-27 | 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 !286 [Issue #3586455: Add kernel tests for requirements hook, entity item cache...](https://git.drupalcode.org/project/ai_context/-/merge_requests/286) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 528 diff lines Description: ## Description Follow-up to: #3586454+s That plan reviewed the CCC suite against the codebase and listed material gaps. This issue adds those tests in one pass. The suite already covers the selection ladder, scope plugins, EchoAI injection families, access matrix, tools, scheduler, and usage tracker internals. What is missing is mostly thin kernel coverage of hooks, cache contexts, storage bypasses, and event wiring that would otherwise regress without a failing test. Do not re-test entity-item view-builder access cacheability from #3586422+s. `AiContextScopeEntityItemTest` already assert… ### [[Discuss] Provide a Drupal token that renders CCC context, for no-code injection into AI Automator (and other token-based) prompts](https://git.drupalcode.org/project/ai_context/-/work_items/3586417) State: opened | Updated: 2026-08-27 | Author: Jibran Ijaz (jibran) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::plan Description: Moving this from a feature issue to a discussion issue. You can look at the MR for reference but don't review it with an LLM unless you are just doing that to form an opinion/assessment of whether tokens make sense at all. ## Summary Automators do not use agents and, thus, do not get context items added. One idea (see original summary below) is to use tokens to allow context items to be added to automators in a simple way. Other systems that support tokens could use these as well. ## Solution Assess whether or not it makes to add tokens to pull in context items. There is an MR to explore t… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:ai_search:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-08-27T10:02:25+00:00 to 2026-08-28T10:02:25+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 Search

            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). ### [Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped](https://git.drupalcode.org/project/ai_search/-/work_items/3584048) State: opened | Updated: 2026-08-28 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: Description: This issue was raised during code review of MR [!1970](https://git.drupalcode.org/project/ai/-/merge_requests/1970/diffs#note_2025548), while verifying the changes that reinstate the ai_search submodule. The standalone module updates AI Search indexes to include `exclude_title` setting in [`10006`](https://git.drupalcode.org/project/ai_search/-/blob/1.3.0-alpha3/ai_search.install?ref_type=tags#L293). Therefore, when upgrading from the submodule bundled with AI `1.4.x` or `1.5.x`, to the standalone module, update `10006` will be skipped if the submodule's update `10006` has already been ap… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [7] summariseModule:ai_translate:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: chander bhushan (chander123)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

              AI translate

              then use

              ,

              ,

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

                How can I help on this project?

                " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations](https://git.drupalcode.org/project/ai_translate/-/work_items/3585548) State: opened | Updated: 2026-08-28 | Author: Vishal Choudhary (VishalChoudhary) | Assigned: unassigned | Labels: category::bug, needs port to 2.x, priority::major, state::needsWork Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !42 [Referenced Entities and Overwrites Existing Manual Translations Fixed issue #3585548](https://git.drupalcode.org/project/ai_translate/-/merge_requests/42) | State: opened | Author: chander bhushan (chander123), 332 diff lines Description: When translating a content entity using the **AI Translate** functionality, the translation process also processes entities referenced through an **Entity Reference** field. This can result in an already translated and manually edited referenced entity being translated again as part of the same batch process. As a result, the manually modified translation of the referenced entity can be overwritten. ## Steps to Reproduce ### 1. Create Two Content Types Create the following two content types: - **Test A** - **Test B** ### 2. Configure an Entity Reference Add an **Entity Reference** field… ### [Followup: update module documentation about agentic functionalities / orchestrator service](https://git.drupalcode.org/project/ai_translate/-/work_items/3585551) State: opened | Updated: 2026-08-27 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: Novice, Quick Win, category::task, documentation Description: Follow up to https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 : - docs/developers doesn't document the new orchestrator service, or how to use it in own code. - Docs do not document the ability to use AiFunctionCall plugin, or Tool API plugin Resources to base the documentation on: - The committed code - The original work item: https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 - The change record: https://www.drupal.org/node/3619537 ### [Refactor translation workflow to support Tool API and agent-driven translation](https://git.drupalcode.org/project/ai_translate/-/work_items/3585523) State: closed | Updated: 2026-08-27 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: 2026Sprint15, 2026Sprint16, AI Initiative Sprint, ai::inside Description: I am investigating whether I can have an AI Agent perform an entity translation, when a user requests this as part of an administrative AI agent interface. This would probably need some major refactoring of the module logic, since there are currently 2 endpoints: - UI batch translation - Drush command translation This would add a third one: Tool API translation So logic should be abstracted as much as possible where relevant, so all 3 entry points use the same code, rather than replicating it. I haven't investigated this further in detail, but already raising an issue here, in case someone … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [8] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Shibin Das [2]". 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

                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). ### [Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path](https://git.drupalcode.org/project/flowdrop/-/work_items/3592434) State: opened | Updated: 2026-08-27 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: Description: ## Problem Every HITL interrupt raised **after** the first one in a session renders as an empty "Action Required" bubble with no controls — no Approve/Decline buttons, no text field. The run is unresolvable from the UI and the session sits at `awaiting_input` forever. The first interrupt of a session renders correctly, which is what makes this easy to miss: a workflow has to reach a *second* interrupt to expose it. ## Steps to reproduce 1. Build a workflow with a Text Input (Interrupt) node feeding an HTTP Request node that has approval enabled — i.e. two interrupts, one after the other… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- - [269c18de](https://git.drupalcode.org/project/flowdrop/-/commit/269c18de34adbea8298c4bf96d23fe6e00a99993) chore: stamp 2.4.2 and mark the new bridge internal — Shibin Das (2026-08-27T13:45:32.000+02:00) - [8e7493c1](https://git.drupalcode.org/project/flowdrop/-/commit/8e7493c1beb550209617902c35128e4797e093f2) fix(flowdrop_session): #3592434 an interrupt raised after a resume can be answered — Shibin Das (2026-08-27T13:10:44.000+02:00) ======================================================================== ## [9] 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] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [2] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [3] Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="") (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586624 [4] AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586654 [5] Reinstate ai_search and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586698 [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] Reinstate AI CKEditor in composer.json and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586699 [9] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [10] PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586701 [11] Define an error strategy for unavailable model catalogs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586700 [12] 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 [13] 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 [14] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [15] QA testing: 1.5.0 update from 1.4.x test plan (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586696 [16] bug: #3586624 Streaming chat forces plain-text hostname filtering, corrupting... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1883 [17] bug: #3586654 AiAutomatorEntityModifier::entityHasConfig() ignores the AI... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1915 [18] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [19] Issue #3586698: Reinstate AI Search (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1970 [20] Issue #3586699: Reinstate AI CKEditor (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1969 [21] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [22] Enterprise AI Summit: registration and sponsorship update with Michaela (2026-08-28) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586782 [23] Enterprise AI Summit: core team sync — budget, registrations, Drupalcon, comms (2026-08-26) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586781 [24] Update AI CMS recipe for CMS 2.2 release (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586780 [25] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [26] Implement exposing raw vector (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3525329 [27] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [28] feat: #3610509 Add batch embeddings (ai_vdb_provider_postgres, MR) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30 [29] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [30] Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592005 [31] Translating a content template WSOD when the template has an optional link input with no value (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592006 [32] Image removal in SDC field causes bug on re-render (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3548247 [33] updateExistingComponentValues() never cancels an update that names a prop the component does not have (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592004 [34] Trim the chat history after filtering so progress entries do not consume the window (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592003 [35] Normalize agent-written prop values against their schema and report values the component source cannot store (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592002 [36] Page variants entirely lack translation preview support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592001 [37] Auto-save draft on a global region, created before it has a translation, breaks editing on every page (assert(component_id) crash) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591998 [38] [PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3565712 [39] Component version hashes go stale on single-process installs: prop-shape re-resolution is deferred to teardown and skipped on a cold cache (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591916 [40] Automatically create components when themes are installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591898 [41] Translating a component tree config entity (such as PageVariant) that has an auto-save draft breaks Canvas layout validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592000 [42] Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591971 [43] Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3571366 [44] Docs oriented to recipe authors integrating with Canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3564135 [45] Reset entity form state during SPA navigation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591999 [46] Document the recipe contract for Canvas content: ship canvas.component.* config (and generation runs after recipe content import) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591659 [47] RecipeSubscriber is no longer needed, so remove it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3566813 [48] Allow optional entity select fields to be cleared (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591997 [49] Fatal error with config translation when page region contains rich text field (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591964 [50] Config in language other than site default language causes an exception (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591850 [51] RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591996 [52] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [53] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [54] feat(Headless): Show only components managed by the current headless frontend (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1543 [55] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [56] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [57] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [58] Refreshes editor layout model after server changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1147 [59] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [60] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [61] bug(build): Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1572 [62] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [63] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [64] Issue #3592006: Translating a content template WSODs when the template has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1571 [65] Issue #3592001: Page variants entirely lack translation preview support (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1570 [66] 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 [67] 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 [68] #3591994: invalidate folder tags on color delete + test (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1565 [69] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [70] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [71] fix: #3591997 Allow optional entity select fields to be cleared (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1567 [72] Draft: fix: #3591999 Reset entity form state during SPA navigation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1569 [73] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [74] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [75] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [76] Issue #3592000: Translating a component tree config entity that has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1568 [77] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [78] #3591971: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1532 [79] Add ltrim call (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/461 [80] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [81] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [82] Review all public CCC API naming and signatures before beta5 is tagged (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586444 [83] Update Chicago demo with generic consumer patch after 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586457 [84] Add automated CCC tests for remaining 1.0 coverage gaps (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586455 [85] [Discuss] Provide a Drupal token that renders CCC context, for no-code injection into AI Automator (and other token-based) prompts (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586417 [86] 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 [87] Issue #3586455: Add kernel tests for requirements hook, entity item cache... (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/286 [88] Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584048 [89] AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585548 [90] Followup: update module documentation about agentic functionalities / orchestrator service (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585551 [91] Refactor translation workflow to support Tool API and agent-driven translation (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 [92] Referenced Entities and Overwrites Existing Manual Translations Fixed issue #3585548 (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/42 [93] Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592434 --- MODULE SUMMARIES ---

                    AI (Artificial Intelligence)

                    Two release-blocking deprecation issues advanced this week. MR !1970 reinstates the ai_search submodule at its 1.4.x state and marks it deprecated, while MR !1969 does the same for ai_ckeditor. Both remove the corresponding drupal/ai_* requirements from composer.json. This work follows the 1.5.0 QA plan, which closed during the period, with upgrade testing now tracked separately in QA testing: 1.5.0 update from 1.4.x test plan.

                    The symfony/ai embeddings integration continued to mature. MR !1856 for Add support embeddings via symfony/ai is under review at 1227 lines. Two architectural issues were split from that work: PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent documents how the proxy wrapper skips event dispatch for BC operations, and Define an error strategy for unavailable model catalogs captures the need for a coherent policy when dynamic catalogs are unreachable.

                    Bug fixes are in progress. MR !1962 addresses LLM: Text / LLM: Text (simple) automators silently drop Base Field content by clarifying in AiAutomatorFieldConfig that the Base Field is only included when the prompt references {{ context }}, and makes the Placeholders list visible by default. MR !1915 tackles AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting, and MR !1883 fixes Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes where StreamChatMessageIteratorTrait forces plain-text mode and breaks href attributes.

                    How can I help on this project?

                    Review the open merge requests for ai_search deprecation and ai_ckeditor deprecation, both release blockers. Test symfony/ai embeddings support against your provider setup. Help define the error handling strategy in unavailable model catalogs, which has no MR yet.

                    Contributors: Ann Mary Sruthy (annmarysruthy), Konstantine Kirkitadze (kotekirkitadze), Miguel Guerreiro (gueguerreiro), Rob Loach (robloach), Scott Euser (scotteuser)

                    ---

                    Drupal AI Initiative

                    Activity over the past 24 hours centered on event planning and roadmap items. Two closed meeting notes documented progress on the Enterprise AI Summit, covering budget planning (approximately 10k gross income projected), registration status (44 paid attendees working toward a 100-person goal), and sponsorship page copy corrections. The summit logistics continue to advance with drinks budget planning and sponsorship sales underway.

                    On the technical side, Update AI CMS recipe for CMS 2.2 release was opened to review and update the AI recipe ahead of Drupal CMS 2.2, expected in 2 to 3 weeks. The meta issue [Meta] ai_disclosure: EU AI Act Article 50 transparency module remains open, addressing EU AI Act compliance requirements that took effect 2 August 2026, including mandatory disclosure of AI-generated content published to inform the public on matters of public interest.

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

                    How can I help on this project?

                    ---

                    Postgres VDB Provider

                    Development activity this period centered on batch embedding support for the Postgres provider. The feat: #3610509 Add batch embeddings merge request was opened to align the provider with the AI module's batch embedding capability, which enables indexing multiple chunks per request rather than one at a time. This change improves indexing performance by reducing the number of round-trips during content embedding. The MR spans 255 lines of diff and implements the necessary changes to support the batched indexing path.

                    The Implement exposing raw vector feature issue remains in needs work status. This work would add an optional getRawEmbeddingFieldName() method to the VDB provider plugin interface, enabling retrieval of raw embedding vectors alongside search hits for efficient re-ranking without additional database queries.

                    How can I help on this project?

                    Review the batch embeddings MR for code quality and test coverage. Alternatively, pick up the raw vector exposure feature which needs implementation work on the plugin interface.

                    Contributors: Sergiu Nagailic (Nikro)

                    ---

                    Drupal Canvas

                    A significant data integrity improvement was merged: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form. The ComponentTreeStructureConstraintValidator now rejects parent cycles of any length (not just direct self-parenting), names the offending UUIDs when duplicates are found, and requires lowercase canonical UUID form to prevent case-mismatch lookup failures at render time.

                    Several critical bugs affecting translation workflows remain open. Translating a content template WSOD when the template has an optional link input with no value surfaces a StaticPropSource::withValue failure with empty link fields. Translating a component tree config entity that has an auto-save draft breaks Canvas layout validation and Page variants entirely lack translation preview support both have open merge requests under review. MRs also exist for Allow optional entity select fields to be cleared (the _none sentinel is omitted by http_build_query) and Reset entity form state during SPA navigation (values from a previous entity can leak into the form).

                    Two issues were closed: Component version hashes go stale on single-process installs, where PersistentPropShapeRepository deferred prop-shape resolution to teardown (skipped on a cold cache), and Improve page variant backward compatibility for recipes. Work on the dev page builder agent (Canvas AI: Add a dev page builder agent and wire the placement tools) continues, with follow-up issues split out covering updateExistingComponentValues not canceling invalid prop updates, chat history trimming before filtering, and agent-written value normalization.

                    How can I help on this project?

                    Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Gábor Hojtsy (goba), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Krasimir Bachev (c2h2o5), Lauri Timmanee (lauriii), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wim Leers (wimleers) [1], wotnak

                    ---

                    Context Control Center (CCC)

                    Activity this period centered on review readiness and test coverage expansion. The major plugin-based generic context consumers refactor (MR !283, 23,504 diff lines) remains open and ready for review. The description emphasizes agent-assisted code review rather than manual line-by-line review, with manual testing strongly encouraged. This work replaces agent-specific configuration with unified consumer configuration.

                    Parallel efforts are underway to prepare for the beta5 release. Review all public CCC API naming and signatures before beta5 is tagged was updated, focusing on terminology consistency around "request", "provider", "invocation", "router" vs "negotiator", and event naming. Add automated CCC tests for remaining 1.0 coverage gaps saw an MR opened (!286, 528 diff lines) targeting kernel tests for requirements hooks, entity item caching, and other thin coverage areas not yet addressed.

                    A postponed planning issue was updated regarding the Chicago demo configaction patch needed post-1.0, and discussion continued on whether Drupal tokens are appropriate for rendering CCC context in AI Automator prompts.

                    How can I help on this project?

                    Review and test MR !283 for the plugin-based consumer refactor using AI agents (Grok, Claude, etc.) to assess code quality and identify edge cases. Review MR !286 for automated test coverage, checking that kernel tests properly exercise requirements hooks and cache contexts. Weigh in on the token-based injection discussion for AI Automator.

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

                    AI Search

                    A critical update hook collision was identified in Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped. The issue affects sites upgrading from the AI module's bundled ai_search submodule (versions 1.4.x or 1.5.x) to the standalone ai_search module. Both versions use update hook 10006 to add the exclude_title setting to search indexes, which causes the standalone module's update to be skipped when the submodule version has already run. This leaves indexes in an inconsistent state and could prevent proper migration of the exclude_title configuration.

                    No merge requests were merged and no commits were pushed during this reporting period. The update hook collision issue remains open and is blocking clean upgrade paths for sites transitioning from the bundled submodule to the standalone module.

                    How can I help on this project?

                    • Pick up the unassigned update hook collision issue and propose a patch that renumbers the standalone module's hooks to avoid conflicts with the submodule.
                    • Review the codebase to identify other potential hook number collisions between the bundled and standalone versions.
                    ---

                    AI translate

                    Activity this period focused on addressing a critical bug and planning documentation improvements following recent architectural changes.

                    Work continued on AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations, which addresses an issue where translating content entities with Entity Reference fields can inadvertently re-translate and overwrite manually edited translations of referenced entities during batch processing. An open merge request (!42) proposes a fix with 332 lines of changes, currently in needs work state and requiring a port to the 2.x branch.

                    Following the closure of Refactor translation workflow to support Tool API and agent-driven translation, a new documentation task was created: Followup: update module documentation about agentic functionalities / orchestrator service. The recently committed orchestrator service and its integration with AiFunctionCall and Tool API plugins are not yet documented in the developer documentation.

                    How can I help on this project?

                    Review MR !42 for the referenced entities translation bug and provide feedback on the proposed fix. Write developer documentation for the new orchestrator service, AiFunctionCall plugin usage, and Tool API integration based on the committed code and change record CR-3619537.

                    Contributors: chander bhushan (chander123), Sven Decabooter (svendecabooter), Vishal Choudhary (VishalChoudhary)

                    ---

                    FlowDrop

                    A critical bug affecting workflow interrupts was fixed during this period. The issue Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path addressed a problem where any interrupt raised after the first one in a session would render as an empty bubble with no UI controls, leaving the session stuck at awaiting_input. The first interrupt would work correctly, but subsequent interrupts (such as a Text Input node followed by an HTTP Request with approval enabled) would fail to display Approve/Decline buttons or input fields.

                    The fix was committed to flowdrop_session and version 2.4.2 was stamped. Two commits were pushed: one resolving the schema-to-presentation translation bug on the resume path, and another marking a new bridge component as internal.

                    How can I help on this project?

                    Test the recent interrupt resume fix by building workflows with multiple HITL interrupts in sequence and verifying the UI renders correctly after each resume. Review open issues in the queue for triaging or additional bug reports.

                    Contributors: Shibin Das [2]

                    ======================================================================== ## [10] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 7 Judge flags: 0 ======================================================================== ## [11] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Ann Mary Sruthy (annmarysruthy), Konstantine Kirkitadze (kotekirkitadze), Miguel Guerreiro (gueguerreiro), Rob Loach (robloach), Scott Euser (scotteuser)". 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). ### [Separate AI Chatbot documentation from AI Assistant API](https://git.drupalcode.org/project/ai/-/work_items/3538657) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> Problem/Motivation Follow-up to: #3492940: Add ChatProcessor To split out the AI Chatbot documentation from AI Assistant API docs. See context in comments 2 and 5 of: #3538457: AI module documentation has warnings when running mkdocs serve Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Once the parent issue is done, split the docs. Remaining tasks Wait for parent Split docs, re… ### [Placeholders not available when using advanced (token) mode](https://git.drupalcode.org/project/ai/-/work_items/3525367) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::task, priority Description: >>> [!note] Migrated issue Reported by: [jhedstrom](https://www.drupal.org/user/208732) Related to !621 !1423 !1352 >>> --- AI TRACKER METADATA --- Update Summary: Needs to fix AnnMary’s feedback. Check-in Date: MM/DD/YYYY (US format) [When we should see progress/get an update] Due Date: MM/DD/YYYY (US format) [When the issue should be fully completed] Blocked by: [#XXXXXX] (New issues on new lines) Additional Collaborators: @username1, @username2 AI Tracker found here: https://www.drupalstarforge.ai/ --- END METADATA --- Problem/Motivation The advanced automator type that allows to… ### [Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="")](https://git.drupalcode.org/project/ai/-/work_items/3586624) State: opened | Updated: 2026-08-28 | Author: Ron Raney (rraney) | 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 !1883 [bug: #3586624 Streaming chat forces plain-text hostname filtering, corrupting...](https://git.drupalcode.org/project/ai/-/merge_requests/1883) | State: opened | Author: Ann Mary Sruthy (annmarysruthy), 790 diff lines Description: **Problem/Motivation** `StreamChatMessageIteratorTrait::getHostnameFilterService()` forces `HostnameFilter::setPlainTextMode(TRUE)` whenever code isn't running inside a PHP Fiber (which is the normal case for typical request-based streaming consumers, e.g. AI CKEditor's Reformat/Modify tools). With plain-text mode forced on, `HostnameFilter::filterText()` skips the HTML-aware filtering branch and instead runs `filterUrlsInPlainText()` — a raw regex substring replace across the entire response text, with no awareness of HTML structure. When AI-processed content contains an `` tag pointing to … ### [AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting](https://git.drupalcode.org/project/ai/-/work_items/3586654) State: opened | Updated: 2026-08-28 | Author: Miguel Guerreiro (gueguerreiro) | 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 !1915 [bug: #3586654 AiAutomatorEntityModifier::entityHasConfig() ignores the AI...](https://git.drupalcode.org/project/ai/-/merge_requests/1915) | State: opened | Author: Miguel Guerreiro (gueguerreiro), 155 diff lines Description: ## Summary **This is for version 1.x of the ai module** Disabling an AI Automator config entity (setting `status: false` in its configuration item) has no effect on whether it actually runs. Automators keep firing on every entity save even when we disable it. ## Steps to reproduce 1. Configure an AI Automator on any field so it auto-populates the field on save when left empty. 2. Save an entity with the field empty and verify the AI call fires and the field gets populated. 3. Disable the automator (set `status: false` in the exported config and reimport). 4. Save an entity with the fiel… ### [Reinstate ai_search and deprecate it before removal](https://git.drupalcode.org/project/ai/-/work_items/3586698) State: opened | Updated: 2026-08-28 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Release blocker, ai::inside Description: AI Search has never been deprecated. We need to reinstate it at its latest version in 1.4.x, but mark it as deprecated. Actual removal can then happen after the deprecation cycle in 1.6.0. The references composer.json version needs to be removed as well. Related to #3586684. ### [Add support embeddings via symfony/ai](https://git.drupalcode.org/project/ai/-/work_items/3586495) State: opened | Updated: 2026-08-28 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | 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-27 | Author: Rob Loach (robloach) | Assigned: Rob Loach (robloach), Tormi Tabor (tormi) | Labels: state::needsWork 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… ### [Reinstate AI CKEditor in composer.json and deprecate it before removal](https://git.drupalcode.org/project/ai/-/work_items/3586699) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, Release blocker, ai::inside Description: AI CKEditor has never been deprecated. We need to reinstate it at its latest version in 1.4.x, but mark it as deprecated. Actual removal can then happen after the deprecation cycle in 1.6.0 release. The references composer.json version needs to be removed as well. Related to #3586684. ### [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-27 | 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`, … ### [PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent](https://git.drupalcode.org/project/ai/-/work_items/3586701) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted Description: Follow-up from #3586495 (MR !1856). Surfaced while adding `EmbeddingsCollectionInterface` to `PlatformProxy`; deferred there because it is pre-existing and structural rather than specific to embeddings. ## Problem `AiProviderPluginManager::createInstance()` returns `PlatformProxy` **un-wrapped** for `ai_platform:*` ids, and the proxy has no event dispatcher injected. As a result, the BC operations on it — `chat()`, `embeddings()` and now `embeddingsCollection()` — never dispatch: * `PreGenerateResponseEvent` * `PostGenerateResponseEvent` * `AiExceptionEvent` and none of `ProviderProxy::wra… ### [Define an error strategy for unavailable model catalogs](https://git.drupalcode.org/project/ai/-/work_items/3586700) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: No Estimation Available, category::plan, priority::normal Description: Follow-up from #3586495 (MR !1856), requested by @mxr576 and @fago on the MR review thread. ## Problem `AiPlatformPluginBase::getSupportedOperationTypes()` and `PlatformProxy::getConfiguredModels()` derive a platform's operation types and models from its Symfony model catalog. When the catalog is dynamic — e.g. fetched over HTTP — and unavailable at that moment, the plugin currently reports **no operations** rather than guessing, and (since !1856) logs a warning through the injected logger. `FallbackModelCatalog` has the same visible effect: it passes every model through with no capabilities… ### [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-27 | 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… ### [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-27 | Author: Dezső Biczó (mxr576) | Assigned: Konstantine Kirkitadze (kotekirkitadze) | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::bug Description: Description ### Background … ### [Write QA plan for 1.5.0](https://git.drupalcode.org/project/ai/-/work_items/3586684) State: closed | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | 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. ### [QA testing: 1.5.0 update from 1.4.x test plan](https://git.drupalcode.org/project/ai/-/work_items/3586696) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: ai::inside, category::task, priority::normal, state::accepted Description: QA testing for the 1.5.0 update from 1.4.x test plan from #3586684. Testing instructions [qa15-upgrade.md](https://git.drupalcode.org/-/project/106525/uploads/4740d7767e8d8d1c7093dbf08bdcdc66/qa15-upgrade.md) --- MERGE REQUESTS (24h) --- ### [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 | 1227 diff lines Description: Closes #3586495 ### [Issue #3586698: Reinstate AI Search](https://git.drupalcode.org/project/ai/-/merge_requests/1970) State: opened | Author: Rob Loach (robloach) | Branch: 3586698-reinstate-ai-search | 6888 diff lines Description: Reinstates the ai_search submodule at its latest 1.4.x state, marks it lifecycle: deprecated, and removes the drupal/ai_search requirement from composer.json. Closes #3586698 ### [Issue #3586699: Reinstate AI CKEditor](https://git.drupalcode.org/project/ai/-/merge_requests/1969) State: opened | Author: Rob Loach (robloach) | Branch: 3586699-reinstate-ai-ckeditor | 11144 diff lines Description: Reinstates the ai_ckeditor submodule at its latest 1.4.x state, marks it lifecycle: deprecated, and removes the drupal/ai_ckeditor requirement from composer.json. Resolves #3586699 ### [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) ======================================================================== ## [12] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                      Drupal AI Initiative

                      then use

                      ,

                      ,

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

                        How can I help on this project?

                        " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Enterprise AI Summit: registration and sponsorship update with Michaela (2026-08-28)](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586782) State: closed | Updated: 2026-08-28 | Author: wouters_f (wouters_frederik) | Assigned: unassigned | Labels: Enterprise AI Summit, category::task, meetings, state::fixed Description: Bilateral check-in on registration progress toward the 100-attendee goal, drinks budget, income projection, and sponsorship page corrections. Participants: @micjur, Frederik Wouters. Topics: registration update (44 paid, working toward 100 total), drinks budget planning (14 EUR per person x 120 persons), income projection (approx 10k gross, minus drinks and branding leaves approx 7k), sponsorship sales update (Karla leading sponsorships, Dominique actively selling), sponsorship page copy corrections (change "Banner at the venue" to "Rollup at the venue", confirm gold sponsors appear on photo… ### [Enterprise AI Summit: core team sync — budget, registrations, Drupalcon, comms (2026-08-26)](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586781) State: closed | Updated: 2026-08-28 | Author: wouters_f (wouters_frederik) | Assigned: unassigned | Labels: Enterprise AI Summit, category::task, meetings, state::fixed Description: Core team sync on budget status, ticket registrations, Drupalcon deadline, communications flow, and post-event planning. Participants: @micjur (Dropsolid), @imre_gmelig_meijling, Paulina, @mfernanda.silva, Frederik Wouters. Topics: budget review (estimated profit 10k before full cost calculation), registration status (66 total: 41 paid, 24 complementary), ticket distribution strategy (coupon flow vs Kuoni-registered flow, processed weekly), Drupalcon deadline end of August, Drupal board meeting update (global committee recommendation to focus Drupalcon on contributors and developers), Emerce… ### [Update AI CMS recipe for CMS 2.2 release](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586780) State: opened | Updated: 2026-08-28 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::feature Description: ## Problem/motivation Drupal CMS will likely create a 2.2 release in 2 to 3 weeks. We should see if there are any changes we want in the AI recipe. ## Solution Review possible changes for the recipe and create a list here and then update the recipe. Note this is a minor release so we need to be careful what is added/updated. ### [[Meta] ai_disclosure: EU AI Act Article 50 transparency module](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640) State: opened | Updated: 2026-08-27 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::plan, code, priority::normal, state::accepted Description: ## Problem / Motivation Article 50 of the EU AI Act (Regulation (EU) 2024/1689) applies since **2 August 2026**, with fines up to EUR 15M / 3% of worldwide turnover. For site operators ("deployers") the core duty is Art. 50(4): visibly disclose AI-generated or AI-manipulated text published to inform the public on matters of public interest, and deep-fake media — **unless** the content underwent substantive human review or editorial control and a person holds editorial responsibility (spell-check does not qualify, per the Commission Q&A). The Commission has published guidelines (2026-07-20), a… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [13] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Sergiu Nagailic (Nikro)". 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

                        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). ### [Implement exposing raw vector](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3525329) State: opened | Updated: 2026-08-28 | Author: drupalbot | Assigned: unassigned | Labels: category::feature, code, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [nikro](https://www.drupal.org/user/576416) Related to !5 >>> Based on: https://www.drupal.org/project/ai/issues/3525296 To enable optional inclusion of raw embedding vectors in Search API AI results, implement the following: Add an optional method getRawEmbeddingFieldName() to the VDB provider plugin interface. This change allows retrieving raw vectors alongside search hits for efficient re‑ranking without extra database queries. ### [Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509) State: opened | Updated: 2026-08-28 | 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… --- MERGE REQUESTS (24h) --- ### [feat: #3610509 Add batch embeddings](https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30) State: opened | Author: Sergiu Nagailic (Nikro) | Branch: 3610509-add-batch-embeddings | 255 diff lines Description: By: nikro Closes #3610509 --- COMMITS (24h) --- (none) ======================================================================== ## [14] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Gábor Hojtsy (goba), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Krasimir Bachev (c2h2o5), Lauri Timmanee (lauriii), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wim Leers (wimleers) [1], wotnak". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                          Drupal Canvas

                          then use

                          ,

                          ,

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

                            How can I help on this project?

                            " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Canvas AI: Add a dev page builder agent and wire the placement tools](https://git.drupalcode.org/project/canvas/-/work_items/3591921) State: opened | Updated: 2026-08-27 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | 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 … ### [Turbo build does not invalidate drupal-canvas when schema.json changes](https://git.drupalcode.org/project/canvas/-/work_items/3592005) State: opened | Updated: 2026-08-27 | Author: Harumi Jang (hooroomoo) | Assigned: Harumi Jang (hooroomoo) | Labels: 1.x-dev ### [Translating a content template WSOD when the template has an optional link input with no value](https://git.drupalcode.org/project/canvas/-/work_items/3592006) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: bug, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1571 [Issue #3592006: Translating a content template WSODs when the template has an...](https://git.drupalcode.org/project/canvas/-/merge_requests/1571) | State: opened | Author: Gábor Hojtsy (goba), 33 diff lines Description: Submitting the core config translation form for a content template fails with a WSOD whenever the template contains an optional link prop whose URL is empty — even if the translator never touched that field: ``` LogicException: Drupal\canvas\PropSource\StaticPropSource::withValue called with invalid value for field type field_item:link. in Drupal\canvas\PropSource\StaticPropSource->withValue() (line 244 of modules/contrib/canvas/src/PropSource/StaticPropSource.php) Drupal\canvas\ConfigTranslation\CanvasStaticPropSourceFieldWidget->setConfig() ← Drupal\config_translation\FormElement\ListEleme… ### [Image removal in SDC field causes bug on re-render](https://git.drupalcode.org/project/canvas/-/work_items/3548247) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted, toBeTriaged Description: >>> [!note] Migrated issue Reported by: [kmwarboy](https://www.drupal.org/user/3842498) >>> Overview We have created a component that acts as a mosaic/media gallery. The component can have up to 5 images, and has options for image orientation on a few of the images. There is also some logic in the twig template that will hide or display certain images depending on the orientation of others. We ran into a bug where if we remove one of the images to try to replace it with another one, it breaks the component as rendered and shows none of the images. If we choose a new image for the removed i… ### [updateExistingComponentValues() never cancels an update that names a prop the component does not have](https://git.drupalcode.org/project/canvas/-/work_items/3592004) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702. `updateExistingComponentValues` in `ui/src/features/layout/layoutModelSlice.ts` intends to "exit early if attempting to update a prop that does not exist", but the `return` sits inside a `forEach` callback, so it only ends that iteration. The warning `Component X does not have a prop named Y. Update cancelled.` is logged and the update is then applied anyway, including the unknown key, which is written into the component's `reso… ### [Trim the chat history after filtering so progress entries do not consume the window](https://git.drupalcode.org/project/canvas/-/work_items/3592003) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702 `CanvasAiChatHelper::getFilteredChatHistory()` applies `array_slice(-$max_messages)` to the raw deep-chat messages _before_ it filters them into chat messages. Entries that never reach the model still occupy a slot in the window. The dev page builder stores an HTML progress entry per turn next to the user text and the final answer, so at the default `chat_history_max_messages` of 10 only about three turns of real context survive… ### [Normalize agent-written prop values against their schema and report values the component source cannot store](https://git.drupalcode.org/project/canvas/-/work_items/3592002) State: opened | Updated: 2026-08-27 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Assigned: unassigned | Labels: Description: ### Problem/Motivation Split out of #3591921 (MR !1505) at the maintainer's request, see https://git.drupalcode.org/project/canvas/-/work_items/3591921#note_1979702 `AiResponseValidator::validateComponentStructure()` feeds the model's parsed YAML prop values straight into `clientModelToInput()` and the validation constraints. Two consequences show up in live builds with GPT-5.2: 1. **Equivalent textual shapes are rejected.** The model regularly writes `width: '"90%"'`, `level: "2"` or `section_header: "false"`. The YAML parser keeps the inner quotes / string type, every enum, integer and bo… ### [Page variants entirely lack translation preview support](https://git.drupalcode.org/project/canvas/-/work_items/3592001) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: feature, priority::critical, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1570 [Issue #3592001: Page variants entirely lack translation preview support](https://git.drupalcode.org/project/canvas/-/merge_requests/1570) | State: opened | Author: Gábor Hojtsy (goba), 213 diff lines Description: ### Problem/Motivation When a `PageVariant` has a config translation, the translated values never appear in any Canvas preview — even though the front end renders them correctly. Switching the editor's language dropdown, or opening the preview route with `?language=hu`, still shows the base-language text. "Translation" as shown on frontend of the site: Lack of translation on Canvas preview of translation: So the editor's language switcher is effectively cosmetic for these entities: the preview contradicts what the site actually serves. ### Steps to reproduce 1. Add a second language;… ### [Auto-save draft on a global region, created before it has a translation, breaks editing on every page (assert(component_id) crash)](https://git.drupalcode.org/project/canvas/-/work_items/3591998) State: opened | Updated: 2026-08-27 | Author: Jochen Sunaert (jochen.sunaert) | Assigned: unassigned | Labels: Description: ### **What happened** Clicking "Edit" on any page in Canvas gave a 500 error: ▎ An unexpected error has occurred while fetching the layout. Checked the logs (drush ws) and found this: `AssertionError: assert(\array_key_exists('component_id', $component_instance)) in ComponentInputsMapping.php line 45 `Also saw a bunch of Undefined array key "uuid" warnings right before it. This was happening on literally every page, not just one, so editing was completely broken. **Root cause ( 99% sure )** in the Header page region (canvas.page_region.flexus.header). There was an unsaved/abandoned aut… ### [[PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates)](https://git.drupalcode.org/project/canvas/-/work_items/3565712) State: opened | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: DX (Developer Experience), Recipes initiative, category::task, configManagement Description: > [!NOTE] > Issue summary needs updating. Incorporate #3564135+'s different focus. >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) >>> Overview Ever since Component versions were introduced (#3523841: Versioned Component config entities (SDC, JS: prop_field_definitions, block: default_setting, all: slots for fallback) + component instances refer to versions ⇒ less data to store per XB field row), it became implicitly unsupported to ship an exported Component config entity with some Drupal extension in its config/install or config/optional direct… ### [Component version hashes go stale on single-process installs: prop-shape re-resolution is deferred to teardown and skipped on a cold cache](https://git.drupalcode.org/project/canvas/-/work_items/3591916) State: closed | Updated: 2026-08-27 | Author: Christian López Espínola (penyaskito) | Assigned: Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: Contributed project blocker, Drupal CMS dependency critical, category::bug, priority::critical Description: ### Overview A site installed with `drush site:install` (or any single-process recipe apply) can end up with Component config entities whose `active_version` hash does not match what the current site state generates — and the site stays that way until an unrelated event regenerates components. The same recipes applied through the browser installer produce a different (correct) version history, because the work is split across multiple requests. The cause is how `PersistentPropShapeRepository` refreshes storable prop shapes: - When config that affects prop shapes changes mid-process (e.g. a … ### [Automatically create components when themes are installed](https://git.drupalcode.org/project/canvas/-/work_items/3591898) State: opened | Updated: 2026-08-27 | Author: Adam G-H (phenaproxima) | Assigned: unassigned | Labels: Recipes initiative, configManagement, priority::major Description: With certain narrow exceptions, site templates -- and recipes more broadly -- should not be in the business of shipping `component` config entities. Component entities are ill-suited to be included in recipes because they are, fundamentally, **non-transferable**. They are the version history of a component as it has existed _in a particular site_. But a recipe is not a snapshot of a particular site; it is a generic package of configuration and setup steps. Up until now, Drupal CMS has worked around this by including the component entities in recipes' configuration. This has proven to be comp… ### [Translating a component tree config entity (such as PageVariant) that has an auto-save draft breaks Canvas layout validation](https://git.drupalcode.org/project/canvas/-/work_items/3592000) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: priority::critical, translation Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1568 [Issue #3592000: Translating a component tree config entity that has an...](https://git.drupalcode.org/project/canvas/-/merge_requests/1568) | State: opened | Author: Gábor Hojtsy (goba), 136 diff lines Description: When a `PageVariant` (or `ContentTemplate`) has **unpublished changes sitting in an auto-save draft** and the entity then gets a config translation, the Canvas editor crashes on every layout request: ``` An unexpected error has occurred while fetching the layout. Error 500: assert(\array_key_exists('component_id', $component_instance)) ``` This happens on a **plain single-language-default site** — the site default language and the entity's langcode are both `en`. A broader version of this was reported at https://git.drupalcode.org/project/canvas/-/work_items/3591850 but this is reproducible … ### [Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form](https://git.drupalcode.org/project/canvas/-/work_items/3591971) State: closed | Updated: 2026-08-27 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: AI-accelerated, category::task, data integrity, dataModel Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1532 [#3591971: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form](https://git.drupalcode.org/project/canvas/-/merge_requests/1532) | State: merged 2026-08-27 | Author: Wim Leers (wimleers), 353 diff lines Description: ## Problem Three gaps in `ComponentTreeStructureConstraintValidator`, identified in #3591968+: 1. A cycle of `parent_uuid` references (A→B→A, or longer) passes validation. Each member's parent exists and its slot is valid; only direct self-parenting is rejected. At render time every cycle member is silently omitted. 2. The duplicate-UUID violation is one collection-level message naming neither the UUID nor which items carry it. 3. Uppercase and mixed-case UUIDs are accepted. The database columns compare case-insensitively, but parent lookups and rendering match exactly: case-variant spelling… ### [Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions](https://git.drupalcode.org/project/canvas/-/work_items/3571366) State: opened | Updated: 2026-08-27 | Author: drupalbot | Assigned: Matt Glaman (mglaman) | Labels: AI-accelerated, Chicago2026, DX (Developer Experience), Drupal CMS dependency critical Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) Related to !811 >>> Overview In https://git.drupalcode.org/project/canvas/-/work_items/3567413 we added the infra for updating component instances to the latest (active) version if there is no data impact. That is pretty defensive per nature, so we ensure no data loss. But there are some cases where e.g. contrib should be able to impact that. e.g. In \Drupal\canvas\Hook\ShapeMatchingHooks::mediaLibraryStorablePropShapeAlter we implement hook_canvas_storable_prop_shape_alter for media_library, and for… ### [Docs oriented to recipe authors integrating with Canvas](https://git.drupalcode.org/project/canvas/-/work_items/3564135) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: unassigned | Labels: Contributed project blocker, DX (Developer Experience), Recipes initiative, category::task Description: >>> [!note] Migrated issue Reported by: [penyaskito](https://www.drupal.org/user/959536) >>> Overview We have very technical docs in markdown format at docs/* targeted to developers and contributors. We have (hope not so technical) user docs exposed as a website at https://project.pages.drupalcode.org/canvas/, with sources at docs/user/*, targeted to users and component developers. We miss an "intermediate" technical level here: docs targeted to e.g. recipe authors, where we could document the requirements for e.g. shipping patterns, potential error messages and how to solve them, etc. Pro… ### [Reset entity form state during SPA navigation](https://git.drupalcode.org/project/canvas/-/work_items/3591999) State: opened | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1569 [Draft: fix: #3591999 Reset entity form state during SPA navigation](https://git.drupalcode.org/project/canvas/-/merge_requests/1569) | State: opened | Author: wotnak, 407 diff lines Description: Canvas keeps page data and entity form values in shared client state. When SPA navigation changes the active entity, newly loaded data is merged into the existing state. Values and validation state from the previous entity can remain in the form and may be submitted when another field changes. To reproduce: 1. Open an entity with a distinct value in an optional Page data field. 2. Navigate through the Canvas SPA to another entity where that field is empty or has a different value. 3. Open the Page data form. 4. Change another field. The form may display or submit the value from the previous… ### [Document the recipe contract for Canvas content: ship canvas.component.* config (and generation runs after recipe content import)](https://git.drupalcode.org/project/canvas/-/work_items/3591659) State: closed | Updated: 2026-08-27 | Author: Alex Urevick-Ackelsberg (alexua) | Assigned: unassigned | Labels: Recipes initiative Description: Question for maintainers/docs rather than a bug report. Is shipping `canvas.component.*` config the intended contract for recipes that ship Canvas content? The `geo_starter` site template ships **11** such files (one per Mercury SDC its page trees use), and the Drupal CMS `byte` and `haven` site templates follow the same pattern — which suggests it is the de-facto contract. If that is the intended contract, documenting it (recipe-author docs or a change record) would save the next recipe author the diagnosis. A secondary observation, in case it belongs in the same docs: on this installer sta… ### [RecipeSubscriber is no longer needed, so remove it](https://git.drupalcode.org/project/canvas/-/work_items/3566813) State: closed | Updated: 2026-08-27 | Author: drupalbot | Assigned: Adam G-H (phenaproxima), Wim Leers (wimleers) | Labels: Drupal CMS release target, category::bug, code, priority::normal Description: >>> [!note] Migrated issue Reported by: [phenaproxima](https://www.drupal.org/user/205645) Related to !461 >>> Overview Canvas had a recipe event subscriber to ensure components were available at specific, necessary times (before content import, for example). This is a relic of component discovery being tied to volatile cache clears: a situation which, thankfully, is no longer the case. It works as expected now without this event subscriber, so let's just remove it. ### [Allow optional entity select fields to be cleared](https://git.drupalcode.org/project/canvas/-/work_items/3591997) State: opened | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1567 [fix: #3591997 Allow optional entity select fields to be cleared](https://git.drupalcode.org/project/canvas/-/merge_requests/1567) | State: opened | Author: wotnak, 202 diff lines Description: Drupal optional select widgets represent an empty selection with the `_none` sentinel. Canvas converts `_none` to `null` in the entity (Page data) form frontend so Redux state and JSON use a semantic empty value instead of a Drupal form implementation detail. The backend expands submitted entity form values with `http_build_query()`. This function omits `null` values, so the select field is missing from the reconstructed Drupal form submission and retains its previous value. Steps to reproduce: 1. Select a non-default page template for a Canvas page and publish it. 2. Change the Page templa… ### [Fatal error with config translation when page region contains rich text field](https://git.drupalcode.org/project/canvas/-/work_items/3591964) State: opened | Updated: 2026-08-27 | Author: Gábor Hojtsy (goba) | Assigned: unassigned | Labels: category::bug, state::needsReview, translation Description: 1. Install Drupal CMS with Haven. 2. Enable configuration translation. 3. Add a foreign language. 4. Try to add translation to Footer. ``` The website encountered an unexpected error. Try again later. Error: Call to a member function getValue() on null in Drupal\Core\Field\FieldItemList->getEntity() (line 54 of core/lib/Drupal/Core/Field/FieldItemList.php). Drupal\ckeditor5\Hook\Ckeditor5Hooks->fieldWidgetSingleElementFormAlter() (Line: 460) Drupal\Core\Extension\ModuleHandler->alter() (Line: 482) Drupal\Core\Field\WidgetBase->formSingleElement() (Line: 229) Drupal\Core\Field\WidgetBase->for… ### [Config in language other than site default language causes an exception](https://git.drupalcode.org/project/canvas/-/work_items/3591850) State: opened | Updated: 2026-08-27 | Author: Ted Bowman (tedbow) | Assigned: unassigned | Labels: category::bug, state::needsReview, translation Description: ### Problem When a Canvas config entity's `langcode` differs from the site default language, the Canvas editor throws exceptions. This happens when `PageRegion` (or `ContentTemplate`) entities are created while one language is the site default, and the site default is changed later. The entities keep their original `langcode`. Two exceptions: 1. `InvalidArgumentException: getTranslation() must not be called with the langcode of the default translation ("en")` — thrown when the preview validates a region with an auto-save draft. `CanvasConfigEntityTranslationsAreValidConstraintValidator` and… ### [RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it](https://git.drupalcode.org/project/canvas/-/work_items/3591996) State: opened | Updated: 2026-08-27 | Author: Jakub Piasecki (zaporylie) | Assigned: unassigned | Labels: category::bug, priority::critical Description: ## Overview Applying a site template recipe fails with: In ContainerBuilder.php line 1104: You have requested a synthetic service ("kernel"). The DIC does not know how to construct this service. `RecipeSubscriber::onApply()` calls `PageVariantMigration::migrateDefaultTheme()`, which calls `createFromPageRegions()`, which installs `canvas_page_template_component` when it is missing: ``` // src/PageVariantMigration.php:131 if (!\Drupal::moduleHandler()… ### [Improve page variant backward compatibility for recipes](https://git.drupalcode.org/project/canvas/-/work_items/3591967) State: closed | Updated: 2026-08-27 | Author: wotnak | Assigned: wotnak | Labels: state::fixed 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 AI: Add a Drupal Canvas Agent that answers general questions](https://git.drupalcode.org/project/canvas/-/work_items/3591924) State: opened | Updated: 2026-08-27 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint16, 2026Sprint17, AI Initiative Sprint, ai 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… --- MERGE REQUESTS (24h) --- ### [feat(Headless): Show only components managed by the current headless frontend](https://git.drupalcode.org/project/canvas/-/merge_requests/1543) State: opened | Author: Harumi Jang (hooroomoo) | Branch: dxfe-7-4 | 1214 diff lines Description: #3591975 AI Disclosure: Yes used GPT 5.4 to generate code - Stores frontend-owned external component IDs in canvas_headless.settings.frontends\[\*\].components. - Updates that ownership list on every headless component sync, so sidebar availability follows the latest synced state. - Reuses GET /canvas/api/v0/headless/frontends as the editor-readable source of frontend component ownership, while keeping PATCH admin-only. - Filters the Canvas sidebar so the selected headless frontend shows only its own external components. - Keeps drupalSettings unchanged as lightweight bootstrap data; compone… ### [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 | 55 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… ### [Refreshes editor layout model after server changes](https://git.drupalcode.org/project/canvas/-/merge_requests/1147) State: opened | Author: Krasimir Bachev (c2h2o5) | Branch: 3591346-editor-doesnt-refresh | 45 diff lines Description: Refreshes the editor's in-memory layout model to ensure server-side mutations are immediately reflected. Previously, changes made during `hook_entity_presave` or `hook_canvas_page_presave` (e.g., during the Publish flow), which invalidate the layout, would not surface in the editor without a full page reload. This change modifies the page data query endpoints to extract the latest `layout` and `model` from the API response and dispatches an update to the in-memory layout model. This ensures the editor's view remains synchronized with the server's state, improving the user experience by elimin… ### [#3591838 prevent duplicate names](https://git.drupalcode.org/project/canvas/-/merge_requests/1555) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-prevent-duplicate-color-names | 546 diff lines Description: Replaced the not-working `UniqueNamePerFolderTypeConstraint` with the broadly applied `UniqueColorNameConstraint` and added e2e test for it. ## Testing instructions - [ ] Try to create a color with a name that exists - note it is prevented w/validation message in the form - [ ] Try to update the name of a color to that of one that exists - note that it is prevented with a validation message appearing below the inline input. Closes #3591838 ### [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 | 2843 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… ### [bug(build): Turbo build does not invalidate drupal-canvas when schema.json changes](https://git.drupalcode.org/project/canvas/-/merge_requests/1572) State: opened | Author: Harumi Jang (hooroomoo) | Branch: turbo-build-schema-1x | 33 diff lines Description: #3592005 Discovered while reviewing [#3591973: Reconcile external document media through the CLI and HTTP API](https://git.drupalcode.org/project/canvas/-/merge_requests/1536#note_1981051) * `packages/drupal-canvas` imports the repository root `schema.json`, and that file affects the bundled `dist/json-render-utils.js` artifact. Turbo was not treating the root `schema.json` as an input for the `drupal-canvas` package, so `npm run packages:build` could reuse a cached `drupal-canvas` build after schema changes. * add a changeset for `drupal-canvas` so we get a new version of `drupal-canvas` th… ### [#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… ### [Draft: Stage Canvas autosaves in a dedicated Workspace](https://git.drupalcode.org/project/canvas/-/merge_requests/1056) State: opened | Author: Lauri Timmanee (lauriii) | Branch: 3588540-stage-canvas-autosaves | 6877 diff lines Description: AI-Generated: Yes, Cursor was used to assist with the creation of this MR. ## Testing instructions * [ ] Apply MR + Run update hooks * [ ] Test making changes + publishing them Closes #3588540 ### [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 | 5075 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… ### [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 | 4687 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… ### [#3591994: invalidate folder tags on color delete + test](https://git.drupalcode.org/project/canvas/-/merge_requests/1565) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591994-color-folders-in-ui-not-deletion-aware | 76 diff lines Description: Invalidate folder API tags on color delete so UI info about folder contents is current. Otherwise, any requests subsequent requests specific to that folder will reference a color that no longer exists and error (such as moving an item to that folder) Note that since this is only due to clientside RTK cache, a page refresh circumvents the problem - this makes it so the refresh is not needed/ ## Testing instructions * [ ] Delete a color within a folder * [ ] Immediately move another color into the folder you just deleted a color from * [ ] Confirm it moved into the new folder and no console… ### [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… ### [feat: #3518272 support all entity types with configurable displays for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/791) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3518272-field-ui-base-route | 2389 diff lines Description: Closes #3518272 . ### [#3591838 css variable name can be edited](https://git.drupalcode.org/project/canvas/-/merge_requests/1561) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-edit-css-var | 144 diff lines Description: This adds the ability to edit a Color's CSS var name vs only being able to set them on create It also made the popovers scrollable as the increased height makes out-of-viewport more likely to occur ![Screenshot 2026-08-25 at 1.28.52 PM.png](/uploads/c63de452c9ed4c49d57cde962b052283/Screenshot_2026-08-25_at_1.28.52_PM.png){width=245 height=488} No designs available at the time of creating the MR. This uses the same styling as the create form. ## Testing instructions * [ ] Edit the CSS var name on an existing color Closes #3591838 ### [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 | 109 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… ### [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 | 349 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… ### [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. ### [Add ltrim call](https://git.drupalcode.org/project/canvas/-/merge_requests/461) State: closed | Author: Adam G-H (phenaproxima) | Branch: 3566813-recipesubscriber-needs-to | 102 diff lines Description: Closes #3566813 ### [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 --- COMMITS (24h) --- - [68055a68](https://git.drupalcode.org/project/canvas/-/commit/68055a68187cd299ef3c069fef94123a2618f449) chore(Data model): #3591971 Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form — Wim Leers (2026-08-27T12:37:04.000+00:00) ======================================================================== ## [15] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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). ### [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-28 | Author: Kristen Pol (kepol) | Assigned: unassigned | 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), 23504 diff lines Description: ## Summary **READY FOR REVIEW AND TESTING!!!** **MULTIPLE REVIEWERS/TESTERS ARE WELCOME TO REVIEW/TEST AT THE SAME TIME** **MULTIPLE ASSIGNEES ARE ALLOWED ON ISSUES SO ASSIGN EVEN IF YOU SEE OTHERS ASSIGNED** **NOTE TO REVIEWERS: THIS IS A MONSTER MR** - **YOU ARE NOT EXPECTED TO MANUALLY REVIEW THE CODE CHANGES (I HAVE DONE THAT EXCEPT FOR TESTS)** - **IT WOULD BE HELPFUL IF YOU MANUALLY REVIEWED THE NEW API METHODS BUT THAT'S NOT STRICTLY REQUIRED** - **HAVE YOUR AGENT(S) REVIEW THE CODE AND TEST IT (I HAVE USED GROK AND OPUS 5, SO USING DIFFERENT MODELS IS HELPFUL)** - **MANUAL TESTING… ### [Review all public CCC API naming and signatures before beta5 is tagged](https://git.drupalcode.org/project/ai_context/-/work_items/3586444) State: opened | Updated: 2026-08-27 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint17, AI Initiative Sprint, ai::internal, category::task Description: ## Problem/motivation Last call for changes ## Solution Do a final pass for any weird names/signatures/etc for public API Explicit naming things to review - check comments, lots there, some already handled in !283 - "request" usage, still using this in a lot of places - using "provider" with request? - using "invocation" - "router" vs "negotiator" - "match" for things other than selection matching - make excluded_request_tags configurable? - "candidate" for things other than selection matching - AiContextSelectionItemsSelectedEvent is a mouthful - AiContextItemsSelectedEvent / AiContextT… ### [Update Chicago demo with generic consumer patch after 1.0](https://git.drupalcode.org/project/ai_context/-/work_items/3586457) State: opened | Updated: 2026-08-27 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: category::plan, priority::normal, state::postponed, what::planning Description: ## Problem/motivation After #3586346+s, the agents config goes away and is replaced by consumer config. This breaks the configaction in the Chicago demo repo. ## Solution Add an issue in the github queue with this patch: [ai_context-consumers-demo-configaction.patch](https://git.drupalcode.org/-/project/191993/uploads/19804f53a703f83e39787ba1e92e87b6/ai_context-consumers-demo-configaction.patch) ### [Add automated CCC tests for remaining 1.0 coverage gaps](https://git.drupalcode.org/project/ai_context/-/work_items/3586455) State: opened | Updated: 2026-08-27 | 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 !286 [Issue #3586455: Add kernel tests for requirements hook, entity item cache...](https://git.drupalcode.org/project/ai_context/-/merge_requests/286) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 528 diff lines Description: ## Description Follow-up to: #3586454+s That plan reviewed the CCC suite against the codebase and listed material gaps. This issue adds those tests in one pass. The suite already covers the selection ladder, scope plugins, EchoAI injection families, access matrix, tools, scheduler, and usage tracker internals. What is missing is mostly thin kernel coverage of hooks, cache contexts, storage bypasses, and event wiring that would otherwise regress without a failing test. Do not re-test entity-item view-builder access cacheability from #3586422+s. `AiContextScopeEntityItemTest` already assert… ### [[Discuss] Provide a Drupal token that renders CCC context, for no-code injection into AI Automator (and other token-based) prompts](https://git.drupalcode.org/project/ai_context/-/work_items/3586417) State: opened | Updated: 2026-08-27 | Author: Jibran Ijaz (jibran) | Assigned: unassigned | Labels: 2026Sprint17, AI Initiative Sprint, ai::inside, category::plan Description: Moving this from a feature issue to a discussion issue. You can look at the MR for reference but don't review it with an LLM unless you are just doing that to form an opinion/assessment of whether tokens make sense at all. ## Summary Automators do not use agents and, thus, do not get context items added. One idea (see original summary below) is to use tokens to allow context items to be added to automators in a simple way. Other systems that support tokens could use these as well. ## Solution Assess whether or not it makes to add tokens to pull in context items. There is an MR to explore t… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [16] summariseModule:ai_search:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-08-27T10:02:25+00:00 to 2026-08-28T10:02:25+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 Search

                              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). ### [Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped](https://git.drupalcode.org/project/ai_search/-/work_items/3584048) State: opened | Updated: 2026-08-28 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: Description: This issue was raised during code review of MR [!1970](https://git.drupalcode.org/project/ai/-/merge_requests/1970/diffs#note_2025548), while verifying the changes that reinstate the ai_search submodule. The standalone module updates AI Search indexes to include `exclude_title` setting in [`10006`](https://git.drupalcode.org/project/ai_search/-/blob/1.3.0-alpha3/ai_search.install?ref_type=tags#L293). Therefore, when upgrading from the submodule bundled with AI `1.4.x` or `1.5.x`, to the standalone module, update `10006` will be skipped if the submodule's update `10006` has already been ap… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [17] summariseModule:ai_translate:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: chander bhushan (chander123)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                AI translate

                                then use

                                ,

                                ,

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

                                  How can I help on this project?

                                  " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations](https://git.drupalcode.org/project/ai_translate/-/work_items/3585548) State: opened | Updated: 2026-08-28 | Author: Vishal Choudhary (VishalChoudhary) | Assigned: unassigned | Labels: category::bug, needs port to 2.x, priority::major, state::needsWork Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !42 [Referenced Entities and Overwrites Existing Manual Translations Fixed issue #3585548](https://git.drupalcode.org/project/ai_translate/-/merge_requests/42) | State: opened | Author: chander bhushan (chander123), 332 diff lines Description: When translating a content entity using the **AI Translate** functionality, the translation process also processes entities referenced through an **Entity Reference** field. This can result in an already translated and manually edited referenced entity being translated again as part of the same batch process. As a result, the manually modified translation of the referenced entity can be overwritten. ## Steps to Reproduce ### 1. Create Two Content Types Create the following two content types: - **Test A** - **Test B** ### 2. Configure an Entity Reference Add an **Entity Reference** field… ### [Followup: update module documentation about agentic functionalities / orchestrator service](https://git.drupalcode.org/project/ai_translate/-/work_items/3585551) State: opened | Updated: 2026-08-27 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: Novice, Quick Win, category::task, documentation Description: Follow up to https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 : - docs/developers doesn't document the new orchestrator service, or how to use it in own code. - Docs do not document the ability to use AiFunctionCall plugin, or Tool API plugin Resources to base the documentation on: - The committed code - The original work item: https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 - The change record: https://www.drupal.org/node/3619537 ### [Refactor translation workflow to support Tool API and agent-driven translation](https://git.drupalcode.org/project/ai_translate/-/work_items/3585523) State: closed | Updated: 2026-08-27 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: 2026Sprint15, 2026Sprint16, AI Initiative Sprint, ai::inside Description: I am investigating whether I can have an AI Agent perform an entity translation, when a user requests this as part of an administrative AI agent interface. This would probably need some major refactoring of the module logic, since there are currently 2 endpoints: - UI batch translation - Drush command translation This would add a third one: Tool API translation So logic should be abstracted as much as possible where relevant, so all 3 entry points use the same code, rather than replicating it. I haven't investigated this further in detail, but already raising an issue here, in case someone … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [18] 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-27T10:02:25+00:00 to 2026-08-28T10:02:25+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: Shibin Das [2]". 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

                                  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). ### [Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path](https://git.drupalcode.org/project/flowdrop/-/work_items/3592434) State: opened | Updated: 2026-08-27 | Author: Shibin Das (D34dMan) | Assigned: unassigned | Labels: Description: ## Problem Every HITL interrupt raised **after** the first one in a session renders as an empty "Action Required" bubble with no controls — no Approve/Decline buttons, no text field. The run is unresolvable from the UI and the session sits at `awaiting_input` forever. The first interrupt of a session renders correctly, which is what makes this easy to miss: a workflow has to reach a *second* interrupt to expose it. ## Steps to reproduce 1. Build a workflow with a Text Input (Interrupt) node feeding an HTTP Request node that has approval enabled — i.e. two interrupts, one after the other… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- - [269c18de](https://git.drupalcode.org/project/flowdrop/-/commit/269c18de34adbea8298c4bf96d23fe6e00a99993) chore: stamp 2.4.2 and mark the new bridge internal — Shibin Das (2026-08-27T13:45:32.000+02:00) - [8e7493c1](https://git.drupalcode.org/project/flowdrop/-/commit/8e7493c1beb550209617902c35128e4797e093f2) fix(flowdrop_session): #3592434 an interrupt raised after a resume can be answered — Shibin Das (2026-08-27T13:10:44.000+02:00) ======================================================================== ## [19] 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] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [2] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [3] Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="") (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586624 [4] AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586654 [5] Reinstate ai_search and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586698 [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] Reinstate AI CKEditor in composer.json and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586699 [9] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [10] PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586701 [11] Define an error strategy for unavailable model catalogs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586700 [12] 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 [13] 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 [14] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [15] QA testing: 1.5.0 update from 1.4.x test plan (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586696 [16] bug: #3586624 Streaming chat forces plain-text hostname filtering, corrupting... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1883 [17] bug: #3586654 AiAutomatorEntityModifier::entityHasConfig() ignores the AI... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1915 [18] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [19] Issue #3586698: Reinstate AI Search (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1970 [20] Issue #3586699: Reinstate AI CKEditor (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1969 [21] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [22] Enterprise AI Summit: registration and sponsorship update with Michaela (2026-08-28) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586782 [23] Enterprise AI Summit: core team sync — budget, registrations, Drupalcon, comms (2026-08-26) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586781 [24] Update AI CMS recipe for CMS 2.2 release (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586780 [25] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [26] Implement exposing raw vector (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3525329 [27] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [28] feat: #3610509 Add batch embeddings (ai_vdb_provider_postgres, MR) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30 [29] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [30] Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592005 [31] Translating a content template WSOD when the template has an optional link input with no value (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592006 [32] Image removal in SDC field causes bug on re-render (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3548247 [33] updateExistingComponentValues() never cancels an update that names a prop the component does not have (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592004 [34] Trim the chat history after filtering so progress entries do not consume the window (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592003 [35] Normalize agent-written prop values against their schema and report values the component source cannot store (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592002 [36] Page variants entirely lack translation preview support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592001 [37] Auto-save draft on a global region, created before it has a translation, breaks editing on every page (assert(component_id) crash) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591998 [38] [PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3565712 [39] Component version hashes go stale on single-process installs: prop-shape re-resolution is deferred to teardown and skipped on a cold cache (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591916 [40] Automatically create components when themes are installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591898 [41] Translating a component tree config entity (such as PageVariant) that has an auto-save draft breaks Canvas layout validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592000 [42] Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591971 [43] Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3571366 [44] Docs oriented to recipe authors integrating with Canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3564135 [45] Reset entity form state during SPA navigation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591999 [46] Document the recipe contract for Canvas content: ship canvas.component.* config (and generation runs after recipe content import) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591659 [47] RecipeSubscriber is no longer needed, so remove it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3566813 [48] Allow optional entity select fields to be cleared (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591997 [49] Fatal error with config translation when page region contains rich text field (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591964 [50] Config in language other than site default language causes an exception (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591850 [51] RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591996 [52] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [53] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [54] feat(Headless): Show only components managed by the current headless frontend (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1543 [55] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [56] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [57] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [58] Refreshes editor layout model after server changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1147 [59] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [60] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [61] bug(build): Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1572 [62] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [63] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [64] Issue #3592006: Translating a content template WSODs when the template has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1571 [65] Issue #3592001: Page variants entirely lack translation preview support (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1570 [66] 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 [67] 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 [68] #3591994: invalidate folder tags on color delete + test (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1565 [69] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [70] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [71] fix: #3591997 Allow optional entity select fields to be cleared (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1567 [72] Draft: fix: #3591999 Reset entity form state during SPA navigation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1569 [73] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [74] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [75] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [76] Issue #3592000: Translating a component tree config entity that has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1568 [77] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [78] #3591971: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1532 [79] Add ltrim call (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/461 [80] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [81] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [82] Review all public CCC API naming and signatures before beta5 is tagged (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586444 [83] Update Chicago demo with generic consumer patch after 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586457 [84] Add automated CCC tests for remaining 1.0 coverage gaps (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586455 [85] [Discuss] Provide a Drupal token that renders CCC context, for no-code injection into AI Automator (and other token-based) prompts (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586417 [86] 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 [87] Issue #3586455: Add kernel tests for requirements hook, entity item cache... (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/286 [88] Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584048 [89] AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585548 [90] Followup: update module documentation about agentic functionalities / orchestrator service (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585551 [91] Refactor translation workflow to support Tool API and agent-driven translation (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 [92] Referenced Entities and Overwrites Existing Manual Translations Fixed issue #3585548 (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/42 [93] Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592434 --- MODULE SUMMARIES ---

                                      AI (Artificial Intelligence)

                                      Work this period focused on addressing compatibility gaps and preparing for the upcoming 1.5.0 release. Two previously removed submodules—AI Search and AI CKEditor—are being reinstated in deprecated form to provide a proper upgrade path for existing users before final removal in version 1.6.0. This corrects an earlier oversight where these components were removed without following standard deprecation practices.

                                      Several bugs affecting content processing were identified and are now being addressed. A fix is in progress for an issue where automators configured to populate fields based on other content would ignore the source material unless a specific token was manually referenced in the prompt—confusing for users who expected the source content to be automatically included. Another fix targets a problem where streaming chat responses would corrupt URLs embedded in HTML attributes. Work also began on ensuring that disabled automators actually stop running when turned off.

                                      On the architecture front, development continued on integrating Symfony's AI framework for embeddings support, which will expand the module's machine learning capabilities. A quality assurance plan for the 1.5.0 release was completed, and testing of the upgrade path from version 1.4.x is now underway.

                                      How can I help on this project?

                                      Assign resources to complete QA testing of the 1.5.0 upgrade path, which has documentation ready but needs execution. Consider whether to prioritize resolution of the agent-context bug, which creates functional differences between assistant modes that may confuse users.

                                      Contributors: Ann Mary Sruthy (annmarysruthy), Konstantine Kirkitadze (kotekirkitadze), Miguel Guerreiro (gueguerreiro), Rob Loach (robloach), Scott Euser (scotteuser) ---

                                      Drupal AI Initiative

                                      The past 24 hours saw continued progress on the Enterprise AI Summit, planned for later this year. Two planning sessions were completed, covering budget planning, registration tracking, and sponsorship coordination. The summit is currently tracking 44 paid registrations against a 100-attendee goal, with an estimated income projection of approximately 10,000 EUR before final costs. Sponsorship sales are underway, and adjustments to sponsor benefit descriptions (such as clarifying venue signage) are being finalized to ensure accurate communications.

                                      On the product side, a planning issue was opened to Update AI CMS recipe for CMS 2.2 release, which will ship in the next few weeks. This ensures the AI capabilities remain current and aligned with the broader CMS platform.

                                      A new meta-issue was also created to explore EU AI Act Article 50 transparency module, addressing new compliance requirements that took effect in August 2026. This regulation mandates disclosure of AI-generated content in certain public-facing contexts, with significant financial penalties for non-compliance. Early planning work positions the initiative to help site operators meet these obligations.

                                      How can I help on this project?

                                      • Support registration outreach for the Enterprise AI Summit to reach the 100-attendee target and secure remaining sponsorship commitments.
                                      • Prioritize resourcing for the EU AI Act compliance module to address the August 2026 regulatory deadline affecting site operators across Europe.
                                      ---

                                      Postgres VDB Provider

                                      The Postgres vector database provider made progress on two feature enhancements aimed at improving search performance and indexing efficiency. A merge request was opened to implement batch embeddings, which will allow the system to process and store multiple content chunks in a single operation rather than one at a time. This change directly reduces the time required to index content for search, particularly important for organizations maintaining large content repositories.

                                      Additionally, work continued on exposing raw vector data, which would enable more sophisticated search result ranking without requiring additional database queries. Both features are part of broader improvements across the AI module ecosystem to make intelligent search faster and more efficient for end users.

                                      The module remains in active development with normal feature iteration underway.

                                      How can I help on this project?

                                      • Ensure testing resources are available to validate batch embedding performance improvements once implementation is complete
                                      • Clarify whether raw vector exposure aligns with your organization's data governance and search quality requirements

                                      Contributors: Sergiu Nagailic (Nikro)

                                      ---

                                      Drupal Canvas

                                      During this period, development focused on stabilising the data model, improving translation workflows, and resolving installation and configuration issues.

                                      A critical fix was merged that tightens validation rules for component trees. The system now detects and rejects circular parent references, identifies duplicate identifiers with clearer error messages, and enforces consistent formatting of internal component references. This prevents edge-case data corruption scenarios that could previously pass validation but cause silent failures during page rendering.

                                      Two critical issues affecting multi-language sites were identified. Work is underway to resolve crashes when translating page variants or content templates that have unsaved draft changes, and to fix a crash when translating templates that contain optional link fields with no value set. Translation preview for page variants is also not working — the editor shows content in the site default language even when a translation exists and renders correctly on the front end.

                                      Installation reliability improved with the closure of an issue where component version metadata went stale during command-line or single-process installs, and documentation was added confirming that recipes shipping Canvas content should include component configuration files. A remaining critical issue prevents recipe application when a subscriber attempts to install a module mid-process.

                                      Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Gábor Hojtsy (goba), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Krasimir Bachev (c2h2o5), Lauri Timmanee (lauriii), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wim Leers (wimleers) [1], wotnak

                                      How can I help on this project?

                                      • Prioritise resolution of the translation issues to unblock multi-language site deployments, particularly the draft-related editor crash and missing preview support for page variants.
                                      • Allocate resources to resolve the critical recipe application failure that blocks installation workflows.
                                      ---

                                      Context Control Center (CCC)

                                      The project is preparing for a major architecture update that will enable more flexible context delivery across different AI integration patterns. A large refactor implementing plugin-based generic context consumers and unified consumer configuration is now ready for review and testing. This change replaces the current agent-specific approach with a more generalized system that can serve context to any type of AI consumer, broadening the module's applicability.

                                      In parallel, work is underway to expand test coverage through automated tests for remaining gaps, focusing on areas not yet exercised by the existing suite. A final review of all public API naming and signatures has been initiated before the next beta release, ensuring consistency and clarity for developers building on this module.

                                      A planning discussion is exploring whether token-based injection would be a practical way to deliver context to systems that do not use agents, such as AI Automator. Decisions made here will influence how non-technical users can configure AI context without custom code.

                                      How can I help on this project?

                                      • Prioritize review bandwidth: the architecture refactor is ready for testing and requires multiple reviewers to validate quality and approach before merge.
                                      • Clarify strategic direction on token support to unblock the planning discussion and align the roadmap with user needs.

                                      Contributors: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Jibran Ijaz (jibran)

                                      ---

                                      AI Search

                                      A technical issue was identified during the recent code review process related to how the module handles upgrades from earlier configurations. The problem involves a conflict in the upgrade process that could cause certain configuration updates to be skipped when sites transition from one version to another. Specifically, an update hook collision issue was documented that affects the migration of search index settings.

                                      This is relevant for sites that previously used an older bundled version and are now moving to the standalone module. If left unresolved, some search indexes may not receive updated configuration, potentially affecting search behavior. The issue has been documented and is now tracked for resolution, but no fix has been implemented yet.

                                      Given the module's alpha stage, open issues of this nature are expected as the project matures toward a stable release.

                                      How can I help on this project?

                                      • Prioritize developer time to resolve the upgrade path issue, as it affects sites migrating between module versions.
                                      • Support testing efforts with real-world migration scenarios to validate fixes before broader deployment.
                                      ---

                                      AI translate

                                      The AI translate module continued development work on two fronts during this period. A new issue was raised concerning a bug where the translation process can inadvertently overwrite manually edited translations of referenced content. When translating content that references other entities, the system currently re-processes those referenced items even if they have already been translated and customised by users. A merge request addressing this problem has been opened and is under review.

                                      Separately, work on agent-driven translation capabilities reached completion, with the Refactor translation workflow to support Tool API and agent-driven translation issue now closed. This work modernises the module's architecture to enable AI agents to perform translations alongside existing batch and command-line methods. A follow-up issue was created to update module documentation about agentic functionalities / orchestrator service, ensuring that developers understand how to leverage these new capabilities.

                                      How can I help on this project?

                                      • Allocate documentation resources to complete the follow-up documentation task, which has been identified as suitable for new contributors and quick to complete.
                                      • Ensure testing resources are available to validate the referenced entity translation fix before it reaches production users.

                                      Contributors: chander bhushan (chander123)

                                      ---

                                      FlowDrop

                                      FlowDrop released version 2.4.2 during the reporting period, addressing a significant usability issue that affected workflows requiring multiple user approvals or inputs. Previously, when a workflow needed a second user action after the first had been completed, the interface would display an empty prompt with no way to respond, leaving the workflow stuck indefinitely. This has been resolved, ensuring that users can now complete multi-step approval processes without encountering dead-ends.

                                      The fix addresses Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path, which was discovered when testing workflows that combine data collection and approval steps. The issue was subtle because initial prompts worked correctly, only revealing the problem on subsequent interactions within the same session.

                                      How can I help on this project?

                                      Consider allocating resources for expanded regression testing to catch multi-step workflow scenarios earlier. If FlowDrop is approaching production use, prioritizing user acceptance testing with real approval workflows would validate the fix and surface similar edge cases before they affect end users.

                                      Contributors: Shibin Das [2]

                                      ======================================================================== ## [20] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 1 Judge flags: 0 ======================================================================== ## [21] 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] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [2] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [3] Streaming chat forces plain-text hostname filtering, corrupting URLs inside HTML attributes (e.g., href="") (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586624 [4] AiAutomatorEntityModifier::entityHasConfig() ignores the AI Automator's disabled (status: false) setting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586654 [5] Reinstate ai_search and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586698 [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] Reinstate AI CKEditor in composer.json and deprecate it before removal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586699 [9] Agent-backed assistants drop the page context that classic assistants consume (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586681 [10] PlatformProxy bypasses PreGenerateResponseEvent, PostGenerateResponseEvent and AiExceptionEvent (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586701 [11] Define an error strategy for unavailable model catalogs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586700 [12] 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 [13] 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 [14] Write QA plan for 1.5.0 (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586684 [15] QA testing: 1.5.0 update from 1.4.x test plan (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586696 [16] bug: #3586624 Streaming chat forces plain-text hostname filtering, corrupting... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1883 [17] bug: #3586654 AiAutomatorEntityModifier::entityHasConfig() ignores the AI... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1915 [18] Resolve #3586495 "Add support embeddings via symfony/ai" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1856 [19] Issue #3586698: Reinstate AI Search (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1970 [20] Issue #3586699: Reinstate AI CKEditor (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1969 [21] Issue #3586659 by kotekirkitadze, annmarysruthy, Adrianm6254: State the {{... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1962 [22] Enterprise AI Summit: registration and sponsorship update with Michaela (2026-08-28) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586782 [23] Enterprise AI Summit: core team sync — budget, registrations, Drupalcon, comms (2026-08-26) (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586781 [24] Update AI CMS recipe for CMS 2.2 release (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586780 [25] [Meta] ai_disclosure: EU AI Act Article 50 transparency module (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586640 [26] Implement exposing raw vector (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3525329 [27] Add batch embeddings (ai_vdb_provider_postgres, Issue) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/work_items/3610509 [28] feat: #3610509 Add batch embeddings (ai_vdb_provider_postgres, MR) — https://git.drupalcode.org/project/ai_vdb_provider_postgres/-/merge_requests/30 [29] Canvas AI: Add a dev page builder agent and wire the placement tools (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591921 [30] Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592005 [31] Translating a content template WSOD when the template has an optional link input with no value (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592006 [32] Image removal in SDC field causes bug on re-render (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3548247 [33] updateExistingComponentValues() never cancels an update that names a prop the component does not have (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592004 [34] Trim the chat history after filtering so progress entries do not consume the window (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592003 [35] Normalize agent-written prop values against their schema and report values the component source cannot store (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592002 [36] Page variants entirely lack translation preview support (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592001 [37] Auto-save draft on a global region, created before it has a translation, breaks editing on every page (assert(component_id) crash) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591998 [38] [PP-1] Add logic + docs to not ship Component config entities with Drupal extensions (modules, themes, recipes), and how to do it anyway when there's a good enough reason (pre-populated component trees in Canvas Pages or ContentTemplates) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3565712 [39] Component version hashes go stale on single-process installs: prop-shape re-resolution is deferred to teardown and skipped on a cold cache (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591916 [40] Automatically create components when themes are installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591898 [41] Translating a component tree config entity (such as PageVariant) that has an auto-save draft breaks Canvas layout validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3592000 [42] Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591971 [43] Allow Canvas Patterns+PageRegions+ContentTemplates provided by Recipes to NOT specify component versions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3571366 [44] Docs oriented to recipe authors integrating with Canvas (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3564135 [45] Reset entity form state during SPA navigation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591999 [46] Document the recipe contract for Canvas content: ship canvas.component.* config (and generation runs after recipe content import) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591659 [47] RecipeSubscriber is no longer needed, so remove it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3566813 [48] Allow optional entity select fields to be cleared (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591997 [49] Fatal error with config translation when page region contains rich text field (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591964 [50] Config in language other than site default language causes an exception (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591850 [51] RecipeAppliedEvent listener installs a module and invalidates the container for every listener after it (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591996 [52] Improve page variant backward compatibility for recipes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591967 [53] Canvas AI: Add a Drupal Canvas Agent that answers general questions (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591924 [54] feat(Headless): Show only components managed by the current headless frontend (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1543 [55] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [56] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [57] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [58] Refreshes editor layout model after server changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1147 [59] #3591838 prevent duplicate names (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1555 [60] feat(Headless): #3591962 Enable page variants in Canvas Headless (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1542 [61] bug(build): Turbo build does not invalidate drupal-canvas when schema.json changes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1572 [62] #3591973: Reconcile external document media through the CLI and HTTP API (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1536 [63] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [64] Issue #3592006: Translating a content template WSODs when the template has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1571 [65] Issue #3592001: Page variants entirely lack translation preview support (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1570 [66] 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 [67] 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 [68] #3591994: invalidate folder tags on color delete + test (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1565 [69] issue #3591965: add condition to just load lib on required theme (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1529 [70] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [71] fix: #3591997 Allow optional entity select fields to be cleared (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1567 [72] Draft: fix: #3591999 Reset entity form state during SPA navigation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1569 [73] #3591838 css variable name can be edited (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1561 [74] 3591983: Brand Kit: Fix double-escaped markup in duplicate CSS variable error message (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1551 [75] User cannot publish changes after unpublishing a page when Metatag module is installed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1467 [76] Issue #3592000: Translating a component tree config entity that has an... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1568 [77] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1527 [78] #3591971: Tighten component tree UUID validation: reject parent cycles, name duplicate-UUID offenders, require lowercase canonical form (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1532 [79] Add ltrim call (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/461 [80] Check for the recipe runner (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1554 [81] Implement plugin-based generic context consumers and unified consumer configuration (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586346 [82] Review all public CCC API naming and signatures before beta5 is tagged (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586444 [83] Update Chicago demo with generic consumer patch after 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586457 [84] Add automated CCC tests for remaining 1.0 coverage gaps (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586455 [85] [Discuss] Provide a Drupal token that renders CCC context, for no-code injection into AI Automator (and other token-based) prompts (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586417 [86] 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 [87] Issue #3586455: Add kernel tests for requirements hook, entity item cache... (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/286 [88] Update hook 10006 collides between the standalone ai_search module and the bundled submodule, causing the exclude_title migration to be skipped (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584048 [89] AI Translate Re-translates Referenced Entities and Overwrites Existing Manual Translations (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585548 [90] Followup: update module documentation about agentic functionalities / orchestrator service (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585551 [91] Refactor translation workflow to support Tool API and agent-driven translation (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585523 [92] Referenced Entities and Overwrites Existing Manual Translations Fixed issue #3585548 (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/42 [93] Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path (flowdrop, Issue) — https://git.drupalcode.org/project/flowdrop/-/work_items/3592434 --- TODAY'S MODULE SUMMARIES ---

                                        AI (Artificial Intelligence)

                                        Work this period focused on addressing compatibility gaps and preparing for the upcoming 1.5.0 release. Two previously removed submodules—AI Search and AI CKEditor—are being reinstated in deprecated form to provide a proper upgrade path for existing users before final removal in version 1.6.0. This corrects an earlier oversight where these components were removed without following standard deprecation practices.

                                        Several bugs affecting content processing were identified and are now being addressed. A fix is in progress for an issue where automators configured to populate fields based on other content would ignore the source material unless a specific token was manually referenced in the prompt—confusing for users who expected the source content to be automatically included. Another fix targets a problem where streaming chat responses would corrupt URLs embedded in HTML attributes. Work also began on ensuring that disabled automators actually stop running when turned off.

                                        On the architecture front, development continued on integrating Symfony's AI framework for embeddings support, which will expand the module's machine learning capabilities. A quality assurance plan for the 1.5.0 release was completed, and testing of the upgrade path from version 1.4.x is now underway.

                                        How can I help on this project?

                                        Assign resources to complete QA testing of the 1.5.0 upgrade path, which has documentation ready but needs execution. Consider whether to prioritize resolution of the agent-context bug, which creates functional differences between assistant modes that may confuse users.

                                        Contributors: Ann Mary Sruthy (annmarysruthy), Konstantine Kirkitadze (kotekirkitadze), Miguel Guerreiro (gueguerreiro), Rob Loach (robloach), Scott Euser (scotteuser) ---

                                        Drupal AI Initiative

                                        The past 24 hours saw continued progress on the Enterprise AI Summit, planned for later this year. Two planning sessions were completed, covering budget planning, registration tracking, and sponsorship coordination. The summit is currently tracking 44 paid registrations against a 100-attendee goal, with an estimated income projection of approximately 10,000 EUR before final costs. Sponsorship sales are underway, and adjustments to sponsor benefit descriptions (such as clarifying venue signage) are being finalized to ensure accurate communications.

                                        On the product side, a planning issue was opened to Update AI CMS recipe for CMS 2.2 release, which will ship in the next few weeks. This ensures the AI capabilities remain current and aligned with the broader CMS platform.

                                        A new meta-issue was also created to explore EU AI Act Article 50 transparency module, addressing new compliance requirements that took effect in August 2026. This regulation mandates disclosure of AI-generated content in certain public-facing contexts, with significant financial penalties for non-compliance. Early planning work positions the initiative to help site operators meet these obligations.

                                        How can I help on this project?

                                        • Support registration outreach for the Enterprise AI Summit to reach the 100-attendee target and secure remaining sponsorship commitments.
                                        • Prioritize resourcing for the EU AI Act compliance module to address the August 2026 regulatory deadline affecting site operators across Europe.
                                        ---

                                        Postgres VDB Provider

                                        The Postgres vector database provider made progress on two feature enhancements aimed at improving search performance and indexing efficiency. A merge request was opened to implement batch embeddings, which will allow the system to process and store multiple content chunks in a single operation rather than one at a time. This change directly reduces the time required to index content for search, particularly important for organizations maintaining large content repositories.

                                        Additionally, work continued on exposing raw vector data, which would enable more sophisticated search result ranking without requiring additional database queries. Both features are part of broader improvements across the AI module ecosystem to make intelligent search faster and more efficient for end users.

                                        The module remains in active development with normal feature iteration underway.

                                        How can I help on this project?

                                        • Ensure testing resources are available to validate batch embedding performance improvements once implementation is complete
                                        • Clarify whether raw vector exposure aligns with your organization's data governance and search quality requirements

                                        Contributors: Sergiu Nagailic (Nikro)

                                        ---

                                        Drupal Canvas

                                        During this period, development focused on stabilising the data model, improving translation workflows, and resolving installation and configuration issues.

                                        A critical fix was merged that tightens validation rules for component trees. The system now detects and rejects circular parent references, identifies duplicate identifiers with clearer error messages, and enforces consistent formatting of internal component references. This prevents edge-case data corruption scenarios that could previously pass validation but cause silent failures during page rendering.

                                        Two critical issues affecting multi-language sites were identified. Work is underway to resolve crashes when translating page variants or content templates that have unsaved draft changes, and to fix a crash when translating templates that contain optional link fields with no value set. Translation preview for page variants is also not working — the editor shows content in the site default language even when a translation exists and renders correctly on the front end.

                                        Installation reliability improved with the closure of an issue where component version metadata went stale during command-line or single-process installs, and documentation was added confirming that recipes shipping Canvas content should include component configuration files. A remaining critical issue prevents recipe application when a subscriber attempts to install a module mid-process.

                                        Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), Ahmad Khalil (ahmad-khalil-imagex), Ben Mullins (bnjmnm), Bálint Kléri (balintbrews), Chandan Singh (chandu7929), Gábor Hojtsy (goba), Harumi Jang (hooroomoo), julio retkwa (julioretkwa), Krasimir Bachev (c2h2o5), Lauri Timmanee (lauriii), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR), Wim Leers (wimleers) [1], wotnak

                                        How can I help on this project?

                                        • Prioritise resolution of the translation issues to unblock multi-language site deployments, particularly the draft-related editor crash and missing preview support for page variants.
                                        • Allocate resources to resolve the critical recipe application failure that blocks installation workflows.
                                        ---

                                        Context Control Center (CCC)

                                        The project is preparing for a major architecture update that will enable more flexible context delivery across different AI integration patterns. A large refactor implementing plugin-based generic context consumers and unified consumer configuration is now ready for review and testing. This change replaces the current agent-specific approach with a more generalized system that can serve context to any type of AI consumer, broadening the module's applicability.

                                        In parallel, work is underway to expand test coverage through automated tests for remaining gaps, focusing on areas not yet exercised by the existing suite. A final review of all public API naming and signatures has been initiated before the next beta release, ensuring consistency and clarity for developers building on this module.

                                        A planning discussion is exploring whether token-based injection would be a practical way to deliver context to systems that do not use agents, such as AI Automator. Decisions made here will influence how non-technical users can configure AI context without custom code.

                                        How can I help on this project?

                                        • Prioritize review bandwidth: the architecture refactor is ready for testing and requires multiple reviewers to validate quality and approach before merge.
                                        • Clarify strategic direction on token support to unblock the planning discussion and align the roadmap with user needs.

                                        Contributors: Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Jibran Ijaz (jibran)

                                        ---

                                        AI Search

                                        A technical issue was identified during the recent code review process related to how the module handles upgrades from earlier configurations. The problem involves a conflict in the upgrade process that could cause certain configuration updates to be skipped when sites transition from one version to another. Specifically, an update hook collision issue was documented that affects the migration of search index settings.

                                        This is relevant for sites that previously used an older bundled version and are now moving to the standalone module. If left unresolved, some search indexes may not receive updated configuration, potentially affecting search behavior. The issue has been documented and is now tracked for resolution, but no fix has been implemented yet.

                                        Given the module's alpha stage, open issues of this nature are expected as the project matures toward a stable release.

                                        How can I help on this project?

                                        • Prioritize developer time to resolve the upgrade path issue, as it affects sites migrating between module versions.
                                        • Support testing efforts with real-world migration scenarios to validate fixes before broader deployment.
                                        ---

                                        AI translate

                                        The AI translate module continued development work on two fronts during this period. A new issue was raised concerning a bug where the translation process can inadvertently overwrite manually edited translations of referenced content. When translating content that references other entities, the system currently re-processes those referenced items even if they have already been translated and customised by users. A merge request addressing this problem has been opened and is under review.

                                        Separately, work on agent-driven translation capabilities reached completion, with the Refactor translation workflow to support Tool API and agent-driven translation issue now closed. This work modernises the module's architecture to enable AI agents to perform translations alongside existing batch and command-line methods. A follow-up issue was created to update module documentation about agentic functionalities / orchestrator service, ensuring that developers understand how to leverage these new capabilities.

                                        How can I help on this project?

                                        • Allocate documentation resources to complete the follow-up documentation task, which has been identified as suitable for new contributors and quick to complete.
                                        • Ensure testing resources are available to validate the referenced entity translation fix before it reaches production users.

                                        Contributors: chander bhushan (chander123)

                                        ---

                                        FlowDrop

                                        FlowDrop released version 2.4.2 during the reporting period, addressing a significant usability issue that affected workflows requiring multiple user approvals or inputs. Previously, when a workflow needed a second user action after the first had been completed, the interface would display an empty prompt with no way to respond, leaving the workflow stuck indefinitely. This has been resolved, ensuring that users can now complete multi-step approval processes without encountering dead-ends.

                                        The fix addresses Interrupts raised after a resume render as an empty "Action Required" bubble: the schema_form→presentation translation is missing on the resume path, which was discovered when testing workflows that combine data collection and approval steps. The issue was subtle because initial prompts worked correctly, only revealing the problem on subsequent interactions within the same session.

                                        How can I help on this project?

                                        Consider allocating resources for expanded regression testing to catch multi-step workflow scenarios earlier. If FlowDrop is approaching production use, prioritizing user acceptance testing with real approval workflows would validate the fix and surface similar edge cases before they affect end users.

                                        Contributors: Shibin Das [2]

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