# Prompt log — 24h 2026-07-03 ======================================================================== ## [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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Alphons Jaimon (AJV009), Ann Mary Sruthy (annmarysruthy), Ricardo Castañeda (cadence96)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

AI (Artificial Intelligence)

then use

,

,

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

    How can I help on this project?

    " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI CKEditor Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai/-/work_items/3586580) State: opened | Updated: 2026-07-03 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: category::bug, priority::normal, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1738 [Issue #3586580: Fix summarize prompt translating text instead of preserving original language](https://git.drupalcode.org/project/ai/-/merge_requests/1738) | State: opened | Author: Ricardo Castañeda (cadence96), 13 diff lines Description: Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Install Drupal on a clean site. Install and enable the AI module and AI CKEditor integration. Configure an AI provider. Go to /admin/config/content/formats/manage/full_html. Enable the AI CKEditor assistant/tools for the Full HTML text format. Enable the Summarize option. Edit o… ### [Add event hook to ai_ckeditor to allow context injection](https://git.drupalcode.org/project/ai/-/work_items/3581952) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Ahmad Khalil (ahmad-khalil-imagex) | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, candidate 1.5.x Description: >>> [!note] Migrated issue Reported by: [jessehs](https://www.drupal.org/user/620440) Related to !1469 !1425 >>> Problem/Motivation The ai_ckeditor module provides AI-powered CKEditor 5 actions (Tone, Translate, Summarize, etc.) but has zero entity awareness — it doesn't know what content type, bundle, or entity ID the editor is attached to. The ai_context module provides a sophisticated scope-based context selection system that can inject bundle-specific writing guidelines into AI prompts. These two modules cannot communicate because: ai_ckeditor does not pass entity information (… ### [Add CountTokensInterface operation type for provider-native token counting](https://git.drupalcode.org/project/ai/-/work_items/3586582) State: opened | Updated: 2026-07-03 | Author: Jérôme Tchania (codeitwisely) | Assigned: unassigned | Labels: category::feature, priority::normal Description: ## Summary Add `CountTokensInterface` and `CountTokensOutput` to drupal/ai core so that provider-native token counting participates in the `ProviderProxy` event pipeline — enabling quota enforcement, rate limiting, and cost attribution for pre-flight token checks. ## Problem `AnthropicProvider::countTokens()` (added in [ai_provider_anthropic #3607960](https://www.drupal.org/project/ai_provider_anthropic/issues/3607960)) calls the upstream SDK directly, bypassing `ProviderProxy`. No `ai.pre_generate_response` / `ai.post_generate_response` events fire, so consumers such as ai_metering never s… ### [Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails](https://git.drupalcode.org/project/ai/-/work_items/3586561) State: opened | Updated: 2026-07-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, aiCoreModule, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1724 [task: #3586561 Add a setup-guardrails agent skill to configure guardrails,...](https://git.drupalcode.org/project/ai/-/merge_requests/1724) | State: opened | Author: Ann Mary Sruthy (annmarysruthy), 1799 diff lines Description: ## Description The AI module already ships a `create-guardrail-plugin` agent skill that *authors* new guardrail plugin classes. There is, however, no equivalent skill for *operating* the guardrails that already exist — i.e. configuring them on a running site. Site builders and agents currently have to drive the admin UI by hand to wire up guardrails, guardrail sets, and the global guardrail list. This task adds a `setup-guardrails` skill (sibling of `create-guardrail-plugin`, under `ai/.agents/skills/`) that configures guardrails rather than creating them, driven through the [Tool module](ht… ### [AI CKEditor: Hardcoded “summarize” message shown for all plugins when no text is selected](https://git.drupalcode.org/project/ai/-/work_items/3575346) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::bug Description: >>> [!note] Migrated issue Reported by: [annmarysruthy](https://www.drupal.org/user/3664314) Related to !1240 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: All AI CKEditor plugins display "You must select some text before you can summarize it" even when the active plugin is Translate, Tone, or SpellFix.[One-line issue summary for stakeholders] Check-in Date: 02/24/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Most AI CKEditor plugins (e.g., Translate, Tone, SpellFix, etc.) require selec… ### [Tools UI overview page does not load](https://git.drupalcode.org/project/ai/-/work_items/3579979) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCoreModule, category::bug Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) Related to !1443 !1329 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation If you enable AI mode + Tools module + MCP without making other changes, then /admin/config/ai/tools leads to The website encountered an unexpected error. Try again later.InvalidArgumentException: The opener ID parameter i… ### [Plugin shouldn't show any fields if no text is selected](https://git.drupalcode.org/project/ai/-/work_items/3557016) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::feature Description: >>> [!note] Migrated issue Reported by: [damienmckenna](https://www.drupal.org/user/108450) Related to !1117 >>> Problem/Motivation When opening a ckeditor plugin, if no text is selected the UI shows the "You must select some text before you can summarize it." message, but then will also show some of the other fields from the specific plugin, e.g. the Tone plugin shows the "Choose tone" selector. Proposed resolution Don't show anything in the ckeditor plugin popup (particularly for the Tone plugin) if no text has been selected. Remaining tasks Don't show anything in the ckeditor plugin po… ### [Improve UX in Automators Tool add form (help text and workflow field behavior)](https://git.drupalcode.org/project/ai/-/work_items/3586382) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Ricardo Castañeda (cadence96) | Labels: AI Initiative Sprint, AI Product Development, UX, aiAutomators Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) >>> [Tracker] Update Summary: Improve UX in Automators Tool add form. Short Description: Add help text and improve field behavior in Automators Tool form. Check-in Date: 04/22/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation The UX of the Automators Tool creation form (/admin/config/ai/ai-automators/automators_tool/add) can be improved to reduce confusion and guide users more effectively. The following issues were identified: Description field doe… ### [Issue when creating content and click on AI Assistant on Ckeditor](https://git.drupalcode.org/project/ai/-/work_items/3586545) State: opened | Updated: 2026-07-03 | Author: Jean-Marc PAMBRUN (dpalicepeio-at-drupbuilder.org) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Quick Win, category::bug Description: Drupal 11.4.0-rc1 with [AI (Artificial Intelligence)](https://www.drupal.org/project/ai) 1.4.2 When creating content using ckeditor 5, when click on ai assitant a red message appears "Oops, something went wrong. Check your browser's developer console for more details." And the db_logs shows "Error: Call to a member function get() on null in Drupal\\ai_ckeditor\\AiCKEditorPluginBase-\>buildCkEditorModalForm() (line 214 of /home/drupbut/www/modules/contrib/ai/modules/ai_ckeditor/src/AiCKEditorPluginBase.php" Contextual information for getting started ## Context The AI CKEditor module (`ai_… ### [Create an HTML to Markdown API and service](https://git.drupalcode.org/project/ai/-/work_items/3574246) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::feature, priority::normal Description: >>> [!note] Migrated issue Reported by: [mxr576](https://www.drupal.org/user/315522) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation League\HTMLToMarkdown\HtmlConverter is initiated 3 times with 3 different configurations in current code, when #3574004: Generate a markdown version of (formatted) text field values gets solved that becomes the 4th one. https://git.drupalcode.org/search… ### [force_value + hide_property in tool_usage_limits does not inject value at tool execution time](https://git.drupalcode.org/project/ai/-/work_items/3586577) State: closed | Updated: 2026-07-03 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted Description: (Written with the help of Claude Sonnet 4.6) I've been testing AI Search (1.3.0-alpha3) with AI (1.5.x-dev) and I think I have found an issue. After creating a search assistant pointing at a vector DB index, it does not work. I looked at the configuration of the AI agent that was created when I created the assistant, and it looks like if both force_value and hide_property are enabled, the forced value is never actually injected when the tool executes. The result is a validation error: > Invalid value for [parameter] in [tool]: This value should not be null. Claude seems to think this is… ### [Create plugins for interacting with multimedia in AI](https://git.drupalcode.org/project/ai/-/work_items/3463843) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::task Description: >>> [!note] Migrated issue Reported by: [kevinquillen](https://www.drupal.org/user/317279) Related to !1431 !761 >>> Problem/Motivation Now that #3462674: Create a generic AI plugin layer for CKEditor is pending a merge, one of the final OOTB AI plugins for CKEditor is generating an image from providers and saving the result back to the media library in Drupal. This would be a core piece of CKEditor plugin functionality. This is true for text to speech or audio providers as well. This is more of an intermediate task as I assume the plugin would need to understand how to convert the saved … --- MERGE REQUESTS (24h) --- ### [3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming...](https://git.drupalcode.org/project/ai/-/merge_requests/1469) State: opened | Author: Alphons Jaimon (AJV009) | Branch: 3581952-add-event-hook-1.4.x | 1335 diff lines Description: 3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming events from input metadata in ProviderProxy Closes #3581952 Issue: https://git.drupalcode.org/project/ai/-/work_items/3581952 --- 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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). ### [Recipe: AI Automators comment-spam scoring and auto-unpublish](https://git.drupalcode.org/project/ai_initiative/-/work_items/3585304) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Levente Besenyei (LeventeB) | Labels: AI Initiative Sprint, AI Product Development, category::feature, ideas Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Ship a recipe that wires AI Automators onto the core Comment entity to score spam on a custom_field and auto-unpublish comments scoring 8 or higher, with a View for triage. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation AI Automators is powerful but the on-ramp is still "wire it up yourself" - even for the canonical moderation use case of scoring comments for spam. We want a Drupal recipe that site… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [3] summariseModule:ai_integration_eca:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Integration - ECA (machine name: ai_integration_eca) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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 Integration - ECA

      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 Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model"](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3573445) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::support, priority::normal, state::accepted, userInterface Description: >>> [!note] Migrated issue Reported by: [michaelb](https://www.drupal.org/user/2309046) >>> Hello, I am trying to use an AI task within ECA using the ai_integration_eca module. When triggering an "AI Chat" action that includes a value in the field "Specific configuration for the model", the execution fails with the following error: Error invoking model response: Unknown parameter: 'system_name' I followed the example provided in the field description and simply copied the configuration: system_name: system system_prompt: you are a helpful assistant Without this specific configuration, the … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [4] summariseModule:ai_provider_openai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: OpenAI Provider (machine name: ai_provider_openai) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Ahmad Khalil (ahmad-khalil-imagex)". 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

        OpenAI Provider

        then use

        ,

        ,

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

          How can I help on this project?

          " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Issue #3558801: Route the OpenAI chat operation through the Responses API...](https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/78) State: opened | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3558801-responses-api-chat | 1410 diff lines Description: Issue #3558801: Route the OpenAI chat operation through the Responses API instead of Chat Completions. # MR Summary — Convert the OpenAI chat operation to the Responses API (Issue #3558801) ## Why this was done OpenAI's Responses API is the successor to Chat Completions, and OpenAI intends to eventually deprecate Chat Completions. The issue originally proposed exposing Responses as a separate responses operation type (MR !56), but the maintainers (comments #6 and #9) rejected that direction: * No other provider distinguishes chat vs. responses — the operation type doesn't change, only Open… --- COMMITS (24h) --- (none) ======================================================================== ## [5] summariseModule:mcp_client:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: MCP Client (machine name: mcp_client) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Christian Fritsch (chr.fritsch)". 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

          MCP Client

          then use

          ,

          ,

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

            How can I help on this project?

            " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix tool bug](https://git.drupalcode.org/project/mcp_client/-/merge_requests/20) State: opened | Author: Christian Fritsch (chr.fritsch) | Branch: 3608121-mcp-tools-always | 136 diff lines Description: Closes #3608121 --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:ai_agents:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: AKHIL BABU (AkhilBabu) [1], Joshua Fernandes (joshua1234511), Jürgen Haas (jurgenhaas)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

            AI Agents

            then use

            ,

            ,

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

              How can I help on this project?

              " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [force_value + hide_property in tool_usage_limits does not inject value at tool execution time](https://git.drupalcode.org/project/ai_agents/-/work_items/3586044) State: closed | Updated: 2026-07-03 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::bug, priority::major Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !292 [fix: #3586044 Apply forced tool argument values at execution time](https://git.drupalcode.org/project/ai_agents/-/merge_requests/292) | State: merged 2026-07-03 | Author: AKHIL BABU (AkhilBabu), 288 diff lines Description: (Written with the help of Claude Sonnet 4.6) I've been testing AI Search (1.3.0-alpha3) with AI (1.5.x-dev) and I think I have found an issue. After creating a search assistant pointing at a vector DB index, it does not work. I looked at the configuration of the AI agent that was created when I created the assistant, and it looks like if both force_value and hide_property are enabled, the forced value is never actually injected when the tool executes. The result is a validation error: > Invalid value for [parameter] in [tool]: This value should not be null. Claude seems to think this is… ### [Let an agent use a role when running a tool](https://git.drupalcode.org/project/ai_agents/-/work_items/3518167) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !87 >>> Problem/Motivation Currently the modus operandi is that the permissions checks that happens in tools, happens on the session that is running it. In AI Agents Explorer or the AI Assistants API, this means the user that triggers the query. There are however cases where agents should be completely autonomous or where they are triggered in queues/cron jobs, where there is no sessions attached. In those cases it should be possible for the person that sets up the agent to be able to… ### [Add limits on how often a tool can run](https://git.drupalcode.org/project/ai_agents/-/work_items/3547995) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !224 >>> Problem/Motivation Right now we have to tell the system prompt how often it is allowed to use a specific tool. But there should also be a determenistic way, where if the tool gets stuck in a loop or searches to no awail in a RAG database for instance, we need to be able to programatically say how many times a tool can run. Proposed resolution Add a form value of how many times a tool can run. Add a form for setting the error message when this happens. If the tool has run tha… ### [Make it possible to restrict the order of tools during agent executions](https://git.drupalcode.org/project/ai_agents/-/work_items/3560681) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !252 [Issue #3560681: Add per-tool execution ordering constraints for agent loops.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/252) | State: opened | Author: Joshua Fernandes (joshua1234511), 2341 diff lines Description: >>> [!note] Migrated issue Reported by: [shashikanth171](https://www.drupal.org/user/3516867) Related to !252 >>> Problem/Motivation AI Agent can sometimes execute tools in an order that doesn't make any sense. We can avoid this by improving the prompt template, making it more verbose with trial and error. Need to somehow allow configuration of each tool, to set which tool should be run prior to it. We can also expand it by including conditions like should be executed 1. only once, 2. first, 3. last etc. Depending on the tool and use case, configuring the agent with such restrictions will… --- MERGE REQUESTS (24h) --- ### [Issue #3537123 by jurgenhaas: Exceptions in tool execute break the UI for the user](https://git.drupalcode.org/project/ai_agents/-/merge_requests/163) State: opened | Author: Jürgen Haas (jurgenhaas) | Branch: 3537123-exceptions-in-tool | 295 diff lines Description: Closes #3537123 --- COMMITS (24h) --- - [b3c45446](https://git.drupalcode.org/project/ai_agents/-/commit/b3c45446c03ff9518b8929973fdb6b3fc1a96262) fix: #3586044 Apply forced tool argument values at execution time — AKHIL BABU (2026-07-03T15:06:53.000+00:00) ======================================================================== ## [7] summariseModule:tool:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Tool API (machine name: tool) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

              Tool API

              then use

              ,

              ,

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

                How can I help on this project?

                " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization (same as #3568588)](https://git.drupalcode.org/project/tool/-/work_items/3582939) State: opened | Updated: 2026-07-03 | Author: Stephan Huber (stmh) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, state::rtbc Description: ### Steps to reproduce 1. Install Drupal 11.x with the REST module enabled and a content entity exposed via a `ResourceBase` plugin that calls `$serializer->normalize($entity, 'json')` (e.g. any custom REST resource that returns entities as normalized arrays). 2. Enable the Tool module (verified on 1.0.0-alpha9, 1.0.0-beta1, and 1.0.x-dev). 3. Request the REST endpoint and inspect the JSON response — or reproduce directly via `drush php:eval`: ```php $node = \Drupal::entityTypeManager()->getStorage('node')->load(1); print_r(\Drupal::service('serializer')->normalize($node, 'json')); … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [8] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Lauri Timmanee (lauriii), Matt Glaman (mglaman) [1], Prabhavathi Vanipenta (prabha1997) [1], Ravi Maniyar (ravi.maniyar.123), Sally Young (justafish) [1], Wim Leers (wimleers)". 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). ### [Dependency Dashboard](https://git.drupalcode.org/project/canvas/-/work_items/3591657) State: opened | Updated: 2026-07-04 | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Assigned: unassigned | Labels: projectManagement Description: This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. ## Repository Problems Renovate tried to run on this repository, but found these problems. - ⚠️ WARN: Failed to set branch status - ⚠️ WARN: Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN - ⚠️ WARN: No tool releases found. - ⚠️ WARN: No github.com token has been configured. Skipping release notes retrieval ## Deprecations / Replacements > ⚠️ **Warning** > The foll… ### [Add heuristics for exposing fields/props to the content-entity-reference selection UI](https://git.drupalcode.org/project/canvas/-/work_items/3591669) State: opened | Updated: 2026-07-03 | Author: Christian López Espínola (penyaskito) | Assigned: Lauri Timmanee (lauriii), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: category::task, internalHttpApi, priority::critical, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1289 [feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI](https://git.drupalcode.org/project/canvas/-/merge_requests/1289) | State: opened | Author: Christian López Espínola (penyaskito), 1179 diff lines Description: ### Overview When a Code Component Developer uses the `content-entity-reference` "Typed Data browser" UI (added in #3585354) to pick which entity data a prop consumes, the picker offers fields and properties it should not: - **Internal metadata** that storage would reject anyway (e.g. the `revision_default` / `workspace` base fields). - **A duplicated image URL**: the `image` field surfaces *"Resolved image URL with ?alternateWidths query parameter"* twice, because the `src` and `src_with_alternate_widths` computed properties share that label. `src` exists precisely as the developer-facing a… ### [Prevent translation before page is published in source language](https://git.drupalcode.org/project/canvas/-/work_items/3591768) State: opened | Updated: 2026-07-03 | Author: Vipin Mittal (vipin.mittal18) | Assigned: unassigned | Labels: translation Description: **Problem** Users can currently create and publish translations even when the source page has not been published. **Steps to Reproduce:** 1. Create a page in the default language and Do not publish the page. 1. Click language switcher 1. Create and publish the translation in secondary language. **Actual Result:** The translation can be created and published even though the page is unpublished in source language. **Expected Result / Acceptance Criteria:** 1. Translation cannot be created until the source page is published. 1. Three dot menu should not be visible against secondary language.… ### [`Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_](https://git.drupalcode.org/project/canvas/-/work_items/3575644) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: Matt Glaman (mglaman), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: Performance, category::bug, priority::critical, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1276 [Issue #3575644: `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_](https://git.drupalcode.org/project/canvas/-/merge_requests/1276) | State: merged 2026-07-03 | Author: Matt Glaman (mglaman), 226 diff lines Description: >>> [!note] Migrated issue Reported by: [barakgalili](https://www.drupal.org/user/387269) >>> Overview The canvas module overrides the property definitions for the string_long field type in \Drupal\canvas\Plugin\Field\FieldTypeOverride\StringLongItemOverride. It currently adds a RegexConstraint to the value property with the pattern /(.|\r?\n)*/ to match any string, including newlines. When saving entities with large amounts of text (e.g., 10,000+ characters) in a string_long field, this specific regex pattern causes PHP's PCRE engine to hit the JIT stack limit (PREG_JIT_STACKLIMIT_ERROR, … ### [[CI] Playwright Report job skipped when Playwright test fails](https://git.drupalcode.org/project/canvas/-/work_items/3591332) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::task, priority::normal, state::needsReview, v1.x-dev Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1146 [Issue #3591332: [CI] Playwright Report job skipped when Playwright test fails](https://git.drupalcode.org/project/canvas/-/merge_requests/1146) | State: merged 2026-07-03 | Author: Sally Young (justafish), 44 diff lines Description: >>> [!note] Migrated issue Reported by: [bnjmnm](https://www.drupal.org/user/2369194) Related to !1146 >>> Overview Until fairly recently, when Playwright reports failed we'd still get a report, which was quite useful. Now, it looks like the report is only generated if everything passes (its possible some fails still result in reports, but this is what I observed). this occurs even in instances where the test completes before the 30 min timeout. Here's a recent example. Any way to get this back? Proposed resolution User interface changes ### [Rudimentary conflict resolution UI](https://git.drupalcode.org/project/canvas/-/work_items/3591601) State: opened | Updated: 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Wim Leers (wimleers), Feliksas Mazeikis (f.mazeikis), Ravi Maniyar (ravi.maniyar.123) | Labels: Conflict resolution, category::feature, pageBuilder, priority::critical Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1183 [feat(conflict): Add conflict resolution UI with viewport selection and route integration](https://git.drupalcode.org/project/canvas/-/merge_requests/1183) | State: opened | Author: Ravi Maniyar (ravi.maniyar.123), 4051 diff lines Description: ### Overview We are adding "Conflict resolution UI". This issue will add basic UI elements based on that allow users to open and interact with "Conflict resolution UI". ### Proposed resolution Add ability to open "Conflict resolution UI" using CTA button introduced in https://git.drupalcode.org/project/canvas/-/work_items/3585970. Create rudimentary version of the "Conflict resolution UI" which: * displays all of the conflicts in paginated (1 of X) UI with navigation controls ("\" * allows users to select which of the entities they want to use in order to resolve the conflict (auto-save v… ### [DX: `php (lint)` CI job runs against 11.2, fails on 11.3/11.4](https://git.drupalcode.org/project/canvas/-/work_items/3591767) State: opened | Updated: 2026-07-03 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: DX (Developer Experience), priority::critical, projectManagement Description: ## Problem While working on !1332, I just realized why @balintbrews and others have been reporting > I NEVER see a passing `phpcs` or `phpstan` locally … they most likely are developing on Drupal 11.3 (or now 11.4), not the _minimum_ Drupal core version supported by Canvas! While using AI to get !1332 to pass, `phpcs` and `phpstan` _also_ fail, because they're running against 11.4, not the new minimum version (11.3, because 11.2 support was dropped by Drupal core). ## Solution Update Canvas' `composer run lint:phpcs`, `composer run lint:phpstan` etc commands detect_ that the core version … ### [Test Canvas on Drupal 11.3](https://git.drupalcode.org/project/canvas/-/work_items/3561392) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::critical, stable target Description: >>> [!note] Migrated issue Reported by: [effulgentsia](https://www.drupal.org/user/78040) Related to !594 !382 !449 >>> Overview Now that Drupal 11.3 beta is out, we should run our full test suite against it, to know what, if anything, fails, and try to fix that before 11.3.0 is released. We don't need this run on every commit. Either daily or on-demand is sufficient. Proposed resolution Add CI job and fix the encountered failures: https://git.drupalcode.org/project/canvas/-/work_items/3560831 https://git.drupalcode.org/project/canvas/-/work_items/3549574 … and address new deprec… ### [Make Canvas test suite pass on 11.4; drop support for 11.2](https://git.drupalcode.org/project/canvas/-/work_items/3591764) State: opened | Updated: 2026-07-03 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: AI-accelerated, blocker, projectManagement Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1332 [#3591764: Make Canvas test suite pass on 11.4; drop support for 11.2](https://git.drupalcode.org/project/canvas/-/merge_requests/1332) | State: opened | Author: Wim Leers (wimleers), 2296 diff lines Description: Yesterday, https://www.drupal.org/project/drupal/releases/11.4.0 was released. This needs 2 ~MRs~ key things to happen, easiest to do in a single MR: - [ ] Canvas should be tested explicitly against 11.4 → most commits of !1332 - [ ] Canvas should drop 11.2 support, because Drupal core dropped security support for 11.2 → require (9eccebfc15ac5906efe49eb42195d025ffc66017) + remove all 11.2 mentions (5122ccf5e11fdd8f05fc1805d074efa2979275e8) Note that the latter will unblock !1241. ### [Adopt `AtLeastOneOf` validation constraint for cardinality validation](https://git.drupalcode.org/project/canvas/-/work_items/3526703) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: Configuration schema, Needs upstream feature, category::task, configManagement Description: >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) Related to !1239 >>> Overview https://git.drupalcode.org/project/canvas/-/work_items/3467870 added type: array support and added this:           # TRICKY: unfortunately, `field.storage_settings.*` does not store cardinality, but the FieldStorageConfig          # entity does (config schema: `field.storage.*.*`). Hence the need for an additional key-value pair.          ca… ### [Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET`](https://git.drupalcode.org/project/canvas/-/work_items/3591736) State: closed | Updated: 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Feliksas Mazeikis (f.mazeikis) | Labels: AI-accelerated, autoSave, backend, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1302 [#3591736 "Access check in ApiAutoSaveController::post() should be performed earlier"](https://git.drupalcode.org/project/canvas/-/merge_requests/1302) | State: merged 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis), 267 diff lines Description: With the changes in !1271 the access check happens too late in the handling of auto-save items publishing request. If a user submits a list to `ApiAutoSaveController::post()` of entities they have no access to, the entities get filtered out in `ApiAutoSaveController::getPublishableAutoSaves()` via: ``` $access = $item['entity']->access('view label', return_as_object: TRUE); ... return $access->isAllowed() && ($item['is_default_translation'] ?? TRUE); ``` This results in a s set of "publishable auto-save items" that misses the entities the user has submitted. This then fail… ### [`PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter)](https://git.drupalcode.org/project/canvas/-/work_items/3591766) State: opened | Updated: 2026-07-03 | Author: Martin Anderson-Clutz (mandclu) | Assigned: unassigned | Labels: Description: ## Problem Saving the core "Appearance > Settings" (`system_theme_settings`) form for a theme that already has Drupal Canvas enabled (i.e. any `canvas.page_region..*` config entity already exists) throws an uncaught `AssertionError` and returns a fatal error page, for example when simply uploading a new theme logo: ``` AssertionError: assert([] === iterator_to_array($page_region->getTypedData()->validate())) in assert() (line 348 of modules/contrib/canvas/src/Entity/PageRegion.php) Drupal\canvas\Entity\PageRegion::createFromBlockLayout() (Line: 75) Drupal\canvas\Hook\PageRegionHooks::formSys… ### [Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities](https://git.drupalcode.org/project/canvas/-/work_items/3589814) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, autoSave Description: >>> [!note] Migrated issue Reported by: [narendrar](https://www.drupal.org/user/1730192) Related to !1104 >>> Overview The goal is to automate the translation workflow within the Canvas module by programmatically creating TMGMT jobs for Canvas pages. Proposed resolution Hook Implementation: The logic for translation Jobs should be in Entity hooks for seamless integration. This Spike is only for Canvas page. We also need to do similar work for Config Entities (Content Template/Regions) in another spike/issue. Make sure that Creating/updating Canvas pages should always trigger translation … ### [Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped()](https://git.drupalcode.org/project/canvas/-/work_items/3591763) State: opened | Updated: 2026-07-03 | Author: Fons Vandamme (f0ns) | Assigned: unassigned | Labels: category::bug, priority::normal, state::needsReview Description: **Problem** When Pathauto is installed, publishing a new canvas_page that has no URL alias returns a 500 from `POST /canvas/api/v0/auto-saves/publish`: `AssertionError: assert($pathauto_item instanceof PathautoItem) in assert() (line 127 of modules/contrib/canvas/src/Hook/PageHooks.php)` Pages that already have a URL alias publish without error. **Steps to reproduce** 1. Install Canvas 1.7.1 and Pathauto on Drupal 11.4. 2. Create a new page in the Canvas UI. Do not set a URL alias. 3. Click Publish. The request fails with a 500 and the error above. ### [Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props](https://git.drupalcode.org/project/canvas/-/work_items/3591663) State: opened | Updated: 2026-07-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: AKHIL BABU (AkhilBabu) | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, ai Description: ## Steps to Reproduce 1. Install `canvas_ai` on a Drupal CMS 2 site using the Byte Theme or Starter Theme (Mercury components are required). 2. Install `ai_api_explorer`. 3. Log in as user 1. 4. Go to: `/admin/config/ai/explorers/tools_explorer` 5. Select the **set_component_structure** tool from the dropdown. 6. Run the following Drush command to set the current layout value required by the tool: ```bash ddev drush php:eval " \Drupal::service('account_switcher')->switchTo(\Drupal\user\Entity\User::load(1)); \Drupal::service('canvas_ai.tempstore')->setData( 'curren… ### [Canvas AI: Component context required props missing required flag](https://git.drupalcode.org/project/canvas/-/work_items/3591655) State: closed | Updated: 2026-07-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, Novice Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1328 [Fix required prop flag dropped in processSdc() and missing in processCodeComponents().](https://git.drupalcode.org/project/canvas/-/merge_requests/1328) | State: merged 2026-07-03 | Author: Prabhavathi Vanipenta (prabha1997), 265 diff lines Description: ## Problem A regression in `CanvasAiPageBuilderHelper::processSdc()` causes the `required: true` flag to be dropped from component context metadata. Current code: `// Mark required props. if (isset($sdc_definition['props']['required']) && \in_array($prop_name, $sdc_definition['props']['required'], TRUE)) { $output[$source_id]['components'][$component_id]['props'][$prop_name]['required'] = TRUE; } ` The flag should instead be added to the prop metadata: `// Mark required props. if (isset($sdc_definition['props']['required']) && \in_array($prop_name, $sdc_definition['props']['required'], … --- MERGE REQUESTS (24h) --- ### [Draft: chore(Data model): #3591727 Store each prop's translatability per component version so deleting an optional prop keeps config-defined component trees valid](https://git.drupalcode.org/project/canvas/-/merge_requests/1300) State: opened | Author: Christian López Espínola (penyaskito) | Branch: 3591727-track-translatable-component-field-prop-definition | 4299 diff lines Description: Closes #3591727 ## Summary `ComponentInputsMapping` (introduced in #3582478) validates every config-defined component tree's `inputs`, but it builds each component instance's input schema from the component's **live** JSON Schema (`getMetadata()`), not the version the instance actually references. So deleting an optional prop from an SDC or code component — which creates a new component version — made previously valid-and-unchanged config-defined trees (still pointing at the old version) report the removed input as `'' is not a supported key`. This is a regression for monolingual sites and a… ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 77 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | mysql | service-image | minor | `8.0` → `8.4` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 6am on Monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this MR, c… ### [feat(Conflict detection): #3591601 "Conflict resolution via API call and layout endpoint support for published entities"](https://git.drupalcode.org/project/canvas/-/merge_requests/1194) State: opened | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591601-rudimentary-conflict-resolution-ui-be | 1283 diff lines Description: ## What this branch does **TL;DR:** Modifies the `ApiContentAutoSaveControllers::patch()` to allow updating auto-save item conflict as resolved; Adds optional argument to the `ApiLayoutController::get()` that allows fetching layout of a published entity; all new functionality is hidden behind `canvas_dev_cd` **Long version:** This MR adds "Ability to resolve conflict by keeping changes in the auto-save" and an "ability to load the visual preview of both auto-save and published version of the entity with conflict" capability described in the https://git.drupalcode.org/project/canvas/-/milest… ### [Decouple component_tree translation logic from TMGMT](https://git.drupalcode.org/project/canvas/-/merge_requests/1320) State: opened | Author: Lauri Timmanee (lauriii) | Branch: 3591754-decouple-tmgmt | 1494 diff lines Description: The logic that extracts a component tree's translatable strings and writes translations back is moved out of `ComponentTreeFieldProcessor` (which extends a `tmgmt_content` class, so it only loads with TMGMT installed) into a standalone `ComponentTreeTranslator` service under `src/Translation/`. `ComponentTreeFieldProcessor` becomes a thin TMGMT adapter that delegates to it. `ComponentInputsTranslatablesExtractor` moves to `src/Translation/` alongside it. Behavior is unchanged; code is moved, not rewritten. This is needed to avoid duplication in https://git.drupalcode.org/project/canvas_transl… ### [#3591738 add translation data to code component provider](https://git.drupalcode.org/project/canvas/-/merge_requests/1301) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591738-add-translation-data-to-code-component-data-provider | 579 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591738 --- COMMITS (24h) --- - [d181662f](https://git.drupalcode.org/project/canvas/-/commit/d181662f9bf168a860e0dca3eb773b9a78e0df7e) ci: #3591332 [CI] Playwright Report job skipped when Playwright test fails — Sally Young (2026-07-03T15:13:39.000+00:00) - [7698348f](https://git.drupalcode.org/project/canvas/-/commit/7698348f26f7cf6be994b9e866d38d7850de8628) fix(Data model): #3575644 `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ — Matt Glaman (2026-07-03T09:32:02.000+00:00) - [74cb7134](https://git.drupalcode.org/project/canvas/-/commit/74cb713404d3a5c2d2b47de072a37efe143433b1) fix(Auto-save,Internal HTTP API): #3591736 Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET` — Feliksas Mazeikis (2026-07-03T08:42:41.000+00:00) - [40896895](https://git.drupalcode.org/project/canvas/-/commit/4089689543c555cc736003e961e71b6018c5fcc9) fix(AI): #3591655 Canvas AI: Component context required props missing required flag — Prabhavathi Vanipenta (2026-07-03T07:01:20.000+00:00) ======================================================================== ## [9] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Joshua Fernandes (joshua1234511), Juan Correa (jucs7), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Tamas Balog (tbalog)". 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). ### [Clean up CCC documentation and API consistency](https://git.drupalcode.org/project/ai_context/-/work_items/3586305) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **6. Documentation And API Consistency** **Priority:** High to Medium **Why group these together:** These are low-risk docs/code consistency fixes that prevent contributors from copying stale API names or relying on a fallback that differs from install defaults. Includes: - Disabled select replacements. - Help list render arrays. - Table captions. - Emoji warning cleanup. ## Solution ### 6.1 Align the default context prefix **Files:** - `config/install… ### [Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/work_items/3586271) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !211 [Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/merge_requests/211) | State: opened | Author: Juan Correa (jucs7), 2954 diff lines Description: Follow-up to: #3586192 _**Verify the issue problem and solution before proceeding.**_ ## Title **AI Context: Consistency / DX cleanup (final, constructor promotion, snake_case locals, service interfaces)** --- ## Description Follow-up to #3586192 / naming & DX review. Addresses the remaining **consistency / DX** items that were explicitly out of scope for the naming MR. **No functional or API behavior changes** — style, clarity, and maintainability only. ### Background The naming/DX MR covered route/permission renames, dead code removal, `new self` in final classes, and snake_case fix… ### [Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes](https://git.drupalcode.org/project/ai_context/-/work_items/3586280) State: closed | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Description _**Verify the issue problem and solution before proceeding.**_ Drupal 11.3 deprecates kernel test classes that do not declare the PHPUnit `#[RunTestsInSeparateProcesses]` attribute. From Drupal 12.0, missing the attribute will throw an exception ([change record](https://www.drupal.org/node/3548485)). The ai_context module currently has **4 of 39** kernel test classes with the attribute: - `AiContextChildrenServiceTest` - `AiContextItemFormGlobalCountTest` - `AiContextTextFieldMigrationTest` - `AiContextUpdate10010Test` The remaining **35** kernel test classes need: ```php … ### [[Discuss] Context scope subscription approach](https://git.drupalcode.org/project/ai_context/-/work_items/3586320) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol), Aidan Foster (aidanfoster), Emma Horrell (emma-horrell) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Context scope subscriptions have been confusing for beta users, and scope plugins have different shapes that convolute the idea of subscriptions. We will be reachitecting scope plugins in: - #3586243+s - #3586281+s - #3586273+s so we should decide if "subscriptions" are the right mental model. ## Solution Analyze and update or create follow-up issues as needed. ### [Inject context into ai_ckeditor requests](https://git.drupalcode.org/project/ai_context/-/work_items/3581955) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, AI Sprint 9 Description: >>> [!note] Migrated issue Reported by: [jessehs](https://www.drupal.org/user/620440) Related to !116 >>> Problem/Motivation The ai_context module cannot inject scope-matched context items into ai_ckeditor AI requests because ai_ckeditor bypasses the ai_agents pipeline (and its BuildSystemPromptEvent) entirely — it calls the AI provider directly in its own streaming controller. There is no event or hook point for ai_context to intercept. This issue is the ai_context companion to the ai_ckeditor entity context and event extensibility work tracked in the drupal/ai module issue queue. … ### [Beta vs 1.1 CCC API gap analysis](https://git.drupalcode.org/project/ai_context/-/work_items/3586318) State: closed | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Description As we are getting closer to rc1, we need to do a gap analysis to see what are obvious API gaps that we should address prior to rc1 to properly enable contributed and custom module integration. ## Tasks * [x] Gather relevant beta3 and beta4 issues and documents * [x] Feed into fable 5 * [x] Review findings * [x] Add follow-up issues as needed ## Acceptance criteria * Analysis document is created and reviewed * Relevant follow-up issues are created ## Related issues - #3586289+s - #3581955+s - #3586281+s - #3586243+s - #3586268+s - #3586273+s ### [Move from agent-specific to generic context consumer API](https://git.drupalcode.org/project/ai_context/-/work_items/3586319) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Problem/motivation CCC was initially focused on agents, but other consumers will also want context. Example: - ai_ckeditor - #3581955+s - automators - #3563106+s - other contributed and custom modules ## Solution Rearchitect the code to center on context consumers, with agents as just one type of consumer. Fable 5 plan from: #3586318+s [ai_context-consumer-rearchitecture-plan-v3.md](https://git.drupalcode.org/-/project/191993/uploads/43d12b8f77e375c268ef3f9dc0b6bd40/ai_context-consumer-rearchitecture-plan-v3.md) ## AI usage - [x] AI assisted issue ### [[Meta] CCC cleanup and API hardening from code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Sprint 14, category::plan, priority::major, sprint candidate Description: ## Problem/motivation Follow-up to: #3586294+s ### New docs Since I had fable 5 review both 1.0.x and the MR branch for #3586218+ at the same time, it didn't really differentiate where the problems were. Many of the problems were for #3586218+ which should be fixed in that issue since it's not merged yet. I've added the info to that issue's MR. Here are the new docs for all problems that aren't for #3586218+: [ai_context-beta4-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/69d239d43391b757cc440a9e04b54e57/ai_context-beta4-1.0.x-issues.md) #### Additional findings … ### [Rename entity bundle and target entity scope plugins for better DX](https://git.drupalcode.org/project/ai_context/-/work_items/3586276) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 12 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !195 [Issue #3586276: Rename entity bundle and target entity scope plugins for better DX](https://git.drupalcode.org/project/ai_context/-/merge_requests/195) | State: opened | Author: Tamas Balog (tbalog), 3803 diff lines Description: ## Problem/solution Follow up to: #3586148+s The naming of the entity bundle and target entity scope plugins is confusing. ## Solution **AiContextScopeEntityBundle** Rename Entity Bundle => Entity Type at a code-level because there are bundleless content entities. Label: Entity Types Description: Apply this context to every entity of a chosen type, for example all Article nodes, every Document media item, or every Canvas page. Choose this when the context is true for the whole type, not a single item. **AiContextScopeTargetEntity** Rename Target Entity => Entity Item because target… ### [Usage record page renders context item content without an entity access check](https://git.drupalcode.org/project/ai_context/-/work_items/3586311) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !208 [Issue #3586311: Gate context item render on access('view') in usage record page.](https://git.drupalcode.org/project/ai_context/-/merge_requests/208) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 372 diff lines Description: ## Problem Follow-up to: #3586294+s Parent: #3586310+s _**This issue should be verified prior to working on it to make sure it is valid.**_ `AiContextUsageRecordController` renders the full current content of the referenced context item via the entity view builder with no `access('view')` check. The route only requires `view ai context usage`, so a user with that permission alone can read the content of items they cannot view — notably items unpublished since the usage was recorded (viewing those requires `view any unpublished ai context item` or ownership). The same controller *does* ch… ### [Clean up CCC form and table accessibility cleanup](https://git.drupalcode.org/project/ai_context/-/work_items/3586304) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **5. Form And Table Accessibility Cleanup** **Priority:** Medium **Why group these together:** These are smaller Form API and admin UI accessibility improvements. They can be handled in one cleanup issue. Includes: - `Drupal.announce()` result counts for both JS filters. - Tests for filter announcements if feasible. ## Solution ### 5.1 Replace disabled read-only selects with text **File:** - `src/Form/AiContextAgentForm.php` **Problem:** Read-only s… ### [Allow subcontext scope to override parent scope](https://git.drupalcode.org/project/ai_context/-/work_items/3586218) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 10 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !159 [Issue #3586218: Allow subcontext scope to override parent scope.](https://git.drupalcode.org/project/ai_context/-/merge_requests/159) | State: opened | Author: Kristen Pol (kepol), 3229 diff lines Description: ## Problem/motivation Follow-up to: #3576092 ## Solution From the other issue: Discussion with Emma+Aidan at UX sync: - Toggle (true/false) is defaulted to "Same as parent" (true) right above Global and then hide all of them - Description: "Disable to customize scope." Here's a [plan from cursor](https://www.drupal.org/files/issues/2026-04-21/subcontext_scope_inheritance_51216439.plan_.md) that can be updated to reflect ^ ## Tasks - [x] Add code - [x] Review code - [ ] Manually test code ## AI usage - [ ] AI assisted issue - [ ] AI assisted code - [x] AI generated code ### [Promote Document Loader: Context Importer from experimental to stable](https://git.drupalcode.org/project/ai_context/-/work_items/3586282) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Description Follow-up to: - #3586275+s Blocked by release of: - canvas#3575644+s ### Summary The `ai_context_document_loader` submodule (Document Loader: Context Importer) is currently marked `lifecycle: experimental`. The initial integration work is largely complete: upstream dependencies are on stable constraints (`document_loader:^2.0.3`, `ai_file_to_text:^1.0`), and temporary Document Loader Composer patches have been removed. Before removing the experimental lifecycle flag, we should close out documentation, testing, and install-behavior follow-ups. The Canvas StringLongItemOver… ### [Clean up CCC JavaScript filter feedback](https://git.drupalcode.org/project/ai_context/-/work_items/3586303) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !206 [Issue #3586303: Announce filtered row counts to screen readers in JS filter behaviors.](https://git.drupalcode.org/project/ai_context/-/merge_requests/206) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 69 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **4. JavaScript Filter Feedback** **Priority:** High **Why group these together:** Both filters implement similar client-side table filtering and should expose the same accessible feedback pattern. Includes: - Pill-list overflow accessible text. - Truncated description accessible text. - Icon-only indicators. - Manual assistive technology check for `ai/ai_global` tooltip behavior. ## Solution ### 4.1 Announce filtered result counts **Files:** - `js/ai_… ### [Clean up CCC test and documentation consistency before rc1](https://git.drupalcode.org/project/ai_context/-/work_items/3586299) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !207 [Issue #3586299: Fix test and documentation consistency before rc1.](https://git.drupalcode.org/project/ai_context/-/merge_requests/207) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 286 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **7. Test Quality And Test Documentation** **Priority:** Medium **Why group these together:** These fixes all improve test reliability and signal. They can be split further if the test changes become large. Includes: - Context prefix default alignment. - `getManageUrl()` docs update. - Optional `hook_help()` decision/follow-up. - `tests/README.md` environment guidance. ## Solution ### 7.1 Make integration-test process metadata consistent **Files:** - `… ### [Selector loads the entire catalog when an agent has no scope subscriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586315) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !210 [Issue #3586315: Avoid full catalog scan when agent has no scope subscriptions.](https://git.drupalcode.org/project/ai_context/-/merge_requests/210) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 552 diff lines Description: ## Problem Follow-up to: #3586294+s Parent: #3586310+s _**This issue should be verified prior to working on it to make sure it is valid.**_ `AiContextSelector::getPrefilteredPublishedItemIds()` returns NULL when `$scopeSubscriptions` is empty, so the chunk loop loads **every published context item** (full entities including content fields) on every AI request. This hits the very common "global items only" agent configuration. With thousands of items that's dozens of chunked queries, thousands of entity hydrations, and thousands of per-item plugin `matchesCurrentContext()` calls per reque… --- MERGE REQUESTS (24h) --- ### [Issue #3586305: Fix context prefix default alignment and stale getManageUrl docs.](https://git.drupalcode.org/project/ai_context/-/merge_requests/202) State: opened | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: fix/documentation-api-consistency-3586305 | 127 diff lines Description: Fixed 6.1 and 6.2 6.1 — Context prefix alignment The fallback string in AiContextSystemPromptSubscriber didn't match the value in config/install/ai_context.settings.yml. Aligned the PHP fallback to the canonical config default. 6.2 — Stale getManageUrl() docs scope_api.md and custom_scopes.md were still referencing getManageUrl(): ?string which no longer exists. Updated both files to document the actual getManageRoute(): ?array method with the correct return structure. ### [Issue #3586300: Updated CCC cacheability and access metadata.](https://git.drupalcode.org/project/ai_context/-/merge_requests/204) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3586300-clean-up-ccc-cacheability-and-access-metadata | 120 diff lines Description: ## Description Closes #3586300 ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [x] I have performed a self-review of my own code Not applicable: - I have added or updated tests, or explained in the description why this change is not covered by tests - I have updated documentation for any new or changed functionality - I have written testing instructions and verified them locally (see issue for testing approach) - I have noted any required post-merge steps (config imports, c… ### [Issue #3586292: Ignore conditional context when disabled.](https://git.drupalcode.org/project/ai_context/-/merge_requests/194) State: opened | Author: Kristen Pol (kepol) | Branch: 3586207-conditional-subcontext-tweaks | 1376 diff lines Description: ## Description See #3586292+s ## Testing instructions 1. 2. ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, ca… ### [Issue #3586301: Clean up CCC accessible interactive links and external links.](https://git.drupalcode.org/project/ai_context/-/merge_requests/200) State: opened | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: fix/accessible-links-3586301 | 982 diff lines Description: **Description** ## Changes - Replace `Link::toString()` in `#markup` with proper render arrays and `:url` placeholders in `t()` (ai_context.module, AiContextAgentsForm, AiContextAgentForm, AiContextScopeBase). - Add `rel="noopener noreferrer"` to all `target="_blank"` external links (AiContextExtensionsController, AiContextAgentForm, AiContextItemRevisionOverviewForm, Twig overview template). - Add visually-hidden "(opens in new tab)" text to external links for screen readers. - Convert `buildAgentNameMarkup()` to `buildAgentName()` returning a render array. - Simplify `AiContext… --- COMMITS (24h) --- (none) ======================================================================== ## [10] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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 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). ### [Feature: Translation result caching and cross-field deduplication](https://git.drupalcode.org/project/ai_translate/-/work_items/3585529) State: opened | Updated: 2026-07-03 | Author: Christoph Breidert (breidert) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: ## Problem/Motivation `ai_translate` re-sends every field to the LLM on every translation run, with no memory of previous translations. This causes two avoidable costs: 1. **Re-translation of unchanged content.** On a re-translation run (fixing one typo, updating a single field), every unchanged field is sent to the LLM again, even though the output would be identical to the previous run. 2. **Repeated translation of identical strings.** Paragraph-heavy entities and Layout Builder pages often contain the same short string in multiple components (shared CTA labels, navigation titles, standard… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [11] summariseModule:ai_related_content:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Related Content (machine name: ai_related_content) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: 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 Related Content

                      then use

                      ,

                      ,

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

                        How can I help on this project?

                        " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Add gitlab templates](https://git.drupalcode.org/project/ai_related_content/-/work_items/3576576) State: opened | Updated: 2026-07-04 | Author: Scott Euser (scotteuser) | Assigned: Scott Euser (scotteuser) | Labels: category::task, state::accepted Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !20 [#3576576: Gitlab templates](https://git.drupalcode.org/project/ai_related_content/-/merge_requests/20) | State: opened | Author: Scott Euser (scotteuser), 133 diff lines ### [Current node is not always excluded](https://git.drupalcode.org/project/ai_related_content/-/work_items/3547619) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: Scott Euser (scotteuser) | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) Related to !5 >>> Problem/Motivation E.g. via Pinecone, the metadata filter expects strict type match, but current node is returned as a string. Indexing as filterable attribute in Search API indexes as integer. Steps to reproduce View related content Proposed resolution Cast as integer Remaining tasks MR User interface changes N/A API changes N/A Data model changes N/A --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [12] generateTldr:developer ======================================================================== You are an editor distilling a Drupal AI project newsletter into its most important highlights. You are writing for a technical developer audience. Be specific — name modules, merged features, and critical bugs. Read all the module summaries below. Separate the highlights into two categories: - SHIPPED: things that were merged, fixed, released, or completed during this period. - ONGOING: things that are actively in progress, under review, or blocked. Be specific — name the module, what happened, and why it matters. Do not use emoticons or mdashes. Do not include any text outside the two sections. When you mention a specific issue or merge request, add an inline citation using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations immediately after the relevant phrase, before any punctuation. Format as two HTML sections. Use exactly this structure (all
                      • elements must be inside the
                          , never outside it):

                          Shipped

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

                          Ongoing

                          1. Title here — One sentence explanation [2].
                          Up to 5 items per section. Do not output any text, tags, or characters outside these two sections. Output only the HTML fragment, no surrounding tags. --- REFERENCE LIST --- [1] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [2] Add event hook to ai_ckeditor to allow context injection (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3581952 [3] Add CountTokensInterface operation type for provider-native token counting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586582 [4] Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586561 [5] AI CKEditor: Hardcoded “summarize” message shown for all plugins when no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3575346 [6] Tools UI overview page does not load (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579979 [7] Plugin shouldn't show any fields if no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3557016 [8] Improve UX in Automators Tool add form (help text and workflow field behavior) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586382 [9] Issue when creating content and click on AI Assistant on Ckeditor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586545 [10] Create an HTML to Markdown API and service (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574246 [11] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586577 [12] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [13] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [14] 3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1469 [15] task: #3586561 Add a setup-guardrails agent skill to configure guardrails,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1724 [16] Recipe: AI Automators comment-spam scoring and auto-unpublish (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3585304 [17] AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model" (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3573445 [18] Issue #3558801: Route the OpenAI chat operation through the Responses API... (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/78 [19] fix tool bug (mcp_client, MR) — https://git.drupalcode.org/project/mcp_client/-/merge_requests/20 [20] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586044 [21] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [22] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [23] Make it possible to restrict the order of tools during agent executions (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3560681 [24] fix: #3586044 Apply forced tool argument values at execution time (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/292 [25] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [26] Issue #3537123 by jurgenhaas: Exceptions in tool execute break the UI for the user (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/163 [27] MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization (same as #3568588) (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582939 [28] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [29] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [30] Prevent translation before page is published in source language (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591768 [31] `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3575644 [32] [CI] Playwright Report job skipped when Playwright test fails (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591332 [33] Rudimentary conflict resolution UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591601 [34] DX: `php (lint)` CI job runs against 11.2, fails on 11.3/11.4 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591767 [35] Test Canvas on Drupal 11.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3561392 [36] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [37] Adopt `AtLeastOneOf` validation constraint for cardinality validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3526703 [38] Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591736 [39] `PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591766 [40] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [41] Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped() (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591763 [42] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [43] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [44] Draft: chore(Data model): #3591727 Store each prop's translatability per component version so deleting an optional prop keeps config-defined component trees valid (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1300 [45] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [46] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [47] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [48] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [49] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [50] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [51] #3591764: Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [52] feat(Conflict detection): #3591601 "Conflict resolution via API call and layout endpoint support for published entities" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1194 [53] Issue #3591332: [CI] Playwright Report job skipped when Playwright test fails (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1146 [54] Decouple component_tree translation logic from TMGMT (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1320 [55] #3591738 add translation data to code component provider (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1301 [56] Issue #3575644: `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [57] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [58] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [59] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [60] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [61] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [62] Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586280 [63] [Discuss] Context scope subscription approach (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586320 [64] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [65] Beta vs 1.1 CCC API gap analysis (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586318 [66] Move from agent-specific to generic context consumer API (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586319 [67] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [68] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [69] Usage record page renders context item content without an entity access check (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586311 [70] Clean up CCC form and table accessibility cleanup (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586304 [71] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [72] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [73] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [74] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [75] Selector loads the entire catalog when an agent has no scope subscriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586315 [76] Issue #3586305: Fix context prefix default alignment and stale getManageUrl docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/202 [77] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [78] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [79] Issue #3586276: Rename entity bundle and target entity scope plugins for better DX (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/195 [80] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [81] Issue #3586292: Ignore conditional context when disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/194 [82] Issue #3586311: Gate context item render on access('view') in usage record page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/208 [83] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [84] Issue #3586303: Announce filtered row counts to screen readers in JS filter behaviors. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/206 [85] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [86] Issue #3586315: Avoid full catalog scan when agent has no scope subscriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/210 [87] Feature: Translation result caching and cross-field deduplication (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585529 [88] Add gitlab templates (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3576576 [89] Current node is not always excluded (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3547619 [90] #3576576: Gitlab templates (ai_related_content, MR) — https://git.drupalcode.org/project/ai_related_content/-/merge_requests/20 --- MODULE SUMMARIES ---

                          AI (Artificial Intelligence)

                          The AI module saw continued activity around CKEditor integration issues and API extension work during the reporting period. Two bugs in AI CKEditor were confirmed: AI CKEditor Summarize generates summaries in a different language than the selected text, where the summarize prompt incorrectly translates content rather than preserving the original language, and Issue when creating content and click on AI Assistant on Ckeditor, which triggers a null pointer error in AiCKEditorPluginBase::buildCkEditorModalForm() at line 214.

                          A major bug affecting AI Search was closed: force_value + hide_property in tool_usage_limits does not inject value at tool execution time, which prevented search assistants from functioning due to forced values not being injected during tool execution, resulting in validation errors.

                          Development continued on the Add event hook to ai_ckeditor to allow context injection issue, with MR !1469 adding a metadata bag to InputInterface and seeding pre/post/streaming events from ProviderProxy. A large MR !1724 for the setup-guardrails agent skill remained under review.

                          How can I help on this project?

                          Contributors: Alphons Jaimon (AJV009), Ann Mary Sruthy (annmarysruthy), Ricardo Castañeda (cadence96) ---

                          Drupal AI Initiative

                          Activity was light over the last 24 hours, with no merge requests merged or commits pushed. One issue saw updates: Recipe: AI Automators comment-spam scoring and auto-unpublish, which tracks the creation of a Drupal recipe to wire AI Automators onto the core Comment entity for spam scoring and automatic unpublishing. The recipe would include a custom field for spam scores, auto-unpublish logic for comments scoring 8 or higher, and a triage View. This issue remains in an opened state and is currently assigned.

                          No API changes, bug fixes, or completed work was recorded during this period. The module appears to be in a planning or early development phase for this feature.

                          How can I help on this project?

                          Review the AI Automators recipe specification and contribute feedback on the proposed comment spam scoring workflow. If you have experience with Drupal recipes or AI Automators, consider helping design the field schema and auto-unpublish logic.

                          ---

                          AI Integration - ECA

                          No code was merged or shipped during this period. Activity focused on issue triage and support.

                          A new support issue was accepted regarding the AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model" functionality. The issue describes a failure when attempting to pass model-specific configuration through the AI Chat action, with the system rejecting the system_name parameter despite documentation suggesting this pattern should work. This appears to be blocking users who need to customize system prompts and other model configuration options within ECA workflows.

                          No merge requests were opened or merged, and no commits were pushed during this period. The module remains in a maintenance state with no active development blocking issues identified.

                          How can I help on this project?

                          • Investigate the AI Chat action parameter handling issue to determine whether this is a documentation error or a bug in parameter validation.
                          • Review the AI Chat action plugin code to verify how model-specific configuration is passed to the underlying AI provider API.
                          ---

                          OpenAI Provider

                          A major refactor is in progress to migrate the module's chat operation from OpenAI's legacy Chat Completions API to the newer Responses API. The Route the OpenAI chat operation through the Responses API merge request was opened during the reporting period. This MR replaces the previous approach of exposing responses as a separate operation type, instead routing all chat operations through the Responses API while maintaining backward compatibility. OpenAI plans to eventually deprecate Chat Completions in favor of Responses. The merge request touches 1,410 lines across the provider implementation. No merges or commits landed in the past 24 hours.

                          How can I help on this project?

                          • Review the open Responses API refactor merge request, focusing on backward compatibility and edge cases in the migration from Chat Completions.
                          • Test the branch against existing chat implementations to verify the API transition does not break existing functionality.

                          Contributors: Ahmad Khalil (ahmad-khalil-imagex)

                          ---

                          MCP Client

                          A new merge request was opened during this period addressing a tool-related bug. The fix tool bug branch contains 136 lines of changes and is awaiting review.

                          No merges or commits were pushed to the project in the last 24 hours, and no blocking issues were reported.

                          How can I help on this project?

                          • Review the open fix tool bug merge request to help move it toward merge.
                          • Test the MCP Client module with edge cases to identify unreported bugs or compatibility issues.

                          Contributors: Christian Fritsch (chr.fritsch)

                          ---

                          AI Agents

                          A critical bug affecting AI Search integration was resolved during this period. The force_value + hide_property in tool_usage_limits does not inject value at tool execution time issue was closed after MR !292 was merged. This fix ensures that when both force_value and hide_property are enabled in tool configuration, forced values are now correctly injected at execution time rather than failing with validation errors.

                          Several feature requests saw activity. Discussion continued on Let an agent use a role when running a tool, which addresses autonomous agent execution in cron jobs and queues where no user session exists. Work progressed on Add limits on how often a tool can run, which aims to prevent infinite loops through deterministic tool execution counts. The Make it possible to restrict the order of tools during agent executions feature has an open MR (!252) awaiting review, offering execution ordering constraints to prevent illogical tool sequences.

                          How can I help on this project?

                          • Review MR !252 for tool execution ordering constraints and provide feedback on the API design.
                          • Review MR !163 which addresses exception handling in tool execution to improve UI stability.
                          • Pick up role-based tool execution, which has no MR yet and needs implementation for autonomous agents.

                          Contributors: AKHIL BABU (AkhilBabu) [1], Joshua Fernandes (joshua1234511), Jürgen Haas (jurgenhaas)

                          ---

                          Tool API

                          Activity this period centered on a critical RTBC issue affecting REST serialization. The MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization issue has reached the "Reviewed & Tested by the Community" state. The problem occurs when Tool module is enabled alongside REST module: the normalizers registered by Tool interfere with entity serialization, causing REST endpoints to return malformed JSON that includes internal ContextDefinition and MapDefinition objects instead of properly normalized entity data. This affects any REST resource that serializes entities to JSON, breaking API responses that previously worked correctly before Tool module installation.

                          No merge requests were opened, merged, or updated during this period, and no commits were pushed to the repository. The RTBC issue remains the primary blocking concern for production deployments using REST APIs.

                          How can I help on this project?

                          • Review the RTBC REST serialization issue and validate the proposed fix or help move it toward commit.
                          • Test the Tool module with REST-enabled sites to identify additional edge cases in serialization behavior.
                          ---

                          Drupal Canvas

                          Four merge requests landed during this period, addressing critical bugs and developer experience improvements. The `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ was resolved by removing a problematic regex pattern that caused PCRE JIT stack errors on large text fields. The [CI] Playwright Report job skipped when Playwright test fails issue was closed by updating GitLab CI configuration to ensure test reports are generated even when tests fail. An auto-save access control bug was fixed in Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET`, moving the access check earlier in `ApiAutoSaveController::post()`. The Canvas AI module saw a fix for Canvas AI: Component context required props missing required flag, correcting `CanvasAiPageBuilderHelper::processSdc()` and `processCodeComponents()` to properly flag required props.

                          Work continued on translating code components and conflict resolution UI, while Make Canvas test suite pass on 11.4; drop support for 11.2 remained in progress to align with Drupal 11.4's release and the end of 11.2 security support. Several new bugs were reported, including `PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter) and Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped().

                          How can I help on this project?

                          Help diagnose the `PageRegion::createFromBlockLayout()` fatal affecting Views blocks with contextual filters — no MR exists yet. Review the open MR for heuristics in the content-entity-reference selection UI. Investigate and propose a fix for the Pathauto assertion error when publishing pages without URL aliases.

                          Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Lauri Timmanee (lauriii), Matt Glaman (mglaman) [1], Prabhavathi Vanipenta (prabha1997) [1], Ravi Maniyar (ravi.maniyar.123), Sally Young (justafish) [1], Wim Leers (wimleers)

                          ---

                          Context Control Center (CCC)

                          The Context Control Center made progress on accessibility, security, and API consistency ahead of rc1. Five merge requests addressing code review findings were opened during the period.

                          A critical security issue was identified and patched: Usage record page renders context item content without an entity access check. The usage record controller was rendering context item content without verifying access('view'), allowing users with only view ai context usage permission to read unpublished content. MR !208 gates the render on proper access checks.

                          A performance issue was also addressed: Selector loads the entire catalog when an agent has no scope subscriptions. The AiContextSelector::getPrefilteredPublishedItemIds() method was loading every published context item for agents with empty scope subscriptions (the common "global items only" configuration). MR !210 avoids the full catalog scan.

                          Accessibility improvements are underway in Clean up CCC accessible interactive links and external links (MR !200) and Clean up CCC JavaScript filter feedback (MR !206), adding screen reader announcements and proper rel attributes. Documentation consistency fixes are in MR !202.

                          Two issues were closed: Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes and Beta vs 1.1 CCC API gap analysis, which spawned the new Move from agent-specific to generic context consumer API issue, tagged as a stable blocker.

                          How can I help on this project?

                          Review the open merge requests for security (!208) and performance (!210) fixes. Test Clean up CCC documentation and API consistency, which has no related MR yet and addresses config defaults and stale documentation. Review accessibility improvements in MR !200 and !206.

                          Contributors: Joshua Fernandes (joshua1234511), Juan Correa (jucs7), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Tamas Balog (tbalog)

                          ---

                          AI translate

                          The AI translate module saw one new feature proposal added during the period. The Translation result caching and cross-field deduplication issue was opened and marked as accepted. The proposal addresses unnecessary LLM API costs by introducing caching for previously translated content and deduplication of identical strings across multiple fields within the same entity. This would benefit sites with paragraph-heavy entities or Layout Builder pages where the same short strings (CTAs, navigation titles) appear in multiple components.

                          No merge requests were merged and no commits were pushed during this period. The module remains quiet on the development front while the caching feature proposal awaits implementation work.

                          How can I help on this project?

                          ---

                          AI Related Content

                          Activity this period was light, focused on project infrastructure and bug tracking. A task to add GitLab templates progressed with an open merge request (!20) adding issue and MR templates to standardize contribution workflows.

                          On the bug front, Current node is not always excluded was closed. This issue addressed a type mismatch problem where the current node ID was returned as a string when filtering related content results, causing strict type checks in providers like Pinecone to fail. The Search API indexes this as an integer, so casting was required to ensure the current node is properly excluded from related content suggestions.

                          How can I help on this project?

                          Review the open GitLab templates MR (!20) to help standardize the project's contribution process. Test the fix for node exclusion filtering with different AI provider backends to verify type handling works correctly across integrations.

                          Contributors: Scott Euser (scotteuser)

                          ======================================================================== ## [13] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 0 Judge flags: 0 ======================================================================== ## [14] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Alphons Jaimon (AJV009), Ann Mary Sruthy (annmarysruthy), Ricardo Castañeda (cadence96)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                          AI (Artificial Intelligence)

                          then use

                          ,

                          ,

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

                            How can I help on this project?

                            " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [AI CKEditor Summarize generates summaries in a different language than the selected text](https://git.drupalcode.org/project/ai/-/work_items/3586580) State: opened | Updated: 2026-07-03 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: category::bug, priority::normal, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1738 [Issue #3586580: Fix summarize prompt translating text instead of preserving original language](https://git.drupalcode.org/project/ai/-/merge_requests/1738) | State: opened | Author: Ricardo Castañeda (cadence96), 13 diff lines Description: Summary When the Summarize option is enabled in AI CKEditor, it generates a summary in a different language instead of summarizing the selected text in its original language. This happens on a clean installation of the AI module 1.x branch. I have recorded videos showing the issue. Steps to reproduce Install Drupal on a clean site. Install and enable the AI module and AI CKEditor integration. Configure an AI provider. Go to /admin/config/content/formats/manage/full_html. Enable the AI CKEditor assistant/tools for the Full HTML text format. Enable the Summarize option. Edit o… ### [Add event hook to ai_ckeditor to allow context injection](https://git.drupalcode.org/project/ai/-/work_items/3581952) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Ahmad Khalil (ahmad-khalil-imagex) | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, candidate 1.5.x Description: >>> [!note] Migrated issue Reported by: [jessehs](https://www.drupal.org/user/620440) Related to !1469 !1425 >>> Problem/Motivation The ai_ckeditor module provides AI-powered CKEditor 5 actions (Tone, Translate, Summarize, etc.) but has zero entity awareness — it doesn't know what content type, bundle, or entity ID the editor is attached to. The ai_context module provides a sophisticated scope-based context selection system that can inject bundle-specific writing guidelines into AI prompts. These two modules cannot communicate because: ai_ckeditor does not pass entity information (… ### [Add CountTokensInterface operation type for provider-native token counting](https://git.drupalcode.org/project/ai/-/work_items/3586582) State: opened | Updated: 2026-07-03 | Author: Jérôme Tchania (codeitwisely) | Assigned: unassigned | Labels: category::feature, priority::normal Description: ## Summary Add `CountTokensInterface` and `CountTokensOutput` to drupal/ai core so that provider-native token counting participates in the `ProviderProxy` event pipeline — enabling quota enforcement, rate limiting, and cost attribution for pre-flight token checks. ## Problem `AnthropicProvider::countTokens()` (added in [ai_provider_anthropic #3607960](https://www.drupal.org/project/ai_provider_anthropic/issues/3607960)) calls the upstream SDK directly, bypassing `ProviderProxy`. No `ai.pre_generate_response` / `ai.post_generate_response` events fire, so consumers such as ai_metering never s… ### [Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails](https://git.drupalcode.org/project/ai/-/work_items/3586561) State: opened | Updated: 2026-07-03 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, aiCoreModule, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1724 [task: #3586561 Add a setup-guardrails agent skill to configure guardrails,...](https://git.drupalcode.org/project/ai/-/merge_requests/1724) | State: opened | Author: Ann Mary Sruthy (annmarysruthy), 1799 diff lines Description: ## Description The AI module already ships a `create-guardrail-plugin` agent skill that *authors* new guardrail plugin classes. There is, however, no equivalent skill for *operating* the guardrails that already exist — i.e. configuring them on a running site. Site builders and agents currently have to drive the admin UI by hand to wire up guardrails, guardrail sets, and the global guardrail list. This task adds a `setup-guardrails` skill (sibling of `create-guardrail-plugin`, under `ai/.agents/skills/`) that configures guardrails rather than creating them, driven through the [Tool module](ht… ### [AI CKEditor: Hardcoded “summarize” message shown for all plugins when no text is selected](https://git.drupalcode.org/project/ai/-/work_items/3575346) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::bug Description: >>> [!note] Migrated issue Reported by: [annmarysruthy](https://www.drupal.org/user/3664314) Related to !1240 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: All AI CKEditor plugins display "You must select some text before you can summarize it" even when the active plugin is Translate, Tone, or SpellFix.[One-line issue summary for stakeholders] Check-in Date: 02/24/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Most AI CKEditor plugins (e.g., Translate, Tone, SpellFix, etc.) require selec… ### [Tools UI overview page does not load](https://git.drupalcode.org/project/ai/-/work_items/3579979) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCoreModule, category::bug Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) Related to !1443 !1329 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation If you enable AI mode + Tools module + MCP without making other changes, then /admin/config/ai/tools leads to The website encountered an unexpected error. Try again later.InvalidArgumentException: The opener ID parameter i… ### [Plugin shouldn't show any fields if no text is selected](https://git.drupalcode.org/project/ai/-/work_items/3557016) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::feature Description: >>> [!note] Migrated issue Reported by: [damienmckenna](https://www.drupal.org/user/108450) Related to !1117 >>> Problem/Motivation When opening a ckeditor plugin, if no text is selected the UI shows the "You must select some text before you can summarize it." message, but then will also show some of the other fields from the specific plugin, e.g. the Tone plugin shows the "Choose tone" selector. Proposed resolution Don't show anything in the ckeditor plugin popup (particularly for the Tone plugin) if no text has been selected. Remaining tasks Don't show anything in the ckeditor plugin po… ### [Improve UX in Automators Tool add form (help text and workflow field behavior)](https://git.drupalcode.org/project/ai/-/work_items/3586382) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Ricardo Castañeda (cadence96) | Labels: AI Initiative Sprint, AI Product Development, UX, aiAutomators Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) >>> [Tracker] Update Summary: Improve UX in Automators Tool add form. Short Description: Add help text and improve field behavior in Automators Tool form. Check-in Date: 04/22/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation The UX of the Automators Tool creation form (/admin/config/ai/ai-automators/automators_tool/add) can be improved to reduce confusion and guide users more effectively. The following issues were identified: Description field doe… ### [Issue when creating content and click on AI Assistant on Ckeditor](https://git.drupalcode.org/project/ai/-/work_items/3586545) State: opened | Updated: 2026-07-03 | Author: Jean-Marc PAMBRUN (dpalicepeio-at-drupbuilder.org) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Quick Win, category::bug Description: Drupal 11.4.0-rc1 with [AI (Artificial Intelligence)](https://www.drupal.org/project/ai) 1.4.2 When creating content using ckeditor 5, when click on ai assitant a red message appears "Oops, something went wrong. Check your browser's developer console for more details." And the db_logs shows "Error: Call to a member function get() on null in Drupal\\ai_ckeditor\\AiCKEditorPluginBase-\>buildCkEditorModalForm() (line 214 of /home/drupbut/www/modules/contrib/ai/modules/ai_ckeditor/src/AiCKEditorPluginBase.php" Contextual information for getting started ## Context The AI CKEditor module (`ai_… ### [Create an HTML to Markdown API and service](https://git.drupalcode.org/project/ai/-/work_items/3574246) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::feature, priority::normal Description: >>> [!note] Migrated issue Reported by: [mxr576](https://www.drupal.org/user/315522) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation League\HTMLToMarkdown\HtmlConverter is initiated 3 times with 3 different configurations in current code, when #3574004: Generate a markdown version of (formatted) text field values gets solved that becomes the 4th one. https://git.drupalcode.org/search… ### [force_value + hide_property in tool_usage_limits does not inject value at tool execution time](https://git.drupalcode.org/project/ai/-/work_items/3586577) State: closed | Updated: 2026-07-03 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: category::bug, priority::normal, state::accepted Description: (Written with the help of Claude Sonnet 4.6) I've been testing AI Search (1.3.0-alpha3) with AI (1.5.x-dev) and I think I have found an issue. After creating a search assistant pointing at a vector DB index, it does not work. I looked at the configuration of the AI agent that was created when I created the assistant, and it looks like if both force_value and hide_property are enabled, the forced value is never actually injected when the tool executes. The result is a validation error: > Invalid value for [parameter] in [tool]: This value should not be null. Claude seems to think this is… ### [Create plugins for interacting with multimedia in AI](https://git.drupalcode.org/project/ai/-/work_items/3463843) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Product Development, aiCkeditor, category::task Description: >>> [!note] Migrated issue Reported by: [kevinquillen](https://www.drupal.org/user/317279) Related to !1431 !761 >>> Problem/Motivation Now that #3462674: Create a generic AI plugin layer for CKEditor is pending a merge, one of the final OOTB AI plugins for CKEditor is generating an image from providers and saving the result back to the media library in Drupal. This would be a core piece of CKEditor plugin functionality. This is true for text to speech or audio providers as well. This is more of an intermediate task as I assume the plugin would need to understand how to convert the saved … --- MERGE REQUESTS (24h) --- ### [3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming...](https://git.drupalcode.org/project/ai/-/merge_requests/1469) State: opened | Author: Alphons Jaimon (AJV009) | Branch: 3581952-add-event-hook-1.4.x | 1335 diff lines Description: 3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming events from input metadata in ProviderProxy Closes #3581952 Issue: https://git.drupalcode.org/project/ai/-/work_items/3581952 --- COMMITS (24h) --- (none) ======================================================================== ## [15] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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). ### [Recipe: AI Automators comment-spam scoring and auto-unpublish](https://git.drupalcode.org/project/ai_initiative/-/work_items/3585304) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Levente Besenyei (LeventeB) | Labels: AI Initiative Sprint, AI Product Development, category::feature, ideas Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Ship a recipe that wires AI Automators onto the core Comment entity to score spam on a custom_field and auto-unpublish comments scoring 8 or higher, with a View for triage. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation AI Automators is powerful but the on-ramp is still "wire it up yourself" - even for the canonical moderation use case of scoring comments for spam. We want a Drupal recipe that site… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [16] summariseModule:ai_integration_eca:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Integration - ECA (machine name: ai_integration_eca) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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 Integration - ECA

                              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 Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model"](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3573445) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::support, priority::normal, state::accepted, userInterface Description: >>> [!note] Migrated issue Reported by: [michaelb](https://www.drupal.org/user/2309046) >>> Hello, I am trying to use an AI task within ECA using the ai_integration_eca module. When triggering an "AI Chat" action that includes a value in the field "Specific configuration for the model", the execution fails with the following error: Error invoking model response: Unknown parameter: 'system_name' I followed the example provided in the field description and simply copied the configuration: system_name: system system_prompt: you are a helpful assistant Without this specific configuration, the … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [17] summariseModule:ai_provider_openai:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: OpenAI Provider (machine name: ai_provider_openai) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Ahmad Khalil (ahmad-khalil-imagex)". 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

                                OpenAI Provider

                                then use

                                ,

                                ,

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

                                  How can I help on this project?

                                  " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Issue #3558801: Route the OpenAI chat operation through the Responses API...](https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/78) State: opened | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3558801-responses-api-chat | 1410 diff lines Description: Issue #3558801: Route the OpenAI chat operation through the Responses API instead of Chat Completions. # MR Summary — Convert the OpenAI chat operation to the Responses API (Issue #3558801) ## Why this was done OpenAI's Responses API is the successor to Chat Completions, and OpenAI intends to eventually deprecate Chat Completions. The issue originally proposed exposing Responses as a separate responses operation type (MR !56), but the maintainers (comments #6 and #9) rejected that direction: * No other provider distinguishes chat vs. responses — the operation type doesn't change, only Open… --- COMMITS (24h) --- (none) ======================================================================== ## [18] summariseModule:mcp_client:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: MCP Client (machine name: mcp_client) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: Christian Fritsch (chr.fritsch)". 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

                                  MCP Client

                                  then use

                                  ,

                                  ,

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

                                    How can I help on this project?

                                    " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix tool bug](https://git.drupalcode.org/project/mcp_client/-/merge_requests/20) State: opened | Author: Christian Fritsch (chr.fritsch) | Branch: 3608121-mcp-tools-always | 136 diff lines Description: Closes #3608121 --- COMMITS (24h) --- (none) ======================================================================== ## [19] summariseModule:ai_agents:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: AKHIL BABU (AkhilBabu) [1], Joshua Fernandes (joshua1234511), Jürgen Haas (jurgenhaas)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                    AI Agents

                                    then use

                                    ,

                                    ,

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

                                      How can I help on this project?

                                      " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [force_value + hide_property in tool_usage_limits does not inject value at tool execution time](https://git.drupalcode.org/project/ai_agents/-/work_items/3586044) State: closed | Updated: 2026-07-03 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::bug, priority::major Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !292 [fix: #3586044 Apply forced tool argument values at execution time](https://git.drupalcode.org/project/ai_agents/-/merge_requests/292) | State: merged 2026-07-03 | Author: AKHIL BABU (AkhilBabu), 288 diff lines Description: (Written with the help of Claude Sonnet 4.6) I've been testing AI Search (1.3.0-alpha3) with AI (1.5.x-dev) and I think I have found an issue. After creating a search assistant pointing at a vector DB index, it does not work. I looked at the configuration of the AI agent that was created when I created the assistant, and it looks like if both force_value and hide_property are enabled, the forced value is never actually injected when the tool executes. The result is a validation error: > Invalid value for [parameter] in [tool]: This value should not be null. Claude seems to think this is… ### [Let an agent use a role when running a tool](https://git.drupalcode.org/project/ai_agents/-/work_items/3518167) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !87 >>> Problem/Motivation Currently the modus operandi is that the permissions checks that happens in tools, happens on the session that is running it. In AI Agents Explorer or the AI Assistants API, this means the user that triggers the query. There are however cases where agents should be completely autonomous or where they are triggered in queues/cron jobs, where there is no sessions attached. In those cases it should be possible for the person that sets up the agent to be able to… ### [Add limits on how often a tool can run](https://git.drupalcode.org/project/ai_agents/-/work_items/3547995) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !224 >>> Problem/Motivation Right now we have to tell the system prompt how often it is allowed to use a specific tool. But there should also be a determenistic way, where if the tool gets stuck in a loop or searches to no awail in a RAG database for instance, we need to be able to programatically say how many times a tool can run. Proposed resolution Add a form value of how many times a tool can run. Add a form for setting the error message when this happens. If the tool has run tha… ### [Make it possible to restrict the order of tools during agent executions](https://git.drupalcode.org/project/ai_agents/-/work_items/3560681) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !252 [Issue #3560681: Add per-tool execution ordering constraints for agent loops.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/252) | State: opened | Author: Joshua Fernandes (joshua1234511), 2341 diff lines Description: >>> [!note] Migrated issue Reported by: [shashikanth171](https://www.drupal.org/user/3516867) Related to !252 >>> Problem/Motivation AI Agent can sometimes execute tools in an order that doesn't make any sense. We can avoid this by improving the prompt template, making it more verbose with trial and error. Need to somehow allow configuration of each tool, to set which tool should be run prior to it. We can also expand it by including conditions like should be executed 1. only once, 2. first, 3. last etc. Depending on the tool and use case, configuring the agent with such restrictions will… --- MERGE REQUESTS (24h) --- ### [Issue #3537123 by jurgenhaas: Exceptions in tool execute break the UI for the user](https://git.drupalcode.org/project/ai_agents/-/merge_requests/163) State: opened | Author: Jürgen Haas (jurgenhaas) | Branch: 3537123-exceptions-in-tool | 295 diff lines Description: Closes #3537123 --- COMMITS (24h) --- - [b3c45446](https://git.drupalcode.org/project/ai_agents/-/commit/b3c45446c03ff9518b8929973fdb6b3fc1a96262) fix: #3586044 Apply forced tool argument values at execution time — AKHIL BABU (2026-07-03T15:06:53.000+00:00) ======================================================================== ## [20] summariseModule:tool:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Tool API (machine name: tool) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                                      Tool API

                                      then use

                                      ,

                                      ,

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

                                        How can I help on this project?

                                        " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization (same as #3568588)](https://git.drupalcode.org/project/tool/-/work_items/3582939) State: opened | Updated: 2026-07-03 | Author: Stephan Huber (stmh) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, state::rtbc Description: ### Steps to reproduce 1. Install Drupal 11.x with the REST module enabled and a content entity exposed via a `ResourceBase` plugin that calls `$serializer->normalize($entity, 'json')` (e.g. any custom REST resource that returns entities as normalized arrays). 2. Enable the Tool module (verified on 1.0.0-alpha9, 1.0.0-beta1, and 1.0.x-dev). 3. Request the REST endpoint and inspect the JSON response — or reproduce directly via `drush php:eval`: ```php $node = \Drupal::entityTypeManager()->getStorage('node')->load(1); print_r(\Drupal::service('serializer')->normalize($node, 'json')); … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [21] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Lauri Timmanee (lauriii), Matt Glaman (mglaman) [1], Prabhavathi Vanipenta (prabha1997) [1], Ravi Maniyar (ravi.maniyar.123), Sally Young (justafish) [1], Wim Leers (wimleers)". 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). ### [Dependency Dashboard](https://git.drupalcode.org/project/canvas/-/work_items/3591657) State: opened | Updated: 2026-07-04 | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Assigned: unassigned | Labels: projectManagement Description: This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. ## Repository Problems Renovate tried to run on this repository, but found these problems. - ⚠️ WARN: Failed to set branch status - ⚠️ WARN: Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN - ⚠️ WARN: No tool releases found. - ⚠️ WARN: No github.com token has been configured. Skipping release notes retrieval ## Deprecations / Replacements > ⚠️ **Warning** > The foll… ### [Add heuristics for exposing fields/props to the content-entity-reference selection UI](https://git.drupalcode.org/project/canvas/-/work_items/3591669) State: opened | Updated: 2026-07-03 | Author: Christian López Espínola (penyaskito) | Assigned: Lauri Timmanee (lauriii), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: category::task, internalHttpApi, priority::critical, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1289 [feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI](https://git.drupalcode.org/project/canvas/-/merge_requests/1289) | State: opened | Author: Christian López Espínola (penyaskito), 1179 diff lines Description: ### Overview When a Code Component Developer uses the `content-entity-reference` "Typed Data browser" UI (added in #3585354) to pick which entity data a prop consumes, the picker offers fields and properties it should not: - **Internal metadata** that storage would reject anyway (e.g. the `revision_default` / `workspace` base fields). - **A duplicated image URL**: the `image` field surfaces *"Resolved image URL with ?alternateWidths query parameter"* twice, because the `src` and `src_with_alternate_widths` computed properties share that label. `src` exists precisely as the developer-facing a… ### [Prevent translation before page is published in source language](https://git.drupalcode.org/project/canvas/-/work_items/3591768) State: opened | Updated: 2026-07-03 | Author: Vipin Mittal (vipin.mittal18) | Assigned: unassigned | Labels: translation Description: **Problem** Users can currently create and publish translations even when the source page has not been published. **Steps to Reproduce:** 1. Create a page in the default language and Do not publish the page. 1. Click language switcher 1. Create and publish the translation in secondary language. **Actual Result:** The translation can be created and published even though the page is unpublished in source language. **Expected Result / Acceptance Criteria:** 1. Translation cannot be created until the source page is published. 1. Three dot menu should not be visible against secondary language.… ### [`Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_](https://git.drupalcode.org/project/canvas/-/work_items/3575644) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: Matt Glaman (mglaman), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: Performance, category::bug, priority::critical, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1276 [Issue #3575644: `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_](https://git.drupalcode.org/project/canvas/-/merge_requests/1276) | State: merged 2026-07-03 | Author: Matt Glaman (mglaman), 226 diff lines Description: >>> [!note] Migrated issue Reported by: [barakgalili](https://www.drupal.org/user/387269) >>> Overview The canvas module overrides the property definitions for the string_long field type in \Drupal\canvas\Plugin\Field\FieldTypeOverride\StringLongItemOverride. It currently adds a RegexConstraint to the value property with the pattern /(.|\r?\n)*/ to match any string, including newlines. When saving entities with large amounts of text (e.g., 10,000+ characters) in a string_long field, this specific regex pattern causes PHP's PCRE engine to hit the JIT stack limit (PREG_JIT_STACKLIMIT_ERROR, … ### [[CI] Playwright Report job skipped when Playwright test fails](https://git.drupalcode.org/project/canvas/-/work_items/3591332) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::task, priority::normal, state::needsReview, v1.x-dev Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1146 [Issue #3591332: [CI] Playwright Report job skipped when Playwright test fails](https://git.drupalcode.org/project/canvas/-/merge_requests/1146) | State: merged 2026-07-03 | Author: Sally Young (justafish), 44 diff lines Description: >>> [!note] Migrated issue Reported by: [bnjmnm](https://www.drupal.org/user/2369194) Related to !1146 >>> Overview Until fairly recently, when Playwright reports failed we'd still get a report, which was quite useful. Now, it looks like the report is only generated if everything passes (its possible some fails still result in reports, but this is what I observed). this occurs even in instances where the test completes before the 30 min timeout. Here's a recent example. Any way to get this back? Proposed resolution User interface changes ### [Rudimentary conflict resolution UI](https://git.drupalcode.org/project/canvas/-/work_items/3591601) State: opened | Updated: 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Wim Leers (wimleers), Feliksas Mazeikis (f.mazeikis), Ravi Maniyar (ravi.maniyar.123) | Labels: Conflict resolution, category::feature, pageBuilder, priority::critical Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1183 [feat(conflict): Add conflict resolution UI with viewport selection and route integration](https://git.drupalcode.org/project/canvas/-/merge_requests/1183) | State: opened | Author: Ravi Maniyar (ravi.maniyar.123), 4051 diff lines Description: ### Overview We are adding "Conflict resolution UI". This issue will add basic UI elements based on that allow users to open and interact with "Conflict resolution UI". ### Proposed resolution Add ability to open "Conflict resolution UI" using CTA button introduced in https://git.drupalcode.org/project/canvas/-/work_items/3585970. Create rudimentary version of the "Conflict resolution UI" which: * displays all of the conflicts in paginated (1 of X) UI with navigation controls ("\" * allows users to select which of the entities they want to use in order to resolve the conflict (auto-save v… ### [DX: `php (lint)` CI job runs against 11.2, fails on 11.3/11.4](https://git.drupalcode.org/project/canvas/-/work_items/3591767) State: opened | Updated: 2026-07-03 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: DX (Developer Experience), priority::critical, projectManagement Description: ## Problem While working on !1332, I just realized why @balintbrews and others have been reporting > I NEVER see a passing `phpcs` or `phpstan` locally … they most likely are developing on Drupal 11.3 (or now 11.4), not the _minimum_ Drupal core version supported by Canvas! While using AI to get !1332 to pass, `phpcs` and `phpstan` _also_ fail, because they're running against 11.4, not the new minimum version (11.3, because 11.2 support was dropped by Drupal core). ## Solution Update Canvas' `composer run lint:phpcs`, `composer run lint:phpstan` etc commands detect_ that the core version … ### [Test Canvas on Drupal 11.3](https://git.drupalcode.org/project/canvas/-/work_items/3561392) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::critical, stable target Description: >>> [!note] Migrated issue Reported by: [effulgentsia](https://www.drupal.org/user/78040) Related to !594 !382 !449 >>> Overview Now that Drupal 11.3 beta is out, we should run our full test suite against it, to know what, if anything, fails, and try to fix that before 11.3.0 is released. We don't need this run on every commit. Either daily or on-demand is sufficient. Proposed resolution Add CI job and fix the encountered failures: https://git.drupalcode.org/project/canvas/-/work_items/3560831 https://git.drupalcode.org/project/canvas/-/work_items/3549574 … and address new deprec… ### [Make Canvas test suite pass on 11.4; drop support for 11.2](https://git.drupalcode.org/project/canvas/-/work_items/3591764) State: opened | Updated: 2026-07-03 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: AI-accelerated, blocker, projectManagement Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1332 [#3591764: Make Canvas test suite pass on 11.4; drop support for 11.2](https://git.drupalcode.org/project/canvas/-/merge_requests/1332) | State: opened | Author: Wim Leers (wimleers), 2296 diff lines Description: Yesterday, https://www.drupal.org/project/drupal/releases/11.4.0 was released. This needs 2 ~MRs~ key things to happen, easiest to do in a single MR: - [ ] Canvas should be tested explicitly against 11.4 → most commits of !1332 - [ ] Canvas should drop 11.2 support, because Drupal core dropped security support for 11.2 → require (9eccebfc15ac5906efe49eb42195d025ffc66017) + remove all 11.2 mentions (5122ccf5e11fdd8f05fc1805d074efa2979275e8) Note that the latter will unblock !1241. ### [Adopt `AtLeastOneOf` validation constraint for cardinality validation](https://git.drupalcode.org/project/canvas/-/work_items/3526703) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: Configuration schema, Needs upstream feature, category::task, configManagement Description: >>> [!note] Migrated issue Reported by: [wim leers](https://www.drupal.org/user/99777) Related to !1239 >>> Overview https://git.drupalcode.org/project/canvas/-/work_items/3467870 added type: array support and added this:           # TRICKY: unfortunately, `field.storage_settings.*` does not store cardinality, but the FieldStorageConfig          # entity does (config schema: `field.storage.*.*`). Hence the need for an additional key-value pair.          ca… ### [Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET`](https://git.drupalcode.org/project/canvas/-/work_items/3591736) State: closed | Updated: 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Feliksas Mazeikis (f.mazeikis) | Labels: AI-accelerated, autoSave, backend, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1302 [#3591736 "Access check in ApiAutoSaveController::post() should be performed earlier"](https://git.drupalcode.org/project/canvas/-/merge_requests/1302) | State: merged 2026-07-03 | Author: Feliksas Mazeikis (f.mazeikis), 267 diff lines Description: With the changes in !1271 the access check happens too late in the handling of auto-save items publishing request. If a user submits a list to `ApiAutoSaveController::post()` of entities they have no access to, the entities get filtered out in `ApiAutoSaveController::getPublishableAutoSaves()` via: ``` $access = $item['entity']->access('view label', return_as_object: TRUE); ... return $access->isAllowed() && ($item['is_default_translation'] ?? TRUE); ``` This results in a s set of "publishable auto-save items" that misses the entities the user has submitted. This then fail… ### [`PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter)](https://git.drupalcode.org/project/canvas/-/work_items/3591766) State: opened | Updated: 2026-07-03 | Author: Martin Anderson-Clutz (mandclu) | Assigned: unassigned | Labels: Description: ## Problem Saving the core "Appearance > Settings" (`system_theme_settings`) form for a theme that already has Drupal Canvas enabled (i.e. any `canvas.page_region..*` config entity already exists) throws an uncaught `AssertionError` and returns a fatal error page, for example when simply uploading a new theme logo: ``` AssertionError: assert([] === iterator_to_array($page_region->getTypedData()->validate())) in assert() (line 348 of modules/contrib/canvas/src/Entity/PageRegion.php) Drupal\canvas\Entity\PageRegion::createFromBlockLayout() (Line: 75) Drupal\canvas\Hook\PageRegionHooks::formSys… ### [Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities](https://git.drupalcode.org/project/canvas/-/work_items/3589814) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, autoSave Description: >>> [!note] Migrated issue Reported by: [narendrar](https://www.drupal.org/user/1730192) Related to !1104 >>> Overview The goal is to automate the translation workflow within the Canvas module by programmatically creating TMGMT jobs for Canvas pages. Proposed resolution Hook Implementation: The logic for translation Jobs should be in Entity hooks for seamless integration. This Spike is only for Canvas page. We also need to do similar work for Config Entities (Content Template/Regions) in another spike/issue. Make sure that Creating/updating Canvas pages should always trigger translation … ### [Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped()](https://git.drupalcode.org/project/canvas/-/work_items/3591763) State: opened | Updated: 2026-07-03 | Author: Fons Vandamme (f0ns) | Assigned: unassigned | Labels: category::bug, priority::normal, state::needsReview Description: **Problem** When Pathauto is installed, publishing a new canvas_page that has no URL alias returns a 500 from `POST /canvas/api/v0/auto-saves/publish`: `AssertionError: assert($pathauto_item instanceof PathautoItem) in assert() (line 127 of modules/contrib/canvas/src/Hook/PageHooks.php)` Pages that already have a URL alias publish without error. **Steps to reproduce** 1. Install Canvas 1.7.1 and Pathauto on Drupal 11.4. 2. Create a new page in the Canvas UI. Do not set a URL alias. 3. Click Publish. The request fails with a 500 and the error above. ### [Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props](https://git.drupalcode.org/project/canvas/-/work_items/3591663) State: opened | Updated: 2026-07-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: AKHIL BABU (AkhilBabu) | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, ai Description: ## Steps to Reproduce 1. Install `canvas_ai` on a Drupal CMS 2 site using the Byte Theme or Starter Theme (Mercury components are required). 2. Install `ai_api_explorer`. 3. Log in as user 1. 4. Go to: `/admin/config/ai/explorers/tools_explorer` 5. Select the **set_component_structure** tool from the dropdown. 6. Run the following Drush command to set the current layout value required by the tool: ```bash ddev drush php:eval " \Drupal::service('account_switcher')->switchTo(\Drupal\user\Entity\User::load(1)); \Drupal::service('canvas_ai.tempstore')->setData( 'curren… ### [Canvas AI: Component context required props missing required flag](https://git.drupalcode.org/project/canvas/-/work_items/3591655) State: closed | Updated: 2026-07-03 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, Novice Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1328 [Fix required prop flag dropped in processSdc() and missing in processCodeComponents().](https://git.drupalcode.org/project/canvas/-/merge_requests/1328) | State: merged 2026-07-03 | Author: Prabhavathi Vanipenta (prabha1997), 265 diff lines Description: ## Problem A regression in `CanvasAiPageBuilderHelper::processSdc()` causes the `required: true` flag to be dropped from component context metadata. Current code: `// Mark required props. if (isset($sdc_definition['props']['required']) && \in_array($prop_name, $sdc_definition['props']['required'], TRUE)) { $output[$source_id]['components'][$component_id]['props'][$prop_name]['required'] = TRUE; } ` The flag should instead be added to the prop metadata: `// Mark required props. if (isset($sdc_definition['props']['required']) && \in_array($prop_name, $sdc_definition['props']['required'], … --- MERGE REQUESTS (24h) --- ### [Draft: chore(Data model): #3591727 Store each prop's translatability per component version so deleting an optional prop keeps config-defined component trees valid](https://git.drupalcode.org/project/canvas/-/merge_requests/1300) State: opened | Author: Christian López Espínola (penyaskito) | Branch: 3591727-track-translatable-component-field-prop-definition | 4299 diff lines Description: Closes #3591727 ## Summary `ComponentInputsMapping` (introduced in #3582478) validates every config-defined component tree's `inputs`, but it builds each component instance's input schema from the component's **live** JSON Schema (`getMetadata()`), not the version the instance actually references. So deleting an optional prop from an SDC or code component — which creates a new component version — made previously valid-and-unchanged config-defined trees (still pointing at the old version) report the removed input as `'' is not a supported key`. This is a regression for monolingual sites and a… ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 77 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | mysql | service-image | minor | `8.0` → `8.4` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 6am on Monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this MR, c… ### [feat(Conflict detection): #3591601 "Conflict resolution via API call and layout endpoint support for published entities"](https://git.drupalcode.org/project/canvas/-/merge_requests/1194) State: opened | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591601-rudimentary-conflict-resolution-ui-be | 1283 diff lines Description: ## What this branch does **TL;DR:** Modifies the `ApiContentAutoSaveControllers::patch()` to allow updating auto-save item conflict as resolved; Adds optional argument to the `ApiLayoutController::get()` that allows fetching layout of a published entity; all new functionality is hidden behind `canvas_dev_cd` **Long version:** This MR adds "Ability to resolve conflict by keeping changes in the auto-save" and an "ability to load the visual preview of both auto-save and published version of the entity with conflict" capability described in the https://git.drupalcode.org/project/canvas/-/milest… ### [Decouple component_tree translation logic from TMGMT](https://git.drupalcode.org/project/canvas/-/merge_requests/1320) State: opened | Author: Lauri Timmanee (lauriii) | Branch: 3591754-decouple-tmgmt | 1494 diff lines Description: The logic that extracts a component tree's translatable strings and writes translations back is moved out of `ComponentTreeFieldProcessor` (which extends a `tmgmt_content` class, so it only loads with TMGMT installed) into a standalone `ComponentTreeTranslator` service under `src/Translation/`. `ComponentTreeFieldProcessor` becomes a thin TMGMT adapter that delegates to it. `ComponentInputsTranslatablesExtractor` moves to `src/Translation/` alongside it. Behavior is unchanged; code is moved, not rewritten. This is needed to avoid duplication in https://git.drupalcode.org/project/canvas_transl… ### [#3591738 add translation data to code component provider](https://git.drupalcode.org/project/canvas/-/merge_requests/1301) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591738-add-translation-data-to-code-component-data-provider | 579 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591738 --- COMMITS (24h) --- - [d181662f](https://git.drupalcode.org/project/canvas/-/commit/d181662f9bf168a860e0dca3eb773b9a78e0df7e) ci: #3591332 [CI] Playwright Report job skipped when Playwright test fails — Sally Young (2026-07-03T15:13:39.000+00:00) - [7698348f](https://git.drupalcode.org/project/canvas/-/commit/7698348f26f7cf6be994b9e866d38d7850de8628) fix(Data model): #3575644 `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ — Matt Glaman (2026-07-03T09:32:02.000+00:00) - [74cb7134](https://git.drupalcode.org/project/canvas/-/commit/74cb713404d3a5c2d2b47de072a37efe143433b1) fix(Auto-save,Internal HTTP API): #3591736 Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET` — Feliksas Mazeikis (2026-07-03T08:42:41.000+00:00) - [40896895](https://git.drupalcode.org/project/canvas/-/commit/4089689543c555cc736003e961e71b6018c5fcc9) fix(AI): #3591655 Canvas AI: Component context required props missing required flag — Prabhavathi Vanipenta (2026-07-03T07:01:20.000+00:00) ======================================================================== ## [22] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Joshua Fernandes (joshua1234511), Juan Correa (jucs7), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Tamas Balog (tbalog)". 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). ### [Clean up CCC documentation and API consistency](https://git.drupalcode.org/project/ai_context/-/work_items/3586305) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **6. Documentation And API Consistency** **Priority:** High to Medium **Why group these together:** These are low-risk docs/code consistency fixes that prevent contributors from copying stale API names or relying on a fallback that differs from install defaults. Includes: - Disabled select replacements. - Help list render arrays. - Table captions. - Emoji warning cleanup. ## Solution ### 6.1 Align the default context prefix **Files:** - `config/install… ### [Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/work_items/3586271) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !211 [Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/merge_requests/211) | State: opened | Author: Juan Correa (jucs7), 2954 diff lines Description: Follow-up to: #3586192 _**Verify the issue problem and solution before proceeding.**_ ## Title **AI Context: Consistency / DX cleanup (final, constructor promotion, snake_case locals, service interfaces)** --- ## Description Follow-up to #3586192 / naming & DX review. Addresses the remaining **consistency / DX** items that were explicitly out of scope for the naming MR. **No functional or API behavior changes** — style, clarity, and maintainability only. ### Background The naming/DX MR covered route/permission renames, dead code removal, `new self` in final classes, and snake_case fix… ### [Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes](https://git.drupalcode.org/project/ai_context/-/work_items/3586280) State: closed | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Description _**Verify the issue problem and solution before proceeding.**_ Drupal 11.3 deprecates kernel test classes that do not declare the PHPUnit `#[RunTestsInSeparateProcesses]` attribute. From Drupal 12.0, missing the attribute will throw an exception ([change record](https://www.drupal.org/node/3548485)). The ai_context module currently has **4 of 39** kernel test classes with the attribute: - `AiContextChildrenServiceTest` - `AiContextItemFormGlobalCountTest` - `AiContextTextFieldMigrationTest` - `AiContextUpdate10010Test` The remaining **35** kernel test classes need: ```php … ### [[Discuss] Context scope subscription approach](https://git.drupalcode.org/project/ai_context/-/work_items/3586320) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol), Aidan Foster (aidanfoster), Emma Horrell (emma-horrell) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Context scope subscriptions have been confusing for beta users, and scope plugins have different shapes that convolute the idea of subscriptions. We will be reachitecting scope plugins in: - #3586243+s - #3586281+s - #3586273+s so we should decide if "subscriptions" are the right mental model. ## Solution Analyze and update or create follow-up issues as needed. ### [Inject context into ai_ckeditor requests](https://git.drupalcode.org/project/ai_context/-/work_items/3581955) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, AI Sprint 9 Description: >>> [!note] Migrated issue Reported by: [jessehs](https://www.drupal.org/user/620440) Related to !116 >>> Problem/Motivation The ai_context module cannot inject scope-matched context items into ai_ckeditor AI requests because ai_ckeditor bypasses the ai_agents pipeline (and its BuildSystemPromptEvent) entirely — it calls the AI provider directly in its own streaming controller. There is no event or hook point for ai_context to intercept. This issue is the ai_context companion to the ai_ckeditor entity context and event extensibility work tracked in the drupal/ai module issue queue. … ### [Beta vs 1.1 CCC API gap analysis](https://git.drupalcode.org/project/ai_context/-/work_items/3586318) State: closed | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Description As we are getting closer to rc1, we need to do a gap analysis to see what are obvious API gaps that we should address prior to rc1 to properly enable contributed and custom module integration. ## Tasks * [x] Gather relevant beta3 and beta4 issues and documents * [x] Feed into fable 5 * [x] Review findings * [x] Add follow-up issues as needed ## Acceptance criteria * Analysis document is created and reviewed * Relevant follow-up issues are created ## Related issues - #3586289+s - #3581955+s - #3586281+s - #3586243+s - #3586268+s - #3586273+s ### [Move from agent-specific to generic context consumer API](https://git.drupalcode.org/project/ai_context/-/work_items/3586319) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Problem/motivation CCC was initially focused on agents, but other consumers will also want context. Example: - ai_ckeditor - #3581955+s - automators - #3563106+s - other contributed and custom modules ## Solution Rearchitect the code to center on context consumers, with agents as just one type of consumer. Fable 5 plan from: #3586318+s [ai_context-consumer-rearchitecture-plan-v3.md](https://git.drupalcode.org/-/project/191993/uploads/43d12b8f77e375c268ef3f9dc0b6bd40/ai_context-consumer-rearchitecture-plan-v3.md) ## AI usage - [x] AI assisted issue ### [[Meta] CCC cleanup and API hardening from code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Sprint 14, category::plan, priority::major, sprint candidate Description: ## Problem/motivation Follow-up to: #3586294+s ### New docs Since I had fable 5 review both 1.0.x and the MR branch for #3586218+ at the same time, it didn't really differentiate where the problems were. Many of the problems were for #3586218+ which should be fixed in that issue since it's not merged yet. I've added the info to that issue's MR. Here are the new docs for all problems that aren't for #3586218+: [ai_context-beta4-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/69d239d43391b757cc440a9e04b54e57/ai_context-beta4-1.0.x-issues.md) #### Additional findings … ### [Rename entity bundle and target entity scope plugins for better DX](https://git.drupalcode.org/project/ai_context/-/work_items/3586276) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 12 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !195 [Issue #3586276: Rename entity bundle and target entity scope plugins for better DX](https://git.drupalcode.org/project/ai_context/-/merge_requests/195) | State: opened | Author: Tamas Balog (tbalog), 3803 diff lines Description: ## Problem/solution Follow up to: #3586148+s The naming of the entity bundle and target entity scope plugins is confusing. ## Solution **AiContextScopeEntityBundle** Rename Entity Bundle => Entity Type at a code-level because there are bundleless content entities. Label: Entity Types Description: Apply this context to every entity of a chosen type, for example all Article nodes, every Document media item, or every Canvas page. Choose this when the context is true for the whole type, not a single item. **AiContextScopeTargetEntity** Rename Target Entity => Entity Item because target… ### [Usage record page renders context item content without an entity access check](https://git.drupalcode.org/project/ai_context/-/work_items/3586311) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !208 [Issue #3586311: Gate context item render on access('view') in usage record page.](https://git.drupalcode.org/project/ai_context/-/merge_requests/208) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 372 diff lines Description: ## Problem Follow-up to: #3586294+s Parent: #3586310+s _**This issue should be verified prior to working on it to make sure it is valid.**_ `AiContextUsageRecordController` renders the full current content of the referenced context item via the entity view builder with no `access('view')` check. The route only requires `view ai context usage`, so a user with that permission alone can read the content of items they cannot view — notably items unpublished since the usage was recorded (viewing those requires `view any unpublished ai context item` or ownership). The same controller *does* ch… ### [Clean up CCC form and table accessibility cleanup](https://git.drupalcode.org/project/ai_context/-/work_items/3586304) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **5. Form And Table Accessibility Cleanup** **Priority:** Medium **Why group these together:** These are smaller Form API and admin UI accessibility improvements. They can be handled in one cleanup issue. Includes: - `Drupal.announce()` result counts for both JS filters. - Tests for filter announcements if feasible. ## Solution ### 5.1 Replace disabled read-only selects with text **File:** - `src/Form/AiContextAgentForm.php` **Problem:** Read-only s… ### [Allow subcontext scope to override parent scope](https://git.drupalcode.org/project/ai_context/-/work_items/3586218) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 10 Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !159 [Issue #3586218: Allow subcontext scope to override parent scope.](https://git.drupalcode.org/project/ai_context/-/merge_requests/159) | State: opened | Author: Kristen Pol (kepol), 3229 diff lines Description: ## Problem/motivation Follow-up to: #3576092 ## Solution From the other issue: Discussion with Emma+Aidan at UX sync: - Toggle (true/false) is defaulted to "Same as parent" (true) right above Global and then hide all of them - Description: "Disable to customize scope." Here's a [plan from cursor](https://www.drupal.org/files/issues/2026-04-21/subcontext_scope_inheritance_51216439.plan_.md) that can be updated to reflect ^ ## Tasks - [x] Add code - [x] Review code - [ ] Manually test code ## AI usage - [ ] AI assisted issue - [ ] AI assisted code - [x] AI generated code ### [Promote Document Loader: Context Importer from experimental to stable](https://git.drupalcode.org/project/ai_context/-/work_items/3586282) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Description Follow-up to: - #3586275+s Blocked by release of: - canvas#3575644+s ### Summary The `ai_context_document_loader` submodule (Document Loader: Context Importer) is currently marked `lifecycle: experimental`. The initial integration work is largely complete: upstream dependencies are on stable constraints (`document_loader:^2.0.3`, `ai_file_to_text:^1.0`), and temporary Document Loader Composer patches have been removed. Before removing the experimental lifecycle flag, we should close out documentation, testing, and install-behavior follow-ups. The Canvas StringLongItemOver… ### [Clean up CCC JavaScript filter feedback](https://git.drupalcode.org/project/ai_context/-/work_items/3586303) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !206 [Issue #3586303: Announce filtered row counts to screen readers in JS filter behaviors.](https://git.drupalcode.org/project/ai_context/-/merge_requests/206) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 69 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **4. JavaScript Filter Feedback** **Priority:** High **Why group these together:** Both filters implement similar client-side table filtering and should expose the same accessible feedback pattern. Includes: - Pill-list overflow accessible text. - Truncated description accessible text. - Icon-only indicators. - Manual assistive technology check for `ai/ai_global` tooltip behavior. ## Solution ### 4.1 Announce filtered result counts **Files:** - `js/ai_… ### [Clean up CCC test and documentation consistency before rc1](https://git.drupalcode.org/project/ai_context/-/work_items/3586299) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !207 [Issue #3586299: Fix test and documentation consistency before rc1.](https://git.drupalcode.org/project/ai_context/-/merge_requests/207) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 286 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **7. Test Quality And Test Documentation** **Priority:** Medium **Why group these together:** These fixes all improve test reliability and signal. They can be split further if the test changes become large. Includes: - Context prefix default alignment. - `getManageUrl()` docs update. - Optional `hook_help()` decision/follow-up. - `tests/README.md` environment guidance. ## Solution ### 7.1 Make integration-test process metadata consistent **Files:** - `… ### [Selector loads the entire catalog when an agent has no scope subscriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586315) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !210 [Issue #3586315: Avoid full catalog scan when agent has no scope subscriptions.](https://git.drupalcode.org/project/ai_context/-/merge_requests/210) | State: opened | Author: Pravesh Poonia (Pravesh_Poonia), 552 diff lines Description: ## Problem Follow-up to: #3586294+s Parent: #3586310+s _**This issue should be verified prior to working on it to make sure it is valid.**_ `AiContextSelector::getPrefilteredPublishedItemIds()` returns NULL when `$scopeSubscriptions` is empty, so the chunk loop loads **every published context item** (full entities including content fields) on every AI request. This hits the very common "global items only" agent configuration. With thousands of items that's dozens of chunked queries, thousands of entity hydrations, and thousands of per-item plugin `matchesCurrentContext()` calls per reque… --- MERGE REQUESTS (24h) --- ### [Issue #3586305: Fix context prefix default alignment and stale getManageUrl docs.](https://git.drupalcode.org/project/ai_context/-/merge_requests/202) State: opened | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: fix/documentation-api-consistency-3586305 | 127 diff lines Description: Fixed 6.1 and 6.2 6.1 — Context prefix alignment The fallback string in AiContextSystemPromptSubscriber didn't match the value in config/install/ai_context.settings.yml. Aligned the PHP fallback to the canonical config default. 6.2 — Stale getManageUrl() docs scope_api.md and custom_scopes.md were still referencing getManageUrl(): ?string which no longer exists. Updated both files to document the actual getManageRoute(): ?array method with the correct return structure. ### [Issue #3586300: Updated CCC cacheability and access metadata.](https://git.drupalcode.org/project/ai_context/-/merge_requests/204) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3586300-clean-up-ccc-cacheability-and-access-metadata | 120 diff lines Description: ## Description Closes #3586300 ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [x] I have performed a self-review of my own code Not applicable: - I have added or updated tests, or explained in the description why this change is not covered by tests - I have updated documentation for any new or changed functionality - I have written testing instructions and verified them locally (see issue for testing approach) - I have noted any required post-merge steps (config imports, c… ### [Issue #3586292: Ignore conditional context when disabled.](https://git.drupalcode.org/project/ai_context/-/merge_requests/194) State: opened | Author: Kristen Pol (kepol) | Branch: 3586207-conditional-subcontext-tweaks | 1376 diff lines Description: ## Description See #3586292+s ## Testing instructions 1. 2. ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, ca… ### [Issue #3586301: Clean up CCC accessible interactive links and external links.](https://git.drupalcode.org/project/ai_context/-/merge_requests/200) State: opened | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: fix/accessible-links-3586301 | 982 diff lines Description: **Description** ## Changes - Replace `Link::toString()` in `#markup` with proper render arrays and `:url` placeholders in `t()` (ai_context.module, AiContextAgentsForm, AiContextAgentForm, AiContextScopeBase). - Add `rel="noopener noreferrer"` to all `target="_blank"` external links (AiContextExtensionsController, AiContextAgentForm, AiContextItemRevisionOverviewForm, Twig overview template). - Add visually-hidden "(opens in new tab)" text to external links for screen readers. - Convert `buildAgentNameMarkup()` to `buildAgentName()` returning a render array. - Simplify `AiContext… --- COMMITS (24h) --- (none) ======================================================================== ## [23] 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-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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 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). ### [Feature: Translation result caching and cross-field deduplication](https://git.drupalcode.org/project/ai_translate/-/work_items/3585529) State: opened | Updated: 2026-07-03 | Author: Christoph Breidert (breidert) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: ## Problem/Motivation `ai_translate` re-sends every field to the LLM on every translation run, with no memory of previous translations. This causes two avoidable costs: 1. **Re-translation of unchanged content.** On a re-translation run (fixing one typo, updating a single field), every unchanged field is sent to the LLM again, even though the output would be identical to the previous run. 2. **Repeated translation of identical strings.** Paragraph-heavy entities and Layout Builder pages often contain the same short string in multiple components (shared CTA labels, navigation titles, standard… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [24] summariseModule:ai_related_content:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Related Content (machine name: ai_related_content) Reporting period: last 24h (2026-07-03T05:00:06+00:00 to 2026-07-04T05:00:06+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: 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 Related Content

                                              then use

                                              ,

                                              ,

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

                                                How can I help on this project?

                                                " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Add gitlab templates](https://git.drupalcode.org/project/ai_related_content/-/work_items/3576576) State: opened | Updated: 2026-07-04 | Author: Scott Euser (scotteuser) | Assigned: Scott Euser (scotteuser) | Labels: category::task, state::accepted Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !20 [#3576576: Gitlab templates](https://git.drupalcode.org/project/ai_related_content/-/merge_requests/20) | State: opened | Author: Scott Euser (scotteuser), 133 diff lines ### [Current node is not always excluded](https://git.drupalcode.org/project/ai_related_content/-/work_items/3547619) State: closed | Updated: 2026-07-03 | Author: drupalbot | Assigned: Scott Euser (scotteuser) | Labels: category::bug, code, priority::normal, state::closed Description: >>> [!note] Migrated issue Reported by: [scott_euser](https://www.drupal.org/user/3267594) Related to !5 >>> Problem/Motivation E.g. via Pinecone, the metadata filter expects strict type match, but current node is returned as a string. Indexing as filterable attribute in Search API indexes as integer. Steps to reproduce View related content Proposed resolution Cast as integer Remaining tasks MR User interface changes N/A API changes N/A Data model changes N/A --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [25] generateTldr:executive ======================================================================== You are an editor distilling a Drupal AI project newsletter into its most important highlights. You are writing for a non-technical executive audience. Focus on business impact, strategic progress, and delivery milestones. Avoid all technical jargon. Read all the module summaries below. Separate the highlights into two categories: - SHIPPED: things that were merged, fixed, released, or completed during this period. - ONGOING: things that are actively in progress, under review, or blocked. Be specific — name the module, what happened, and why it matters. Do not use emoticons or mdashes. Do not include any text outside the two sections. When you mention a specific issue or merge request, add an inline citation using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations immediately after the relevant phrase, before any punctuation. Format as two HTML sections. Use exactly this structure (all
                                              • elements must be inside the
                                                  , never outside it):

                                                  Shipped

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

                                                  Ongoing

                                                  1. Title here — One sentence explanation [2].
                                                  Up to 5 items per section. Do not output any text, tags, or characters outside these two sections. Output only the HTML fragment, no surrounding tags. --- REFERENCE LIST --- [1] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [2] Add event hook to ai_ckeditor to allow context injection (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3581952 [3] Add CountTokensInterface operation type for provider-native token counting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586582 [4] Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586561 [5] AI CKEditor: Hardcoded “summarize” message shown for all plugins when no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3575346 [6] Tools UI overview page does not load (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579979 [7] Plugin shouldn't show any fields if no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3557016 [8] Improve UX in Automators Tool add form (help text and workflow field behavior) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586382 [9] Issue when creating content and click on AI Assistant on Ckeditor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586545 [10] Create an HTML to Markdown API and service (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574246 [11] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586577 [12] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [13] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [14] 3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1469 [15] task: #3586561 Add a setup-guardrails agent skill to configure guardrails,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1724 [16] Recipe: AI Automators comment-spam scoring and auto-unpublish (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3585304 [17] AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model" (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3573445 [18] Issue #3558801: Route the OpenAI chat operation through the Responses API... (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/78 [19] fix tool bug (mcp_client, MR) — https://git.drupalcode.org/project/mcp_client/-/merge_requests/20 [20] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586044 [21] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [22] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [23] Make it possible to restrict the order of tools during agent executions (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3560681 [24] fix: #3586044 Apply forced tool argument values at execution time (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/292 [25] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [26] Issue #3537123 by jurgenhaas: Exceptions in tool execute break the UI for the user (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/163 [27] MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization (same as #3568588) (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582939 [28] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [29] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [30] Prevent translation before page is published in source language (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591768 [31] `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3575644 [32] [CI] Playwright Report job skipped when Playwright test fails (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591332 [33] Rudimentary conflict resolution UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591601 [34] DX: `php (lint)` CI job runs against 11.2, fails on 11.3/11.4 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591767 [35] Test Canvas on Drupal 11.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3561392 [36] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [37] Adopt `AtLeastOneOf` validation constraint for cardinality validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3526703 [38] Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591736 [39] `PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591766 [40] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [41] Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped() (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591763 [42] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [43] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [44] Draft: chore(Data model): #3591727 Store each prop's translatability per component version so deleting an optional prop keeps config-defined component trees valid (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1300 [45] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [46] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [47] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [48] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [49] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [50] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [51] #3591764: Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [52] feat(Conflict detection): #3591601 "Conflict resolution via API call and layout endpoint support for published entities" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1194 [53] Issue #3591332: [CI] Playwright Report job skipped when Playwright test fails (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1146 [54] Decouple component_tree translation logic from TMGMT (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1320 [55] #3591738 add translation data to code component provider (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1301 [56] Issue #3575644: `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [57] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [58] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [59] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [60] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [61] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [62] Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586280 [63] [Discuss] Context scope subscription approach (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586320 [64] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [65] Beta vs 1.1 CCC API gap analysis (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586318 [66] Move from agent-specific to generic context consumer API (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586319 [67] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [68] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [69] Usage record page renders context item content without an entity access check (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586311 [70] Clean up CCC form and table accessibility cleanup (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586304 [71] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [72] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [73] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [74] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [75] Selector loads the entire catalog when an agent has no scope subscriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586315 [76] Issue #3586305: Fix context prefix default alignment and stale getManageUrl docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/202 [77] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [78] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [79] Issue #3586276: Rename entity bundle and target entity scope plugins for better DX (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/195 [80] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [81] Issue #3586292: Ignore conditional context when disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/194 [82] Issue #3586311: Gate context item render on access('view') in usage record page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/208 [83] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [84] Issue #3586303: Announce filtered row counts to screen readers in JS filter behaviors. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/206 [85] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [86] Issue #3586315: Avoid full catalog scan when agent has no scope subscriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/210 [87] Feature: Translation result caching and cross-field deduplication (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585529 [88] Add gitlab templates (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3576576 [89] Current node is not always excluded (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3547619 [90] #3576576: Gitlab templates (ai_related_content, MR) — https://git.drupalcode.org/project/ai_related_content/-/merge_requests/20 --- MODULE SUMMARIES ---

                                                  AI (Artificial Intelligence)

                                                  Activity this period centered on expanding the module's architecture to connect its AI-powered editor tools with broader site context, fixing language-handling defects, and improving configuration workflows.

                                                  A solution is under review for AI CKEditor Summarize generates summaries in a different language than the selected text, where the summarization feature was producing output in unintended languages rather than preserving the original. A fix has been proposed that adjusts how the prompt is constructed.

                                                  Work advanced on Add event hook to ai_ckeditor to allow context injection, which will enable AI editor actions to draw on entity-specific information—such as content type or bundle—when generating suggestions. This integration addresses a gap that has prevented the editor from incorporating site-specific writing guidelines or tone rules available elsewhere in the system.

                                                  A new capability is in development through Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails. This will allow automated or assisted configuration of content safety and policy rules, reducing manual setup for site operators.

                                                  Several usability and stability issues remain open, including an error when clicking AI Assistant in CKEditor during content creation and a configuration bug where forced parameter values are not injected at tool execution time (now closed).

                                                  How can I help on this project?

                                                  Consider prioritizing user testing resources for the CKEditor integration to validate language-handling and error-handling fixes before the next release. If automated guardrail configuration is strategic, allocate time for stakeholder alignment on policy defaults and workflow requirements.

                                                  Contributors: Alphons Jaimon (AJV009), Ann Mary Sruthy (annmarysruthy), Ricardo Castañeda (cadence96) ---

                                                  Drupal AI Initiative

                                                  Activity this period was limited to planning work. A new feature proposal was opened for a Recipe: AI Automators comment-spam scoring and auto-unpublish, which aims to provide a ready-to-use configuration that automatically scores comments for spam and unpublishes those likely to be problematic. This would reduce the implementation barrier for site owners wanting to use AI-powered moderation, turning what is currently a manual setup process into a packaged solution. The work is assigned and in the planning stage. No code was merged or committed during this period.

                                                  How can I help on this project?

                                                  • Prioritize resourcing for the comment spam recipe feature to accelerate delivery of a practical use case that demonstrates value to site owners.
                                                  • Connect the team with community stakeholders or pilot sites willing to test AI moderation workflows in production environments.
                                                  ---

                                                  AI Integration - ECA

                                                  No development activity was recorded during this period. A new support request was opened regarding an AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model". Users are encountering errors when attempting to customize model behavior through the configuration interface, which may limit their ability to tailor AI responses to specific business needs. The issue has been accepted and is awaiting investigation.

                                                  This module enables workflow automation with AI capabilities, allowing organizations to integrate intelligent processing into their content and business logic flows without custom development.

                                                  How can I help on this project?

                                                  • Consider allocating developer time to diagnose and resolve the configuration issue, as it currently blocks users from customizing AI behavior for their use cases.
                                                  • Evaluate whether this integration aligns with strategic automation priorities and whether additional resourcing would accelerate delivery of stable features.
                                                  ---

                                                  OpenAI Provider

                                                  Work is underway to migrate the module's chat functionality to OpenAI's newer Responses API, ahead of the eventual deprecation of the older Chat Completions interface. The Route the OpenAI chat operation through the Responses API merge request was opened this period. This work ensures the module will continue to function reliably as OpenAI phases out legacy interfaces, reducing the risk of future service disruption. The refactoring maintains compatibility with other providers while adopting OpenAI's recommended approach, positioning the module for long-term maintainability.

                                                  The work is currently in review and represents proactive technical debt management rather than a user-facing feature.

                                                  How can I help on this project?

                                                  • Prioritize review and testing resources to accelerate the API migration merge request, reducing exposure to future deprecation.
                                                  • Confirm roadmap alignment: whether maintaining parity with OpenAI's evolving platform remains a strategic priority for the organization.

                                                  Contributors: Ahmad Khalil (ahmad-khalil-imagex)

                                                  ---

                                                  MCP Client

                                                  A merge request to fix tool bug was opened during the reporting period. This work addresses a defect in the module's tool functionality that was impacting proper operation. The fix is currently under review and has not yet been merged into the codebase.

                                                  No other development activity or issue updates occurred during this 24-hour window. The module continues its early-stage development with steady progress on core functionality improvements.

                                                  How can I help on this project?

                                                  • Ensure the team has sufficient reviewer capacity to evaluate and merge pending fixes in a timely manner.
                                                  • Confirm the project roadmap and priorities are clearly defined to guide where effort should be focused next.

                                                  Contributors: Christian Fritsch (chr.fritsch)

                                                  ---

                                                  AI Agents

                                                  The AI Agents module saw focused progress on reliability and control features over the past 24 hours. A significant bug affecting forced parameter values in tools was resolved and merged, addressing a validation error that prevented AI search assistants from functioning when certain configuration options were enabled together. This fix restores the ability to pre-configure tool parameters while keeping them hidden from users.

                                                  Several feature requests are advancing to give administrators more control over agent behavior. Work continues on tool execution ordering constraints, which will prevent agents from running tools in illogical sequences. Two other features remain open: the ability to limit how many times a tool can run to prevent infinite loops, and support for role-based tool execution to enable autonomous agents that don't require active user sessions. Additionally, work is underway to improve error handling when tools fail, ensuring users receive clearer feedback rather than encountering broken interfaces.

                                                  These developments strengthen the module's enterprise readiness by adding guardrails that prevent runaway agent behavior and improve the user experience when problems occur.

                                                  How can I help on this project?

                                                  • Prioritize testing and feedback on the execution ordering feature currently under review, as it addresses agent reliability concerns.
                                                  • Clarify business requirements for autonomous agent use cases to guide the role-based execution work.

                                                  Contributors: AKHIL BABU (AkhilBabu) [1], Joshua Fernandes (joshua1234511), Jürgen Haas (jurgenhaas)

                                                  ---

                                                  Tool API

                                                  No development activity was recorded during this period. However, a serialization compatibility issue affecting REST API integrations was confirmed as ready for commit. The MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization issue has reached "ready to be committed" status. This issue prevents REST endpoints from correctly serializing content when the Tool module is enabled, which could block production deployments for organizations relying on REST-based integrations or headless architectures.

                                                  The module remains in beta, and this type of integration issue is typical at this stage. Resolution of this issue will improve compatibility with standard Drupal patterns and reduce friction for teams building API-driven applications.

                                                  How can I help on this project?

                                                  • Prioritize maintainer review and commit of the ready-to-commit REST serialization fix to unblock teams dependent on API functionality.
                                                  • Ensure adequate testing resources are available to validate the fix across different REST configuration scenarios before stable release.
                                                  ---

                                                  Drupal Canvas

                                                  Over the past 24 hours, four important fixes were merged to improve reliability and developer experience. A performance issue that caused failures when validating long text entries has been resolved, preventing "JIT stack limit reached" errors on pages with substantial content. The testing workflow was improved so that diagnostic reports are now generated even when automated tests fail, making it easier to troubleshoot problems. An access control bug that incorrectly blocked users from publishing certain auto-saved changes has been fixed. Additionally, a data accuracy issue affecting AI-assisted page building has been corrected, ensuring that required component properties are properly flagged in the AI context.

                                                  Work continues on several strategic fronts. Progress is being made on conflict resolution capabilities, allowing editors to choose between competing changes when multiple people edit the same content. Effort is underway to ensure compatibility with Drupal 11.4, which was released this week, and to drop support for the now-unsecured 11.2 version. A new feature is in development to help code component developers more easily select which content fields should populate component properties, filtering out internal metadata that should not be exposed. Translation capabilities are also being enhanced, with work to decouple core translation logic from a specific third-party module and to add translation support for code components.

                                                  How can I help on this project?

                                                  • Prioritize completion of the Drupal 11.4 compatibility update to ensure the project remains secure and supported.
                                                  • Allocate design or product resources to finalize the conflict resolution user experience, as technical work is underway but user-facing design may need validation.

                                                  Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Lauri Timmanee (lauriii), Matt Glaman (mglaman) [1], Prabhavathi Vanipenta (prabha1997) [1], Ravi Maniyar (ravi.maniyar.123), Sally Young (justafish) [1], Wim Leers (wimleers)

                                                  ---

                                                  Context Control Center (CCC)

                                                  Over the past 24 hours, the project focused on closing API and quality gaps identified in the recent code review, preparing the module for a release candidate. Two significant architectural planning issues were closed: a gap analysis that examined what the module needs to support before reaching 1.0, and a security-focused analysis that surfaced access control and performance risks.

                                                  Several improvements are now in review. Usage record page renders context item content without an entity access check addresses a data exposure issue where users could see unpublished content they shouldn't have access to. Selector loads the entire catalog when an agent has no scope subscriptions fixes a performance bottleneck that could cause thousands of unnecessary database queries on every AI request. Both issues have proposed solutions under review.

                                                  Additional quality improvements are in progress across accessibility (better screen reader support and keyboard navigation), documentation accuracy, and test reliability. One issue was closed to ensure future compatibility with Drupal 12's testing requirements.

                                                  The project also opened two strategic planning discussions: one exploring whether to rearchitect how modules request context (moving beyond an agent-specific model), and another examining whether the "subscription" terminology clearly communicates how context is matched and delivered to users.

                                                  How can I help on this project?

                                                  • Prioritize review capacity for the access control and performance fixes currently awaiting code review, as both address risks that could affect production deployments.
                                                  • Commission decision-making time on the two architectural planning discussions to resolve open questions before the API is locked at 1.0.

                                                  Contributors: Joshua Fernandes (joshua1234511), Juan Correa (jucs7), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Tamas Balog (tbalog)

                                                  ---

                                                  AI translate

                                                  The AI translate module enables automated translation of Drupal content using large language models. During this period, a new feature proposal was accepted to introduce Translation result caching and cross-field deduplication. This capability would reduce translation costs by avoiding redundant API calls when content hasn't changed and by reusing translations of identical text that appears in multiple fields.

                                                  Currently, the module resends all content to translation services on every run, even when only minor edits have been made. For organizations translating content frequently or working with complex page layouts containing repeated elements, this generates unnecessary expense. The proposed caching system would make the module more cost-effective for production use, particularly for sites with paragraph-heavy structures or Layout Builder implementations.

                                                  No code changes were merged during this period. The feature remains in planning stage.

                                                  How can I help on this project?

                                                  • Allocate development resources to implement the caching feature, which would deliver measurable cost savings for translation-heavy workflows.
                                                  • Provide input on translation budget priorities to help the team optimize where cost reduction would have greatest business impact.
                                                  ---

                                                  AI Related Content

                                                  The AI Related Content module saw limited activity during this period, with work continuing on project infrastructure and a bug fix being completed.

                                                  A bug affecting content filtering was closed. This issue addressed a situation where the current page could incorrectly appear in its own list of related content recommendations due to a data type mismatch. The fix ensures users see only relevant suggestions, improving the quality of AI-generated content recommendations.

                                                  Work is in progress on adding GitLab templates to standardize how contributions and issues are submitted. This will streamline future development processes and help maintain consistency as the project evolves.

                                                  How can I help on this project?

                                                  Consider establishing user testing with content editors to validate the quality of AI-generated recommendations. If the module is nearing a stable release, planning for documentation and change management resources would help drive adoption across teams.

                                                  Contributors: Scott Euser (scotteuser)

                                                  ======================================================================== ## [26] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 2 Judge flags: 2 ======================================================================== ## [27] generate2026Capabilities ======================================================================== You are an editor writing a strategic section for a non-technical executive audience. The Drupal AI initiative has 8 planned capabilities for 2026. Your task is to read the module activity summaries below and explain how today's progress moves each capability forward — or note where there was no relevant progress today. Be concise and direct. Focus on what matters to a business leader: is progress happening, what is the next milestone, and are there any risks? When you describe progress on a capability, add inline citations using [N] where N is the reference number from the list below. You may cite multiple references per item, e.g. [1][3]. Place citations at the end of the relevant sentence, before the closing punctuation. Output an HTML fragment using exactly this structure:

                                                  2026 Capabilities Progress

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

                                                  and
                                                    tags. --- 2026 CAPABILITIES --- 1. Page generation — Describe what you need and get a usable page, built from your actual design system components 2. Context management — A central place to define brand voice, style guides, audience profiles, and governance rules that AI can use 3. Background agents — AI that works without being prompted, responding to triggers and schedules while respecting editorial workflows 4. Design system integration — AI that builds with your components and can propose new ones when needed 5. Content creation and discovery — Smarter search, AI-powered optimization, and content drafting assistance 6. Advanced governance — Batch approvals, branch-based versioning, and comprehensive audit trails for AI changes 7. Intelligent website improvements — AI that learns from performance data, proposes concrete changes, and gets smarter over time through editorial review 8. Multi-channel campaigns — Create content for websites, social, email, and automation platforms from a single campaign goal --- REFERENCE LIST --- [1] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [2] Add event hook to ai_ckeditor to allow context injection (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3581952 [3] Add CountTokensInterface operation type for provider-native token counting (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586582 [4] Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586561 [5] AI CKEditor: Hardcoded “summarize” message shown for all plugins when no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3575346 [6] Tools UI overview page does not load (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579979 [7] Plugin shouldn't show any fields if no text is selected (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3557016 [8] Improve UX in Automators Tool add form (help text and workflow field behavior) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586382 [9] Issue when creating content and click on AI Assistant on Ckeditor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586545 [10] Create an HTML to Markdown API and service (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574246 [11] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586577 [12] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [13] Issue #3586580: Fix summarize prompt translating text instead of preserving original language (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1738 [14] 3581952 add free-form metadata bag on InputInterface; seed pre/post/streaming... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1469 [15] task: #3586561 Add a setup-guardrails agent skill to configure guardrails,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1724 [16] Recipe: AI Automators comment-spam scoring and auto-unpublish (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3585304 [17] AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model" (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3573445 [18] Issue #3558801: Route the OpenAI chat operation through the Responses API... (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/78 [19] fix tool bug (mcp_client, MR) — https://git.drupalcode.org/project/mcp_client/-/merge_requests/20 [20] force_value + hide_property in tool_usage_limits does not inject value at tool execution time (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586044 [21] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [22] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [23] Make it possible to restrict the order of tools during agent executions (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3560681 [24] fix: #3586044 Apply forced tool argument values at execution time (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/292 [25] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [26] Issue #3537123 by jurgenhaas: Exceptions in tool execute break the UI for the user (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/163 [27] MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization (same as #3568588) (tool, Issue) — https://git.drupalcode.org/project/tool/-/work_items/3582939 [28] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [29] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [30] Prevent translation before page is published in source language (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591768 [31] `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3575644 [32] [CI] Playwright Report job skipped when Playwright test fails (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591332 [33] Rudimentary conflict resolution UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591601 [34] DX: `php (lint)` CI job runs against 11.2, fails on 11.3/11.4 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591767 [35] Test Canvas on Drupal 11.3 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3561392 [36] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [37] Adopt `AtLeastOneOf` validation constraint for cardinality validation (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3526703 [38] Access check when publishing auto-save items was incorrectly returning a 409 when attempting to publish auto-saves not returned by `GET` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591736 [39] `PageRegion::createFromBlockLayout()` fatals with an `assert()` failure for any block carrying a `context_mapping` setting (e.g. Views blocks with a contextual filter) (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591766 [40] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [41] Publishing a page without a URL alias fails with 500: AssertionError in PageHooks::ensurePathautoSkipped() (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591763 [42] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [43] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [44] Draft: chore(Data model): #3591727 Store each prop's translatability per component version so deleting an optional prop keeps config-defined component trees valid (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1300 [45] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [46] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [47] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [48] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [49] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [50] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [51] #3591764: Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [52] feat(Conflict detection): #3591601 "Conflict resolution via API call and layout endpoint support for published entities" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1194 [53] Issue #3591332: [CI] Playwright Report job skipped when Playwright test fails (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1146 [54] Decouple component_tree translation logic from TMGMT (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1320 [55] #3591738 add translation data to code component provider (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1301 [56] Issue #3575644: `Regex` constraint on `string_long` field type intended to convey semantics causes "JIT stack limit reached" on long strings; make this pattern a no-op since it allows _anything_ (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [57] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [58] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [59] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [60] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [61] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [62] Add #[RunTestsInSeparateProcesses] attribute to all kernel test classes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586280 [63] [Discuss] Context scope subscription approach (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586320 [64] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [65] Beta vs 1.1 CCC API gap analysis (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586318 [66] Move from agent-specific to generic context consumer API (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586319 [67] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [68] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [69] Usage record page renders context item content without an entity access check (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586311 [70] Clean up CCC form and table accessibility cleanup (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586304 [71] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [72] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [73] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [74] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [75] Selector loads the entire catalog when an agent has no scope subscriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586315 [76] Issue #3586305: Fix context prefix default alignment and stale getManageUrl docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/202 [77] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [78] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [79] Issue #3586276: Rename entity bundle and target entity scope plugins for better DX (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/195 [80] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [81] Issue #3586292: Ignore conditional context when disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/194 [82] Issue #3586311: Gate context item render on access('view') in usage record page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/208 [83] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [84] Issue #3586303: Announce filtered row counts to screen readers in JS filter behaviors. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/206 [85] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [86] Issue #3586315: Avoid full catalog scan when agent has no scope subscriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/210 [87] Feature: Translation result caching and cross-field deduplication (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585529 [88] Add gitlab templates (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3576576 [89] Current node is not always excluded (ai_related_content, Issue) — https://git.drupalcode.org/project/ai_related_content/-/work_items/3547619 [90] #3576576: Gitlab templates (ai_related_content, MR) — https://git.drupalcode.org/project/ai_related_content/-/merge_requests/20 --- TODAY'S MODULE SUMMARIES ---

                                                    AI (Artificial Intelligence)

                                                    Activity this period centered on expanding the module's architecture to connect its AI-powered editor tools with broader site context, fixing language-handling defects, and improving configuration workflows.

                                                    A solution is under review for AI CKEditor Summarize generates summaries in a different language than the selected text, where the summarization feature was producing output in unintended languages rather than preserving the original. A fix has been proposed that adjusts how the prompt is constructed.

                                                    Work advanced on Add event hook to ai_ckeditor to allow context injection, which will enable AI editor actions to draw on entity-specific information—such as content type or bundle—when generating suggestions. This integration addresses a gap that has prevented the editor from incorporating site-specific writing guidelines or tone rules available elsewhere in the system.

                                                    A new capability is in development through Add a setup-guardrails agent skill to configure guardrails, guardrail sets, and global guardrails. This will allow automated or assisted configuration of content safety and policy rules, reducing manual setup for site operators.

                                                    Several usability and stability issues remain open, including an error when clicking AI Assistant in CKEditor during content creation and a configuration bug where forced parameter values are not injected at tool execution time (now closed).

                                                    How can I help on this project?

                                                    Consider prioritizing user testing resources for the CKEditor integration to validate language-handling and error-handling fixes before the next release. If automated guardrail configuration is strategic, allocate time for stakeholder alignment on policy defaults and workflow requirements.

                                                    Contributors: Alphons Jaimon (AJV009), Ann Mary Sruthy (annmarysruthy), Ricardo Castañeda (cadence96) ---

                                                    Drupal AI Initiative

                                                    Activity this period was limited to planning work. A new feature proposal was opened for a Recipe: AI Automators comment-spam scoring and auto-unpublish, which aims to provide a ready-to-use configuration that automatically scores comments for spam and unpublishes those likely to be problematic. This would reduce the implementation barrier for site owners wanting to use AI-powered moderation, turning what is currently a manual setup process into a packaged solution. The work is assigned and in the planning stage. No code was merged or committed during this period.

                                                    How can I help on this project?

                                                    • Prioritize resourcing for the comment spam recipe feature to accelerate delivery of a practical use case that demonstrates value to site owners.
                                                    • Connect the team with community stakeholders or pilot sites willing to test AI moderation workflows in production environments.
                                                    ---

                                                    AI Integration - ECA

                                                    No development activity was recorded during this period. A new support request was opened regarding an AI Chat action fails with "Unknown parameter: 'system_name'" when using "Specific configuration for the model". Users are encountering errors when attempting to customize model behavior through the configuration interface, which may limit their ability to tailor AI responses to specific business needs. The issue has been accepted and is awaiting investigation.

                                                    This module enables workflow automation with AI capabilities, allowing organizations to integrate intelligent processing into their content and business logic flows without custom development.

                                                    How can I help on this project?

                                                    • Consider allocating developer time to diagnose and resolve the configuration issue, as it currently blocks users from customizing AI behavior for their use cases.
                                                    • Evaluate whether this integration aligns with strategic automation priorities and whether additional resourcing would accelerate delivery of stable features.
                                                    ---

                                                    OpenAI Provider

                                                    Work is underway to migrate the module's chat functionality to OpenAI's newer Responses API, ahead of the eventual deprecation of the older Chat Completions interface. The Route the OpenAI chat operation through the Responses API merge request was opened this period. This work ensures the module will continue to function reliably as OpenAI phases out legacy interfaces, reducing the risk of future service disruption. The refactoring maintains compatibility with other providers while adopting OpenAI's recommended approach, positioning the module for long-term maintainability.

                                                    The work is currently in review and represents proactive technical debt management rather than a user-facing feature.

                                                    How can I help on this project?

                                                    • Prioritize review and testing resources to accelerate the API migration merge request, reducing exposure to future deprecation.
                                                    • Confirm roadmap alignment: whether maintaining parity with OpenAI's evolving platform remains a strategic priority for the organization.

                                                    Contributors: Ahmad Khalil (ahmad-khalil-imagex)

                                                    ---

                                                    MCP Client

                                                    A merge request to fix tool bug was opened during the reporting period. This work addresses a defect in the module's tool functionality that was impacting proper operation. The fix is currently under review and has not yet been merged into the codebase.

                                                    No other development activity or issue updates occurred during this 24-hour window. The module continues its early-stage development with steady progress on core functionality improvements.

                                                    How can I help on this project?

                                                    • Ensure the team has sufficient reviewer capacity to evaluate and merge pending fixes in a timely manner.
                                                    • Confirm the project roadmap and priorities are clearly defined to guide where effort should be focused next.

                                                    Contributors: Christian Fritsch (chr.fritsch)

                                                    ---

                                                    AI Agents

                                                    The AI Agents module saw focused progress on reliability and control features over the past 24 hours. A significant bug affecting forced parameter values in tools was resolved and merged, addressing a validation error that prevented AI search assistants from functioning when certain configuration options were enabled together. This fix restores the ability to pre-configure tool parameters while keeping them hidden from users.

                                                    Several feature requests are advancing to give administrators more control over agent behavior. Work continues on tool execution ordering constraints, which will prevent agents from running tools in illogical sequences. Two other features remain open: the ability to limit how many times a tool can run to prevent infinite loops, and support for role-based tool execution to enable autonomous agents that don't require active user sessions. Additionally, work is underway to improve error handling when tools fail, ensuring users receive clearer feedback rather than encountering broken interfaces.

                                                    These developments strengthen the module's enterprise readiness by adding guardrails that prevent runaway agent behavior and improve the user experience when problems occur.

                                                    How can I help on this project?

                                                    • Prioritize testing and feedback on the execution ordering feature currently under review, as it addresses agent reliability concerns.
                                                    • Clarify business requirements for autonomous agent use cases to guide the role-based execution work.

                                                    Contributors: AKHIL BABU (AkhilBabu) [1], Joshua Fernandes (joshua1234511), Jürgen Haas (jurgenhaas)

                                                    ---

                                                    Tool API

                                                    No development activity was recorded during this period. However, a serialization compatibility issue affecting REST API integrations was confirmed as ready for commit. The MapDefinitionNormalizer and ContextDefinitionNormalizer break REST serialization issue has reached "ready to be committed" status. This issue prevents REST endpoints from correctly serializing content when the Tool module is enabled, which could block production deployments for organizations relying on REST-based integrations or headless architectures.

                                                    The module remains in beta, and this type of integration issue is typical at this stage. Resolution of this issue will improve compatibility with standard Drupal patterns and reduce friction for teams building API-driven applications.

                                                    How can I help on this project?

                                                    • Prioritize maintainer review and commit of the ready-to-commit REST serialization fix to unblock teams dependent on API functionality.
                                                    • Ensure adequate testing resources are available to validate the fix across different REST configuration scenarios before stable release.
                                                    ---

                                                    Drupal Canvas

                                                    Over the past 24 hours, four important fixes were merged to improve reliability and developer experience. A performance issue that caused failures when validating long text entries has been resolved, preventing "JIT stack limit reached" errors on pages with substantial content. The testing workflow was improved so that diagnostic reports are now generated even when automated tests fail, making it easier to troubleshoot problems. An access control bug that incorrectly blocked users from publishing certain auto-saved changes has been fixed. Additionally, a data accuracy issue affecting AI-assisted page building has been corrected, ensuring that required component properties are properly flagged in the AI context.

                                                    Work continues on several strategic fronts. Progress is being made on conflict resolution capabilities, allowing editors to choose between competing changes when multiple people edit the same content. Effort is underway to ensure compatibility with Drupal 11.4, which was released this week, and to drop support for the now-unsecured 11.2 version. A new feature is in development to help code component developers more easily select which content fields should populate component properties, filtering out internal metadata that should not be exposed. Translation capabilities are also being enhanced, with work to decouple core translation logic from a specific third-party module and to add translation support for code components.

                                                    How can I help on this project?

                                                    • Prioritize completion of the Drupal 11.4 compatibility update to ensure the project remains secure and supported.
                                                    • Allocate design or product resources to finalize the conflict resolution user experience, as technical work is underway but user-facing design may need validation.

                                                    Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Lauri Timmanee (lauriii), Matt Glaman (mglaman) [1], Prabhavathi Vanipenta (prabha1997) [1], Ravi Maniyar (ravi.maniyar.123), Sally Young (justafish) [1], Wim Leers (wimleers)

                                                    ---

                                                    Context Control Center (CCC)

                                                    Over the past 24 hours, the project focused on closing API and quality gaps identified in the recent code review, preparing the module for a release candidate. Two significant architectural planning issues were closed: a gap analysis that examined what the module needs to support before reaching 1.0, and a security-focused analysis that surfaced access control and performance risks.

                                                    Several improvements are now in review. Usage record page renders context item content without an entity access check addresses a data exposure issue where users could see unpublished content they shouldn't have access to. Selector loads the entire catalog when an agent has no scope subscriptions fixes a performance bottleneck that could cause thousands of unnecessary database queries on every AI request. Both issues have proposed solutions under review.

                                                    Additional quality improvements are in progress across accessibility (better screen reader support and keyboard navigation), documentation accuracy, and test reliability. One issue was closed to ensure future compatibility with Drupal 12's testing requirements.

                                                    The project also opened two strategic planning discussions: one exploring whether to rearchitect how modules request context (moving beyond an agent-specific model), and another examining whether the "subscription" terminology clearly communicates how context is matched and delivered to users.

                                                    How can I help on this project?

                                                    • Prioritize review capacity for the access control and performance fixes currently awaiting code review, as both address risks that could affect production deployments.
                                                    • Commission decision-making time on the two architectural planning discussions to resolve open questions before the API is locked at 1.0.

                                                    Contributors: Joshua Fernandes (joshua1234511), Juan Correa (jucs7), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia), Tamas Balog (tbalog)

                                                    ---

                                                    AI translate

                                                    The AI translate module enables automated translation of Drupal content using large language models. During this period, a new feature proposal was accepted to introduce Translation result caching and cross-field deduplication. This capability would reduce translation costs by avoiding redundant API calls when content hasn't changed and by reusing translations of identical text that appears in multiple fields.

                                                    Currently, the module resends all content to translation services on every run, even when only minor edits have been made. For organizations translating content frequently or working with complex page layouts containing repeated elements, this generates unnecessary expense. The proposed caching system would make the module more cost-effective for production use, particularly for sites with paragraph-heavy structures or Layout Builder implementations.

                                                    No code changes were merged during this period. The feature remains in planning stage.

                                                    How can I help on this project?

                                                    • Allocate development resources to implement the caching feature, which would deliver measurable cost savings for translation-heavy workflows.
                                                    • Provide input on translation budget priorities to help the team optimize where cost reduction would have greatest business impact.
                                                    ---

                                                    AI Related Content

                                                    The AI Related Content module saw limited activity during this period, with work continuing on project infrastructure and a bug fix being completed.

                                                    A bug affecting content filtering was closed. This issue addressed a situation where the current page could incorrectly appear in its own list of related content recommendations due to a data type mismatch. The fix ensures users see only relevant suggestions, improving the quality of AI-generated content recommendations.

                                                    Work is in progress on adding GitLab templates to standardize how contributions and issues are submitted. This will streamline future development processes and help maintain consistency as the project evolves.

                                                    How can I help on this project?

                                                    Consider establishing user testing with content editors to validate the quality of AI-generated recommendations. If the module is nearing a stable release, planning for documentation and change management resources would help drive adoption across teams.

                                                    Contributors: Scott Euser (scotteuser)

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