# Prompt log — 24h 2026-07-02 ======================================================================== ## [1] summariseModule:ai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Abhinav Jha (ajabhinavjha30), Abhisek Mazumdar (abhisekmazumdar), Ahmad Khader (Ahmad-Khader), Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB), Marcus Johansson (Marcus_Johansson)". 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). ### [Preserve HTML in streamed output](https://git.drupalcode.org/project/ai/-/work_items/3586558) State: opened | Updated: 2026-07-02 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::bug, priority::normal Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1734 [Resolve #3586558 "Preserve HTML in streamed output"](https://git.drupalcode.org/project/ai/-/merge_requests/1734) | State: opened | Author: Ahmad Khader (Ahmad-Khader), 433 diff lines Description: ## Summary As reported in https://git.drupalcode.org/project/ai_translate/-/work_items/3585526, there seems to be an issue with HTML processing in streamed outputs. I wasn't able to look into the issue much closer, but the proposed fix seems to imply changes to the AI core module. ## Environment - Drupal version: 11.3.10 - Paragraphs: 8.x-1.20 Original Issue When translating basic pages, the LLM inserts \ tags after other tags like \ Example input: ``` 'De Geheimen van het Hof' is een reeks van zes speurtochten voor klassen: van het 1ste leerjaar tot en met het 6de leerjaar. De focus lig… ### [Drupal Eval Commons umbrella](https://git.drupalcode.org/project/ai/-/work_items/3586445) State: opened | Updated: 2026-07-02 | Author: George Kastanis (zorz) | Assigned: unassigned | Labels: category::plan, priority::normal, state::rtbc Description: ## TL;DR Four Drupal AI projects (`drupal/ai`, `ai_eval`, `ai_agents_test`, `ai_best_practices`) are each working on pieces of the same puzzle: how to write, run, and share evals for AI features. Today there is no shared format for eval cases or results, so the same work risks being redone in incompatible ways. This umbrella suggests splitting the problem into five layers and agreeing on the lowest layer first, so the other layers can move in parallel without one blocking the rest. Nothing in your current module has to change today; the proposal is additive, and a module adopts each layer whe… ### [RestrictToTopic guardrail: add semantic topic matching mode](https://git.drupalcode.org/project/ai/-/work_items/3584977) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Needs manual testing, aiCoreModule 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: Add a semantic matching mode to the RestrictToTopic guardrail so LLM-identified topics are matched against the configured list by meaning rather than exact string equality. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The restrict_to_topic guardrail in src/Plugin/AiGuardrail/RestrictToTopic.php asks an LLM which of the configured topics are present in the input text, then uses an exact-string in_… ### [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-02 | Author: Ricardo Castañeda (cadence96) | Assigned: Ricardo Castañeda (cadence96) | Labels: category::bug, priority::normal, state::accepted 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… ### [Create plugins for interacting with multimedia in AI](https://git.drupalcode.org/project/ai/-/work_items/3463843) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar), Alphons Jaimon (AJV009) | 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 … ### [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-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, aiCoreModule, category::task 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… ### [Add an AI reranking processor for Search API (owned by the AI module)](https://git.drupalcode.org/project/ai/-/work_items/3586543) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCoreModule, category::feature Description: ### Problem/Motivation Reranking improves the precision of semantic search by re-ordering an initial result set with a dedicated rerank model (or a general-purpose LLM). AI Core already added a `rerank` operation type in [#3488114](https://www.drupal.org/project/ai/issues/3488114) (now closed), but nothing in the ecosystem consumes it yet. [#3557901 — Add Reranking Support to AI Search](https://git.drupalcode.org/project/ai_search/-/work_items/3557901) proposed adding reranking directly to AI Search. On reflection it makes more sense for the **AI module itself to own this**: reranking is a g… ### [ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models](https://git.drupalcode.org/project/ai/-/work_items/3586425) State: opened | Updated: 2026-07-02 | Author: josecarlosmedero | 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 !1584 [Issue #3586425: Resolve "ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models"](https://git.drupalcode.org/project/ai/-/merge_requests/1584) | State: opened | Author: Marcus Johansson (Marcus_Johansson), 34 diff lines Description: **Problem / Motivation** `AiRequest.php` calls `setStreamedOutput(TRUE)` for all providers. The PHP client `gemini-api-php` sends a malformed request body when calling `streamGenerateContent` against Gemini 2.x models, resulting in `400 Bad Request`. The non-streaming endpoint `generateContent` works correctly with the same payload. The error in logs: `Error invoking model response: Client error: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent resulted in a 400 Bad Request response` Confirmed: the identical payload sent to `generateConten… ### [Standardize thread/caller correlation on AI OTel spans (map tags to gen_ai.conversation.id)](https://git.drupalcode.org/project/ai/-/work_items/3586581) State: opened | Updated: 2026-07-02 | Author: George Kastanis (zorz) | Assigned: unassigned | Labels: automation::error Description: ## Problem Since project/ai_agents#3574487 landed, everything needed to reconstruct the full trail of a conversation (user, agent, and sub-agent calls) is present on the provider events. But the only way a consumer can get at it is by parsing magic prefixes out of the free-form `tags` string array on the span: | tag prefix | stamped by | meaning | |---|---|---| | `ai_assistant_thread_*` | `ai_assistant_api` (`AiAssistantApiRunner`) | assistant conversation, shared across turns | | `ai_agents_runner_*` | `ai_agents` (`AgentHelper`) | this agent run | | `ai_agents_caller_runner_*` | `ai_agents… ### [Guardrail plugins only evaluate the last message](https://git.drupalcode.org/project/ai/-/work_items/3579088) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, Needs manual testing Description: >>> [!note] Migrated issue Reported by: [abhisekmazumdar](https://www.drupal.org/user/3557964) Related to !1467 >>> [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 Both RegexpGuardrail and RestrictToTopic only inspect the last message in a conversation. The full chat history is passed in via ChatInput, but both plugins call end($messages) and evaluate that single message only. In a mult… ### [Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names](https://git.drupalcode.org/project/ai/-/work_items/3586542) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiAutomators, category::task, priority::normal, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1737 [Issue #3586542: Fix documentation staleness — automator-type ID drift,...](https://git.drupalcode.org/project/ai/-/merge_requests/1737) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 340 diff lines Description: ## Description A staleness audit of the module documentation under `docs/` (all pages untouched for 6+ months) found a number of pages that have drifted from the current code. Each finding below was verified against source — not just flagged by commit date — so these are confirmed mismatches, not merely old pages. The bulk of the breakage is **filename/ID drift** in the `ai_automators` automator-type pages: the doc filename no longer matches the plugin's `#[AiAutomatorType(id: ...)]`, usually because the code gained a `_field` / `_long` suffix, an id rename, or a typo. No automator plugins w… ### [Add rich-text image description support to AI Automators](https://git.drupalcode.org/project/ai/-/work_items/3586478) State: opened | Updated: 2026-07-02 | Author: Levente Besenyei (LeventeB) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, category::feature Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1628 [Issue #3586478: "Add rich-text image description support to AI Automators"](https://git.drupalcode.org/project/ai/-/merge_requests/1628) | State: opened | Author: Levente Besenyei (LeventeB), 2630 diff lines Description: ## Summary Add optional rich-text image description support to AI Automators for AI-based formatted text fields, including metadata storage for generated image descriptions. Related/source issue: https://git.drupalcode.org/project/ai_initiative/-/work_items/3585695 ## Problem AI Automators can use formatted text as input, but images embedded in that text are currently ignored unless they are already available through a separate image/media field. This makes automations less accurate for content that depends on visual context (for example: summaries, quality checks, and editorial pre-screen… ### ["AI Guardrails" or "AI Moderation Guardrails"?](https://git.drupalcode.org/project/ai/-/work_items/3586471) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::minor, state::needsReview Description: What it the proper name for this functionality? In the AI menu, it is listed as "AI Moderation Guardrails", but on configuration pages, it is just "AI Guardrails" - it should be consistent, IMHO. Also - and this is probably a separate issue - but why do all the AI menu items use title case (first letter of each word capitalized) while the rest of Drupal is pretty much standardized on sentence case (only the first letter of the first word is capitalized)? See https://www.drupal.org/docs/develop/user-interface-standards/interface-text#interface-text-title-link-heading -mike ### [[Sprint5] Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat)](https://git.drupalcode.org/project/ai/-/work_items/3567006) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: harivansh sharma (harivansh) | Labels: AI Initiative Sprint, Has Testing Steps, aiAgent, category::task 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: Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat) Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation In addition to migrating the core abstraction layer and vector database support, we want to evaluate whether Drupal AI Agents (and related chat functionality) can be migrated to Symfony AI Agents. While this is not a hard requirement for switching frameworks, it is … ### [Auto-update default prompt entities on module updates, but only if the site has not customized them](https://git.drupalcode.org/project/ai/-/work_items/3582350) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Prakash (shubham.prakash) | Labels: aiCoreModule, category::feature, priority::minor, state::needsWork Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1447 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Auto-update default prompt entities on module updates, but only if the site has not customized them Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation When the AI module or its submodules ship updated default prompts (e.g. improved wording, new variables, bug fixes in prompt text), existing installations do not receive these updates. The prompt entities are config entities that are on… ### [Create Provider Documentation Page for OpenAI](https://git.drupalcode.org/project/ai/-/work_items/3533040) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation Currently there is no information about providers on https://project.pages.drupalcode.org/ai, except for https://project.pages.drupalcode.org/ai/1.1.x/providers/matris/ This makes it hard to know what to choose, why and how to set it up. We need detailed pages for each provider that we manage, or that is known to the community, so there is one place to look for information about what to use and where to use it. This task is for createing the OpenAI details documentation pag… ### [Show last-modified date on documentation pages (mkdocs-git-revision-date-localized-plugin)](https://git.drupalcode.org/project/ai/-/work_items/3586541) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::minor, state::needsReview Description: ## Problem / Motivation The documentation site ([project.pages.drupalcode.org/ai](https://project.pages.drupalcode.org/ai/)) does not show when each page was last updated. Because the AI module moves quickly, readers have no easy way to judge whether a given page reflects the current state of the code, or whether it may be stale. ## Proposed resolution Add the [`mkdocs-git-revision-date-localized-plugin`](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) so that every documentation page displays a "last updated" date derived from the file's git history. The Material for… ### [Rename Guardrails "RegExp guardrail" plugin to just "RegEx"](https://git.drupalcode.org/project/ai/-/work_items/3586475) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::minor, state::needsReview Description: As of 1.4.0, the three guardrail plugins are: 1. Restrict to Topic 2. RegExp guardrail 3. Input Length Limit I think "RegExp guardrail" should be changed to just "RegEx" because: 1. "RegEx" is much more commonly used than "RegExp". 2. If we're going to use "guardrail" in the label, then we should use it in all of the plugins. But, I don't think it is necessary to do that, so let's just keep things consistent and remove it. -mike ### [Allow for manual override for new models from provider APIs in AI module settings](https://git.drupalcode.org/project/ai/-/work_items/3540491) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: aiCoreModule, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [andywaldrop](https://www.drupal.org/user/2488592) Related to !1526 >>> Problem/Motivation Currently in the AI module suite of settings, there are many picklist or select box dropdowns that allow you to select a model from a prebuilt list of options. These lists are very helpful for a non-technical user to select a specific model from the LLM provider module that a user has enabled and the operator function (text-to-speech, embeddings, chat, etc.) The challenge that can arise is that when a provider releases a new model the Drupal user has to wait f… ### [To save resources make it easy to reuse requests in manual testing](https://git.drupalcode.org/project/ai/-/work_items/3554853) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Ted Bowman (tedbow) | Labels: aiTest, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [tedbow](https://www.drupal.org/user/240860) Related to !979 >>> Problem/Motivation This comes from testing and development of Canvas AI but also should apply to other uses If I am testing/developing Canvas AI I may be working with a file like /canvas/ui/src/components/aiExtension/AiWizard.tsx where I am editing Javascript and that will invoke remote AI call is not super important, expect that it should use reasonable results. I might enter the prompt, "create a hello world code component" many many times. Every time I do this request it makes a re… ### [Adopt symfony/ai component v0.8 as platform provider](https://git.drupalcode.org/project/ai/-/work_items/3586427) State: opened | Updated: 2026-07-02 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview, v2.x-dev Description: [#3574187] introduced symfony/ai component in v0.6. Meanwhile 0.8 has been released, introducing its own provider abstraction: a symfony [ProviderInterface](https://github.com/symfony/ai/pull/1923). Based upon @mxr576's [plan](https://git.drupalcode.org/project/ai/-/work_items/3574187#note_809810), we want to adopt the new abstraction in this issue. Overview over the concepts, citing the Symfony PR: > **ProviderInterface** encapsulates what PlatformFactory::create() currently produces — a complete, self-contained connection to a single inference backend (model clients, result converters, c… ### [PHP/JS Function to Engage the Chat with a prompt](https://git.drupalcode.org/project/ai/-/work_items/3534530) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Anjali Prasannan (AnjaliPrasannan) | Labels: aiChatbot, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [robloach](https://www.drupal.org/user/61114) Related to !725 >>> Problem/Motivation There are times when you'd want the chat to engage automatically, with a given prompt for the user. As an example: a user clicks a button, and Drupal provides a prompt that is sent to the Chat Window, and sent automatically so that the user can continue conversationally. While this is a feature in Deepchat, on the Drupal-side we don't have an easy way to leverage it. Proposed resolution Add a Drupal/PHP API that could send a prompt over to the initial Deepchat setti… ### [Graceful error handling when an AI Provider is not setup correctly](https://git.drupalcode.org/project/ai/-/work_items/3549312) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !923 >>> Problem/Motivation On the search server setup page, the whole page goes WSOD if one of the providers is not setup correctly and doesn't handle errors correctly. An example of this is the Gemini provider, when no key is setup. We should not make it impossible to save any other type of Search API server, just because one provider is not setup correctly. Steps to reproduce (required for bugs, but not feature requests) Install the Gemini Provider. Install the Search API and Sear… ### [Truncate long input and output body in AI logs](https://git.drupalcode.org/project/ai/-/work_items/3556125) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shivam Sen (shivamsen_12579) | Labels: aiObservability, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [murz](https://www.drupal.org/user/157092) Related to !1468 >>> Problem/Motivation Providing the content of the AI requests input and output data is very useful, but for some requests, it can be huge, so storing the full body will increase the overall log storage size. Proposed resolution Usually, only the starting text is meaningful in logs, not the whole text. And for binary input/output, the content is usually not needed, so we can exclude it from logging, and store, for example, only the total size of the content, instead. To resolve this, woul… ### [Placeholders not available when using advanced (token) mode](https://git.drupalcode.org/project/ai/-/work_items/3525367) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::task, priority Description: >>> [!note] Migrated issue Reported by: [jhedstrom](https://www.drupal.org/user/208732) Related to !621 !1423 !1352 >>> --- AI TRACKER METADATA --- Update Summary: Needs to fix AnnMary’s feedback. Check-in Date: MM/DD/YYYY (US format) [When we should see progress/get an update] Due Date: MM/DD/YYYY (US format) [When the issue should be fully completed] Blocked by: [#XXXXXX] (New issues on new lines) Additional Collaborators: @username1, @username2 AI Tracker found here: https://www.drupalstarforge.ai/ --- END METADATA --- Problem/Motivation The advanced automator type that allows to… ### [Make AI API Explorer have chat history](https://git.drupalcode.org/project/ai/-/work_items/3528949) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiApiExplorer, category::task, priority Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1049 >>> Problem/Motivation This is dependent on #3528948: Add chat_history form element. When the chat history form field is available, we should add it to the Chat explorer in AI API Explorer and remove our custom solutions there. Proposed resolution Remove the current way of loading text and images. Add the chat_history form field instead System message should stay as it is. > Related issue: [Issue #3528948](https://www.drupal.org/node/3528948) ### [Make API explorer work with Symfony platform and legacy providers](https://git.drupalcode.org/project/ai/-/work_items/3586470) State: opened | Updated: 2026-07-02 | Author: Wolfgang Ziegler (fago) | Assigned: Wolfgang Ziegler (fago) | Labels: Has Testing Steps, priority::normal, state::needsReview, v2.x-dev Description: ### Motivation Before doing further development, we need to make sure we are able to test stuff well manually with API explorer. ### Proposal Make API-explorer work with both Symfony platform and legacy-providers, so both can be tested with it. ### [TypeError in AutomatorBaseAction::getAutomatorsOptions() when automating base fields](https://git.drupalcode.org/project/ai/-/work_items/3586430) State: opened | Updated: 2026-07-02 | Author: Pieter Frenssen (pfrenssen) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview Description: ## Summary Currently `AutomatorBaseAction::getAutomatorsOptions()` requires a `$bundle` to be passed in to retrieve the options for a field. The bundle is available for regular fields added through the field API, but base fields are not associated with a bundle (since base fields apply to all bundles). This can cause a fatal `TypeError` to be thrown when calling code cannot supply a bundle. For example when `AutomatorBaseAction::isAvailable()` is called for an automator associated with a base field. ## Steps to reproduce 1. Create an "Article" node type. 2. Enable the [Base Field Override… ### [Integrate ChatProcessor plugin system into AI Chatbot DeepChat block](https://git.drupalcode.org/project/ai/-/work_items/3585077) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: David Galeano (gxleano) | Labels: AI Initiative Sprint, AI Innovation, aiChatbot, category::feature Description: >>> [!note] Migrated issue Reported by: [ahmad khader](https://www.drupal.org/user/3727855) Related to !1497 >>> [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 Integrate the ChatProcessor plugin system (added in #3492940) into the AI Chatbot module's DeepChat block. This allows site builders to select which ChatProcessor plugin handles chat interactions, decoupling the chatbot UI from … ### [Add AI Assistant API ChatProcessor plugin](https://git.drupalcode.org/project/ai/-/work_items/3585075) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: David Galeano (gxleano) | Labels: AI Initiative Sprint, AI Innovation, aiChatbot, category::feature Description: >>> [!note] Migrated issue Reported by: [ahmad khader](https://www.drupal.org/user/3727855) Related to !1496 >>> [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 Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Create an AiAssistantApiProcessor ChatProcessor plugin tha… ### [AiPromptSubForm validates inline prompt against stale prompt type when multiple ai_prompt elements exist](https://git.drupalcode.org/project/ai/-/work_items/3586548) State: opened | Updated: 2026-07-02 | Author: Javier Destefanis (javierdestefanis) | Assigned: unassigned | Labels: Has Testing Steps, category::bug, priority::normal, state::needsReview Description: ## Summary When a settings form contains multiple `#type => ai_prompt` elements with different prompt types, inline prompt creation can validate against the wrong prompt type. We reproduced this with four prompt selectors on the same config form: * `content_audit_preview_system`, no required variables * `content_audit_preview_user`, requires `{PAGE_CONTENT}` and `{VISITOR_QUESTION}` Note: Creating the same `content_audit_preview_system` prompt from the standalone Prompt Entities admin form works correctly, so the prompt type config itself is valid. Temporary logging inside `AiPromptSubfor… ### [Improve ai_ckeditor UX when no provider modules are installed](https://git.drupalcode.org/project/ai/-/work_items/3586549) State: opened | Updated: 2026-07-02 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: Has Testing Steps, Needs UX review, category::feature, priority::minor Description: ## Summary `ai_ckeditor` currently assumes that at least one provider module is installed. If no provider module (such as `ai_provider_openai`) is available, the CKEditor AI functionality does not work and may result in confusing behavior or errors. The module could provide clearer feedback to site builders or explicitly require provider modules. ## Problem `ai_ckeditor` can be enabled without installing any provider modules. From a site builder perspective, the module appears to be configured correctly because the CKEditor buttons are available, but attempting to use them fails. This c… ### [ai_prompt entity validation](https://git.drupalcode.org/project/ai/-/work_items/3549664) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Sven Decabooter (svendecabooter) | Labels: aiCoreModule, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [svendecabooter](https://www.drupal.org/user/35369) Related to !925 >>> Problem/Motivation This came up as part of the refactoring for #3549153: Translate: use prompt entities instead of custom configurations. In that issue, we transform regular textual prompts being stored in config, to a reference to an ai_prompt config entity, that stores the prompt value and variables information. In \Drupal\ai_translate\Form\AiTranslateSettingsForm::validateForm() there was already logic to validate that the prompt text has a minimal length of 50 characters. I'… ### [Render images and videos inside the chatbot viewport](https://git.drupalcode.org/project/ai/-/work_items/3586518) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::normal, state::needsReview Description: ## Problem/Motivation When the AI chatbot renders a response that contains images or videos, the media is not constrained to the chatbot's viewport. Instead it currently shows/overflows everywhere, breaking out of the chat window and affecting the surrounding page layout. ## Steps to reproduce 1. Enable and configure `ai_chatbot`. 2. Trigger a chatbot response that includes an image or a video (e.g. markdown image syntax or an embedded video). 3. Observe that the media is rendered outside the bounds of the chatbot viewport rather than inside it. ## Proposed resolution The chatbot should r… ### [Improve property limit widgets with proper enum/boolean support and fix FixedValue type mismatch](https://git.drupalcode.org/project/ai/-/work_items/3586393) State: opened | Updated: 2026-07-02 | Author: Ahmad Khader (Ahmad-Khader) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, sprint-candidate, state::needsReview Description: [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Added a new PropertyLimitWidgetHelper class with shared enum/boolean detection, widget building, value extraction, and type casting logic. Refactored ToolsExplorer to use it. Check-in Date: MM/DD/YYYY [/Tracker]Problem/Motivation The Tools Explorer rendered a plain <textarea> for every property's "Values" field, even for properties with known enum constraints or boolean type — users had to type valid option strings manually. Enum detection + widget building was duplicated across ToolsExplorer, and… ### [Guardrail set - "Stop threshold" documentation](https://git.drupalcode.org/project/ai/-/work_items/3586477) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview Description: I'm not seeing any documentation for AI guardrail sets "Stop threshold" configuration. I understand the idea behind it, but some documentation or additional help text would be welcome. After reviewing the code (with Claude's help), it seems that at the current time, the 3 plugins that are included can all ever just contribute 0 or 1 to the aggregate score. Therefore, _any_ value of "Stop Threshold" between 0 and 1 is equivalent. I also understand that other guardrail plugins can be developed that provide fractional scores. -mike ### [Create assisted structured output generation](https://git.drupalcode.org/project/ai/-/work_items/3556378) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Ann Mary Sruthy (annmarysruthy) | Labels: aiAgent, category::feature, priority, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1245 >>> Problem/Motivation Currently we have a flag for providers that offers the support of running the mix of tools and structured output, see #3550163: Add new flag ChatCombinedToolsAndStructure. However it is a known problem, that some providers or models does not allow for this. This means that an agent will never be able to return a structured output, since its using tools. With the Tool API and its outputted structure and the cool possibilities with tools like FlowDrop or ECA… ### [Add "Request rate limit has been exceeded" error messages to AI Log](https://git.drupalcode.org/project/ai/-/work_items/3561399) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Goel (shubhamgoel) | Labels: aiLogging, category::task, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [ultimike](https://www.drupal.org/user/51132) Related to !1116 >>> [Tracker] Update Summary: Add "Request rate limit has been exceeded" error messages to AI Log Short Description: It would be useful for error messages of this type to be included in the log, including any relevant response header data. Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Currently, the errors like "Request rate limit has been exceeded" to not appear in the AI Log. I think it would be useful to in… ### [Allow Field Widget Actions to target a specific automator](https://git.drupalcode.org/project/ai/-/work_items/3571915) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::bug, priority::minor Description: >>> [!note] Migrated issue Reported by: [oneliner](https://www.drupal.org/user/1781526) >>> [Tracker] Update Summary: Fix enables multiple field widget action buttons to run only their selected automator. Short Description: Field widget actions trigger all automators on a field instead of the selected one. Check-in Date: 02/06/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation It’s possible (though not exposed by the default UI) to configure multiple AI automators for the same field by duplicating the automator config entity with a… ### [Document streaming helping methods and add change record](https://git.drupalcode.org/project/ai/-/work_items/3579930) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1433 >>> [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 Since 1.2.x we are using doIterate as the method that is exposed to the providers to use for their stream iterators. This is not documented and no change record can be found for this. We should add that when targetting 1.2.0 … ### [Assistant rewrites links poorly or hallucinates links sometimes](https://git.drupalcode.org/project/ai/-/work_items/3499610) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Alphons Jaimon (AJV009) | Labels: aiAssistantsApi, category::bug, priority::major, state::needsWork Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation The Assistants API currently is running different plugins - they can be Agents or RAG (or something in-house). So what happens is that the Assistant API gets a question about something for RAG or instruction to do something for Agents and they action plugin then goes to work and finds information or tells the Assistant it is done. In both those examples the URI's it gives back are deterministic and 100% hallucination free. RAG responses comes from the field in Search API an… ### [RestrictToTopic guardrail: add opt-in logging when a topic is flagged](https://git.drupalcode.org/project/ai/-/work_items/3586486) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, aiLogging, category::feature Description: ## Summary Add an optional setting to the **Restrict to Topic** guardrail (`RestrictToTopic`) that logs to the standard Drupal log whenever the guardrail flags a topic. The setting is a checkbox, **disabled by default**, so existing behaviour is unchanged unless a site builder opts in. ## Problem The `RestrictToTopic` guardrail (`web/modules/custom/ai/src/Plugin/AiGuardrail/RestrictToTopic.php`) currently stops a request when invalid topics are present or no valid topics are found, but it does not record *that* it restricted the request anywhere observable. There is no way to see in the log… ### [Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() (line 498 of /var/www/html/testu/web/core/lib/Drupal/Core/File/FileSystem.php)](https://git.drupalcode.org/project/ai/-/work_items/3551584) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: aiApiExplorer, category::bug, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [fishfree](https://www.drupal.org/user/175299) >>> For ImageToVideo OperationType, the following lines will throw exception:   ...    $mp4_binary_string = file_get_contents($video_url);  $video_file = new VideoFile($mp4_binary_string, 'video/mp4', 'alibabacloud' . md5($video_url) . '.mp4');return new ImageToVideoOutput([$video_file], $response, ['source_url' => $video_url]);The calling stack is as below: Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() … ### [Match "Global Guardrails" config page title with "Global AI Guardrails" menu item](https://git.drupalcode.org/project/ai/-/work_items/3586476) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::minor, state::needsReview Description: I like consistency - luckily, it is also good UX. The menu link is "Global AI Guardrails" while the page title is just "Global Guardrails". Let's pick one. -mike ### [Separate AI Chatbot documentation from AI Assistant API](https://git.drupalcode.org/project/ai/-/work_items/3538657) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> Problem/Motivation Follow-up to: #3492940: Add ChatProcessor To split out the AI Chatbot documentation from AI Assistant API docs. See context in comments 2 and 5 of: #3538457: AI module documentation has warnings when running mkdocs serve Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Once the parent issue is done, split the docs. Remaining tasks Wait for parent Split docs, re… ### [Provider configuration on assistant, when run as agent, is not being sent to provider](https://git.drupalcode.org/project/ai/-/work_items/3543368) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAssistantsApi, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [lpeabody](https://www.drupal.org/user/1137356) Related to !902 >>> Problem/Motivation In the latest 1.2.x, as far as I can tell, the configured max tokens and temperature settings for an assistant are never sent to the AI provider when running as an agent. Unless I'm missing something (entirely possible). Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Set max output tokens and temperature settings on an assistant that is configured to run as an ag… ### [Schema errors for an Automator field](https://git.drupalcode.org/project/ai/-/work_items/3585104) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Prakash (shubham.prakash) | Labels: category::bug, priority::normal, state::needsWork, toBeTriaged Description: >>> [!note] Migrated issue Reported by: [sirclickalot](https://www.drupal.org/user/403880) Related to !1498 >>> [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 Following upgrading to 1.33, where I have been using an Automator on a field named 'Prompt and Model Response (field.field.node.prompt_and_model_response) ' I am seeing this warning message... Warning messageSchema errors for fie… ### [Update the AI Assistant documentation - 2.0.x](https://git.drupalcode.org/project/ai/-/work_items/3549561) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Goel (shubhamgoel) | Labels: Has Testing Steps, category::bug, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1118 >>> Problem/Motivation The AI Assistant was updated last minute for the 1.1.x release, however the documentation does not reflect that at all. We should add this to the documentation. ### [Add optional prompt to ImageToVideoInput and clean up the class](https://git.drupalcode.org/project/ai/-/work_items/3586540) State: opened | Updated: 2026-07-02 | Author: Ahmad Khader (Ahmad-Khader) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::normal, state::needsReview Description: ## Description The image_to_video operation type cannot carry a text prompt. ImageToVideoInput exposes only the source. Classic image-to-video models (Stable Video Diffusion) animate a still image with no prompt — the image-only contract is fine for them. Modern prompt-guided models (CogVideoX-I2V, LTX-Video, Kling, Runway Gen-3) require a prompt to direct the motion. There is currently no way for a caller or provider to pass one. This is inconsistent with ImageToImageInput, which already has getPrompt()/setPrompt(). Also, the operation types show a lot of audio-to-audio input copied tex… ### [Functioncall schema error with special model](https://git.drupalcode.org/project/ai/-/work_items/3573038) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAgent, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [ipumpkin](https://www.drupal.org/user/2279442) Related to !1190 >>> [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 When use deepseek model with Drupal Canvas AI got error from LLM API: Error invoking model response: Invalid schema for function 'ai_agent_verify_task_completion': schema must be a JSON Schema of 'type: "object"', got 'type: null'. … ### [Agent/Assistant Conversion Operations](https://git.drupalcode.org/project/ai/-/work_items/3574046) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: James Abrahams (yautja_cetanu) | Labels: Has Testing Steps, aiAssistantsApi, category::task, priority::normal Description: >>> [!note] Migrated issue Reported by: [yautja_cetanu](https://www.drupal.org/user/626050) Related to !1209 >>> [Tracker] Update Summary: AI provided solution that physically works and has undergone manual testing to convert between the two. Short Description: Allow Agents to be converted to Assistants so they can be used directly with a chatbot in a simpler manner better for context. Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Site builders can see both AI Agents and AI Assistants in admin listings, but the… ### [Show in the UI that an AI Agent is "Connected" to the Assistant](https://git.drupalcode.org/project/ai/-/work_items/3574064) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAssistantsApi, category::task, priority::normal Description: >>> [!note] Migrated issue Reported by: [yautja_cetanu](https://www.drupal.org/user/626050) Related to !1239 >>> [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 The historical summary of why this is a problem is located here: https://git.drupalcode.org/project/flowdrop_ui_agents/-/work_items/3567054 However it means the connection between "Assistant" and "Agent" is kind of hidden behind… ### [backport: one-click link should show human name](https://git.drupalcode.org/project/ai/-/work_items/3580328) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Jordan Koplowicz (koppie) | Labels: Has Testing Steps, aiTranslate, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [koppie](https://www.drupal.org/user/261840) Related to !1334 >>> [Tracker] Update Summary: New issue, backported from https://www.drupal.org/project/ai_translate Short Description: one-click link should show human name, not machine name Check-in Date: 03/19/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation The AI module works off of providers. Each provider defines models with both human name, and "machine name." The machine name usually avoids spaces and other "special" characters. The prob… ### [ActionPluginDeriver crashes AI features when an action plugin lacks an instance class](https://git.drupalcode.org/project/ai/-/work_items/3585335) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [mtift](https://www.drupal.org/user/751908) Related to !1520 >>> [Tracker] Update Summary: New bug report — defensive fix proposed Short Description: ActionPluginDeriver crashes the chat explorer when any ECA action plugin lacks a class Check-in Date: 04/23/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation ActionPluginDeriver::getDerivativeDefinitions() iterates every ECA action plugin definition and calls createInstance() on each one to discover available function-call tools for AI provide… ### [Standardize "AI Automator" naming across UI [1.x]](https://git.drupalcode.org/project/ai/-/work_items/3585382) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, UX, aiAutomators, category::task Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) Related to !1527 >>> [Tracker] Update Summary: Standardize AI Automator naming across UI [1.x]. Short Description: Backport fix for inconsistent lowercase usage of "ai automator" in UI labels. Check-in Date: 04/17/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] This issue is a follow-up to #3585119, as suggested by @marcus_johansson, and targets the 1.x branch. Problem/Motivation The term "AI Automator" is used inconsistently across the UI. In several places it app… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, aiChatbot Description: >>> [!note] Migrated issue Reported by: [heyyo](https://www.drupal.org/user/474388) Related to !1277 >>> Problem/Motivation ChatBot closes itself, and impossible to reopen-it, without refreshing the page Steps to reproduce 1. Create new content with CKEditor, for example basic page 2. Open ChatBot 3. Add Media into Ckeditor, we can see ChatBot closes 4. Include the Media 5. It's impossible to reopen the ChatBot > Related issue: [Issue #3505569](https://www.drupal.org/node/3505569) --- MERGE REQUESTS (24h) --- ### [Issue #3584977: RestrictToTopic guardrail: add semantic topic matching mode.](https://git.drupalcode.org/project/ai/-/merge_requests/1529) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3584977-restricttotopic-guardrail-add | 881 diff lines Description: Closes #3584977 ### [Issue #3586543: Add AI reranking processor for Search API.](https://git.drupalcode.org/project/ai/-/merge_requests/1729) State: opened | Author: Abhisek Mazumdar (abhisekmazumdar) | Branch: 3586543-add-ai-reranking-processor-for-search-api | 735 diff lines Description: ## Description A new Search API processor plugin (`ai_reranker`) that re-orders query results using the `rerank` operation type already in AI Core. The `rerank` operation was added in #3488114 but nothing consumed it for Search API. #3557901 proposed putting reranking in `ai_search`, but reranking is a generic capability. It belongs in the `ai` core module where the operation type itself lives, so it works with any Search API backend (database, Solr, anything), not just the vector backend. **New files:** - `src/Plugin/search_api/processor/AiReranker.php`: `ProcessorPluginBase` plugin runni… ### [Issue #3586478: "Add rich-text image description support to AI Automators"](https://git.drupalcode.org/project/ai/-/merge_requests/1679) State: opened | Author: Levente Besenyei (LeventeB) | Branch: 3586478-issue-branch-2x | 2435 diff lines Description: ## Description Ports the resolution of #3586478 from the 1.x line to the 2.x branch. This introduces rich-text image awareness to AI Automators so supported text-based automators can discover embedded images, generate AI image descriptions, include those descriptions in prompt context, and optionally store image metadata for auditability. For AI content pre-moderation, this enables the moderation automator to evaluate visual content from Article body fields in addition to text content. If embedded images cannot be fully processed (for example, configured image limit exceeded, unreachable/in… --- 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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). ### [Drupal AI UX meeting 29 June 2026](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586592) State: opened | Updated: 2026-07-02 | Author: Aidan Foster (aidanfoster) | Assigned: Aidan Foster (aidanfoster) | Labels: meetings, state::accepted Description: **Date:** Monday, June 29, 2026 **Attendees:** Aidan, Marcus, Ángela, Darren, Emma ### Canvas chat ticket * Stop becomes play/pause; resume re-prompts the agent to continue, possible because generation runs one loop per request * Stop and undo is renamed Stop and revert all changes, a milestone revert of the whole turn, kept redo-able and distinct from native Ctrl-Z ### AI Content Review criteria-creator UI * A form that writes the agent's markdown prompt: guidelines, per-criterion thresholds, and scored good/medium/bad examples * Two scoring methods get different UIs: example-based, and… --- 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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). ### [Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3584407) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, Road to 1.0.0, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !8 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: New submodule that exposes AI request/response/stream/failure events to ECA as first-class Events, Conditions, and Actions. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module dispatches a rich set of events around provider calls (PreGenerateResponseEvent, PostGenerateResponseEvent, PostStreamingResponseEvent) and exposes typed exceptions for rate limits, quotas, unsafe prom… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [4] summariseModule:ai_provider_anthropic:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Anthropic Provider (machine name: ai_provider_anthropic) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Carlos Ospina (camoa)". 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

        Anthropic 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 #3607960: Add token counting, citations, and context management](https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35) State: opened | Author: Carlos Ospina (camoa) | Branch: 3607960-add-token-counting | 1823 diff lines Description: ## Summary Phase 3 of the native SDK integration meta ([#3572138](https://www.drupal.org/project/ai_provider_anthropic/issues/3572138)): adds **token counting**, **citations**, and **context management (compaction + editing)**. All three features are opt-in via new admin form sections and default off; the GA chat path is behaviorally unchanged when they are disabled (live-verified). ## What changed - **Token counting** — public `AnthropicProvider::countTokens(ChatInput|array, string): int` backed by `$client->messages->countTokens()`. Provider-native method (drupal/ai 1.4 has no token-count… --- COMMITS (24h) --- (none) ======================================================================== ## [5] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Alin Ameiroaie (aalin) [1], Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

          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). ### [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-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | 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… ### [Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.)](https://git.drupalcode.org/project/ai_agents/-/work_items/3577241) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhishek Dhariwal (adaptative) | Labels: AI Initiative Sprint, AI Product Development, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !249 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.) Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI Agents module currently allows defining and configuring agents inside Drupal. However, many modern AI ecosystems expect agents to exist inside external platforms such as Claude Code or services like VAPI. In many cases Drupal sh… ### [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-02 | 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), 1815 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… ### [Add caller agent runner ID to tags in determineSolvability()](https://git.drupalcode.org/project/ai_agents/-/work_items/3574487) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [aalin](https://www.drupal.org/user/2941961) Related to !238 >>> Problem/Motivation When a custom AiProvider implements chat(), there is currently no way to determine from the $tags array whether the call originates from a root agent loop or from a sub-agent/tool execution loop. --- MERGE REQUESTS (24h) --- ### [Issue #ai_agents-3578197:ContentEntitySeeder-Crashes-Double-Wrapped fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/291) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3578197-ContentEntitySeeder-Crashes-Double-Wrapped | 330 diff lines Description: Closes #3578197 ### [Issue #ai_agents-3577520: Streaming fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/290) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3577520-Fix-Streaming-Through-SetStreaming | 280 diff lines Description: Closes #3577520 ### [3574487: Add caller agent runner ID to tags in determineSolvability().](https://git.drupalcode.org/project/ai_agents/-/merge_requests/238) State: merged 2026-07-02 | Author: Alin Ameiroaie (aalin) | Branch: ai_agents-3574487 | 216 diff lines --- COMMITS (24h) --- - [e48c4836](https://git.drupalcode.org/project/ai_agents/-/commit/e48c4836dc76e1945924e1e4f7ee9934fa1519c1) 3574487: Add caller agent runner ID to tags in determineSolvability(). — Alin Ameiroaie (2026-07-02T07:53:57.000+00:00) ======================================================================== ## [6] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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), Abhishek Dhariwal (adaptative), AKHIL BABU (AkhilBabu) [1], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Fons Vandamme (f0ns), Gábor Hojtsy (goba), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR) [1], Prabhavathi Vanipenta (prabha1997), Ravi Maniyar (ravi.maniyar.123), Wim Leers (wimleers) [4]". 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-03 | 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… ### [WSOD AssertionError: assert(!$data instanceof ComponentInputsMapping) in assert() when requesting tmgmt translation job for some component trees](https://git.drupalcode.org/project/canvas/-/work_items/3591734) State: closed | Updated: 2026-07-03 | Author: Gábor Hojtsy (goba) | Assigned: Narendra Singh Rathore (NarendraR), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: category::bug, componentSources, priority::normal, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1296 [fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date](https://git.drupalcode.org/project/canvas/-/merge_requests/1296) | State: merged 2026-07-03 | Author: Narendra Singh Rathore (NarendraR), 502 diff lines Description: I went to try Canvas 1.7.0 translation today with a brand new install of Drupal CMS Haven. I don't think the issue is due to Haven, so submitting here. I think previously this config form had separate settings under the components for the tree and inputs but that is not an option that I have for some reason, so this is how I have it set up. ![Screenshot 2026-06-26 at 11.29.44.png](https://git.drupalcode.org/-/project/19391/uploads/fe3690f7cf31f5eafd12c4cf6de93f29/Screenshot_2026-06-26_at_11.29.44.png){width="755" height="600"} I have `canvas_dev_translation` enabled and `content|config|inte… ### [`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-02 | 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… ### [Match multi-line string props without a matches-everything Regex marker, then remove JitSafeRegexValidator](https://git.drupalcode.org/project/canvas/-/work_items/3591762) State: opened | Updated: 2026-07-02 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: category::task, priority::normal, shapeMatching, state::accepted Description: ## Overview Canvas overrides `string_long` fields with a `Regex` constraint whose pattern is `/(.|\r?\n)*/` (built by `JsonSchemaType::patternToPcre('(.|\r?\n)*')`). This pattern matches every possible string, so it validates nothing. It exists only as a **marker**: `EntityFieldPropSourceMatcher` compares constraints by value, so a component's multi-line string prop (`pattern: (.|\r?\n)*`) matches a `string_long` field only when the field carries a byte-identical `Regex` constraint. In #3575644 this marker caused a real bug: on long values the pattern exhausts the PCRE JIT stack, so `preg_ma… ### [Suppress spurious getcwd() errors in PHPUnit CI job logs](https://git.drupalcode.org/project/canvas/-/work_items/3591765) State: opened | Updated: 2026-07-02 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: DX (Developer Experience), priority::minor, projectManagement, state::accepted Description: ### Overview PHPUnit CI job logs end with spurious errors after the tests themselves have finished: ``` sh: 0: getcwd() failed: No such file or directory shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory ``` These appear in the `after_script` / artifact-upload phase, after test results are already recorded. GitLab's cleanup removes the job's working directory while shell processes spawned during `after_script` still … ### [Automate review using PHPStan: disallow short ternary](https://git.drupalcode.org/project/canvas/-/work_items/3591671) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Lee Rowlands (larowlan), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: DX (Developer Experience), projectManagement, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1240 [Resolve "Automate review using PHPStan: disallow short ternary"](https://git.drupalcode.org/project/canvas/-/merge_requests/1240) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 699 diff lines Description: @larowlan, while reviewing !1112: > ``` > $entity_type_bundles[] = [$entity_type_id, $bundle ?: $entity_type_id]; > ``` > > ?? instead of ?: - ?: - we know it is NULL so can use the more strict version — — —-- — https://git.drupalcode.org/project/canvas/-/merge_requests/1112#note_1199237 The solution is https://github.com/phpstan/phpstan-strict-rules' `disallowedShortTernary: true`: > Disallow short ternary operator (?:) - implies weak comparison, it's recommended to use null coalesce operator (??) or ternary operator with strict condition. ### [Canvas should mark multi-line string props on SDCs and code components as translatable](https://git.drupalcode.org/project/canvas/-/work_items/3591760) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Lauri Timmanee (lauriii), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: blocker, category::task, priority::critical, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1327 [chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable](https://git.drupalcode.org/project/canvas/-/merge_requests/1327) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 347 diff lines Description: See https://git.drupalcode.org/project/mercury/-/work_items/3592151#note_1078869. Coming up again at https://git.drupalcode.org/project/canvas/-/merge_requests/1296#note_1370731 ### [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-02 | 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](https://git.drupalcode.org/project/canvas/-/merge_requests/1332) | State: opened | Author: Wim Leers (wimleers), 1334 diff lines Description: Yesterday, https://www.drupal.org/project/drupal/releases/11.4.0 was released. This needs 2 MRs: - [ ] Canvas should be tested explicitly against 11.4: #3561392+ - [ ] Canvas should drop 11.2 support, because Drupal core dropped security support for 11.2. Note that the latter will unblock !1241. ### [Make tests pass again on Drupal 11.3: block config schema changed, `ComponentInputsEvolutionTest` needs to handle <=11.2 vs >11.2 differently](https://git.drupalcode.org/project/canvas/-/work_items/3591701) State: closed | Updated: 2026-07-02 | Author: Matt Glaman (mglaman) | Assigned: Matt Glaman (mglaman) | Labels: AI-accelerated, state::fixed, technical debt Description: ## Problem/Motivation The nightly pipeline on `1.x` ([pipeline 855595](https://git.drupalcode.org/project/canvas/-/pipelines/855595)) fails the PHPUnit kernel jobs on Drupal core 11.3 (`DRUPAL_CORE_NEXT_MINOR=11.3.10`). Two kernel test classes fail only on 11.3; they pass on 11.2. ### Failing jobs (11.3, all databases) - `phpunit (11.3 *): [PHPUnit-Kernel, 1, ...]` — `ComponentInputsEvolutionTest` - `phpunit (11.3 *): [PHPUnit-Kernel, 2, ...]` — `HostEntityPropSourceMatcherTest` ## Steps to reproduce ```bash composer require "drupal/core-recommended:~11.3.0" "drupal/core-dev:~11.3.0" --wi… ### [Prepare for PHPStan 2.x](https://git.drupalcode.org/project/canvas/-/work_items/3501228) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::normal, projectManagement Description: >>> [!note] Migrated issue Reported by: [longwave](https://www.drupal.org/user/246492) >>> Overview Drupal 11.x now ships with PHPStan 2.0 and 11.2.0 will be the first stable version to use it. We can test locally by running XB against Drupal 11.x. Currently this reports three configuration errors: <?phpInvalid entries in excludePaths:Path /var/www/html/web/modules/contrib/experience_builder/modules/same_page_preview is neither a directory, nor a file path, nor a fnmatch pattern.Path /var/www/html/web/modules/contrib/experience_builder/tests/src/Cypress/node_modules is neither a direct… ### [Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent](https://git.drupalcode.org/project/canvas/-/work_items/3591457) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, ai, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1329 [Add layout fixture and tests for page builder agent](https://git.drupalcode.org/project/canvas/-/merge_requests/1329) | State: merged 2026-07-02 | Author: AKHIL BABU (AkhilBabu), 2214 diff lines Description: ## Goal Create automated tests for the Canvas AI agents, so the manual testing otherwise needed every time an agent's system prompt changes can be avoided. ## Scope This issue was originally scoped to cover both the page builder agent and the template builder agent. It is now narrowed to the **page builder agent** alone. Tests for the template builder agent will follow in a separate issue. ## What has been done so far This builds on the earlier steps toward that coverage: - #3579681 — added the `canvas_ai_agents_test` module and the framework that validates the YAML output produced by … ### [Canvas AI: Component context required props missing required flag](https://git.drupalcode.org/project/canvas/-/work_items/3591655) State: opened | Updated: 2026-07-02 | Author: AKHIL BABU (AkhilBabu) | Assigned: AKHIL BABU (AkhilBabu) | 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: opened | Author: Prabhavathi Vanipenta (prabha1997), 115 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'], … ### [Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic](https://git.drupalcode.org/project/canvas/-/work_items/3591721) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: auto-save, configManagement, projectManagement, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1324 [Resolve "Follow-up for #3591596: add PHPat rules for keeping `StagedLanguageConfigOverride` config entity type-agnostic"](https://git.drupalcode.org/project/canvas/-/merge_requests/1324) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 66 diff lines Description: The following discussion from !1271 should be addressed: - [ ] @penyaskito started a [discussion](https://git.drupalcode.org/project/canvas/-/merge_requests/1271#note_1268169): (+3 comments) > Shouldn't this be restricted to our known `ComponentTreeConfigEntityBase` implementers? ### [Prevention of publishing on Conflict in Canvas UI](https://git.drupalcode.org/project/canvas/-/work_items/3587526) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: Wim Leers (wimleers), Feliksas Mazeikis (f.mazeikis), Ravi Maniyar (ravi.maniyar.123) | Labels: Conflict resolution, category::task, priority::critical, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1193 [feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity"](https://git.drupalcode.org/project/canvas/-/merge_requests/1193) | State: merged 2026-07-02 | Author: Feliksas Mazeikis (f.mazeikis), 887 diff lines Description: >>> [!note] Migrated issue Reported by: [ravi.maniyar.123](https://www.drupal.org/user/3867193) Related to !1018 >>> Overview: Whenever conflicts occur, we need to show the file name with indicator and with different styling. The file with conflicts cannot be selected for publish. This issue will only add this functionality for Canvas UI. There will be separate issue that will ensure conflict detection is performed during publishing of entities in similar fashion validation is performed. User interface changes: -- Item with a conflict has indicator icon -- Item with a conflict is marked i… ### [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: opened | Updated: 2026-07-02 | 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: opened | 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… ### [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-02 | Author: Fons Vandamme (f0ns) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1331 [fix(Page): #3591763 Publishing a page without a URL alias fails: its empty...](https://git.drupalcode.org/project/canvas/-/merge_requests/1331) | State: opened | Author: Fons Vandamme (f0ns), 89 diff lines 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. ### [Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions`](https://git.drupalcode.org/project/canvas/-/work_items/3591683) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: Configuration schema, Novice, autoSave, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1322 [#3591683: Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions`](https://git.drupalcode.org/project/canvas/-/merge_requests/1322) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 25 diff lines Description: The following discussion from !1189 should be addressed: - [ ] @larowlan started a [discussion](https://git.drupalcode.org/project/canvas/-/merge_requests/1189#note_1199179): (+1 comment) > I think in another issue we patched core for this via our own .schema.yml file - [ ] @wimleers confirmed: > Indeed — #3583684 committed `config/schema/core_fix_forward_port.schema.yml` with `core.base_field_override.*.*.*.third_party.content_translation` — doesn't that mean this is not necessary? ⇒ we should be able to revert those config schema exclusions from the test coverage ### [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-02 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1330 [Issue #3591663: Fail validation for props that do not exist on a component](https://git.drupalcode.org/project/canvas/-/merge_requests/1330) | State: opened | Author: Abhishek Dhariwal (adaptative), 251 diff lines 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… ### [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-02 | Author: drupalbot | Assigned: Joonas Meriläinen (mErilainen) | 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 … ### [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-02 | 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), 603 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… ### [Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed](https://git.drupalcode.org/project/canvas/-/work_items/3591516) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: AKHIL BABU (AkhilBabu) | Labels: AI Initiative Sprint, AI Innovation, Novice, ai Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !1152 >>> Overview The canvas_ai_agents_test module exists to provide automated test coverage for the Canvas AI agents. https://git.drupalcode.org/project/canvas/-/work_items/3582390 adds automated tests for the orchestrator agent. The next step is to add tests for the page builder agent and the template builder agent. Both agents call the get_component_context tool, which returns a catalog of every component entity available on the site. Because the catalog is site-specific, different tes… ### [Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input](https://git.drupalcode.org/project/canvas/-/work_items/3582390) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, ai Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !957 >>> Overview CanvasAiPageBuilderHelper::generateVerboseContextForOrchestrator() generates a message for the orchestrator agent by combining the current entity type (Canvas page), page title, and page description. This is currently added to the orchestrator agent as a token in its system prompt. Instead, it should be passed through the user input Proposed resolution Remove the [canvas_ai:verbose_context_for_orchestrator] token Get the user input and output of CanvasAiPageBuilderHelper… ### [[DX regression] Canvas AI: Add 'YAML Path Equals' and 'YAML Path Exists' plugins](https://git.drupalcode.org/project/canvas/-/work_items/3579681) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, DX (Developer Experience) Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !737 >>> Overview Parent issue: https://git.drupalcode.org/project/canvas/-/work_items/3579471 Creating a test with the AI Agents Test module involves the following steps, at a high level: Selecting the agent Defining the input prompt Defining rules per tool (a tool should/should not run at a specific loop) Defining rules to validate the tool parameter inputs given by the agent The rules mentioned in the final step are called parameter rules, and the module defines them as AgentsParamete… --- MERGE REQUESTS (24h) --- ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 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… ### [Issue #3575644: Inefficient RegexConstraint on StringLong fields causes "JIT stack limit reached"](https://git.drupalcode.org/project/canvas/-/merge_requests/1276) State: opened | Author: Matt Glaman (mglaman) | Branch: 3575644-issue-branch | 225 diff lines Description: ## Overview Saving a `string_long` field with a long value (~10k+ characters) fails validation with *"This value is not valid."* Canvas overrides `string_long` with a `Regex` constraint whose pattern is `/(.|\r?\n)*/`. That pattern matches every possible string — it never rejects a value. It exists only so `EntityFieldPropSourceMatcher` can recognize multi-line string props by comparing constraints by value. On long values, though, the alternating group under `*` exhausts the PCRE JIT stack: `preg_match()` returns `FALSE` with `PREG_JIT_STACKLIMIT_ERROR`, which Symfony's Regex validator repo… ### [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 | 1281 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… ### [Fix high level translation settings experience for Canvas](https://git.drupalcode.org/project/canvas/-/merge_requests/1303) State: opened | Author: Gábor Hojtsy (goba) | Branch: 3591740-fix-explanation-of-lack-of-canvas-page-language-support-to-account-for-varied-use-cases | 113 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591740 ### [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) | Branch: 3591601-rudimentary-conflict-resolution-ui | 3923 diff lines Description: \[Description of changes\] ## What this MR adds This adds a conflict review flow for Canvas Pages. In simple terms: Canvas saves unpublished edits as auto-saves. A conflict happens when a user has unpublished Canvas changes, but the published Page is changed outside of that user’s Canvas session before they publish. This MR shows those conflicts in Review changes, prevents conflicted items from being published directly, and lets the user open a side-by-side resolver. In the resolver, the user can choose either: - **Published version**: discard the Canvas auto-save for that Page. - **New… ### [Draft: feat(Conflict detection): #3591591 Expand conflict resolution UI with...](https://git.drupalcode.org/project/canvas/-/merge_requests/1317) State: opened | Author: Ravi Maniyar (ravi.maniyar.123) | Branch: 3591752-add-side-by-side-review-flow-for-selected-page-changes | 7035 diff lines Description: \[Description of changes\] Adds a side-by-side review flow for selected non-conflicted Page changes before publishing. **Changes include:** - Added a Review Changes route/view for selected pending Page changes. - Reused the shared page version comparison UI for visual/text comparison. - Allows selecting either the published version or the autosave/new version. - Selecting the published version discards the pending autosave change. - Selecting the new version keeps it selected and publishes it from the action button. - Added the all-files-reviewed state with publish/close actions. - Kept con… ### [Draft: Issue #3591668: Add text-based comparison of entities UI](https://git.drupalcode.org/project/canvas/-/merge_requests/1266) State: opened | Author: Ravi Maniyar (ravi.maniyar.123) | Branch: 3591668-text-based-comparison-of-entities-ui | 4855 diff lines Description: ## Description Adds a text-based comparison view to the conflict-resolution UI so users can compare the published and auto-saved versions of a Canvas page as YAML. This is a stacked MR. The change for #3591668 is in commit `b6a8a7fc`; earlier commits belong to the conflict-detection and conflict-resolution dependencies. ### What changed - Added a **Text** tab alongside the existing Visual and Props views. - Fetches the published and auto-saved entity exports in parallel. - Displays a side-by-side YAML diff using `react-diff-viewer-continued`. - Highlights added, removed, and changed conten… --- COMMITS (24h) --- - [38a14312](https://git.drupalcode.org/project/canvas/-/commit/38a143121892794bac352a0e022a59d0bb9d7f2e) fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date, email, number, boolean) — Narendra Singh Rathore (2026-07-03T01:22:56.000+00:00) - [d7ae391b](https://git.drupalcode.org/project/canvas/-/commit/d7ae391b34fedd1de058521d1ea974d8b89555ff) chore(Project management): #3591671 Automate review using PHPStan: disallow short ternary — Wim Leers (2026-07-02T14:51:47.000+00:00) - [4a84d5f6](https://git.drupalcode.org/project/canvas/-/commit/4a84d5f624fa22d5b0c7641a757e8a80fe0ea6dd) chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable — Wim Leers (2026-07-02T14:05:00.000+00:00) - [028fae3a](https://git.drupalcode.org/project/canvas/-/commit/028fae3ae0e634602b38fbd3168f4a2b5aac461a) feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity" — Feliksas Mazeikis (2026-07-02T12:19:47.000+00:00) - [0242c2ae](https://git.drupalcode.org/project/canvas/-/commit/0242c2aebd68e082f3bfa6e128bc20a8f146a684) chore(Project management): #3591721 Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic — Wim Leers (2026-07-02T11:15:46.000+00:00) - [bfe17b84](https://git.drupalcode.org/project/canvas/-/commit/bfe17b84e6e54c3cb5fd2ce8837a3bb1b578eddd) chore(Auto-save): #3591683 Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` — Wim Leers (2026-07-02T09:56:57.000+00:00) - [3fffffc5](https://git.drupalcode.org/project/canvas/-/commit/3fffffc5cc1a7efa995ea7fac5f09d346f7c2eb8) test(AI): #3591457 Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent — AKHIL BABU (2026-07-02T07:44:42.000+00:00) ======================================================================== ## [7] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) [1], 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). ### [Sprint 13 CCC roadmap updates, sprint planning, and issue triage](https://git.drupalcode.org/project/ai_context/-/work_items/3586293) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/Motivation Prioritize backlog items for the sprint to align with roadmap, releases, and project needs. --- ## Proposed resolution Groom sprint issues https://git.drupalcode.org/project/ai_context/-/work_items/views/78 --- ## Target date or deadline 27 to 10 July 2026 --- ## Remaining tasks - Go through backlog and prioritize - Create new issues as needed - Identify what goes into sprint - Tune mid-sprint as needed - Update roadmap meta as needed --- ## Related issues - [#3567798: [META] CCC MVP 1.0 roadmap](https://www.drupal.org/project/ai_context/issues/3567798) - … ### [Documentation corrections: dependency requirements and AI module version](https://git.drupalcode.org/project/ai_context/-/work_items/3586317) 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: ## 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.**_ Two user-facing doc errors beta testers will hit: - `docs/index.md` lists Scheduler and Scheduler Content Moderation Integration as **required**; `README.md` and `composer.json` (require-dev) treat them as optional, and the code degrades gracefully without them. - `README.md` states AI module `^1.3.4`; `composer.json` requires `drupal/ai ^1.4 || ^2`. ## Proposed resolution Fix `docs/index.md` to mark both modules optional and correct the README ve… ### [[Meta] Fix CCC issues based on AI Best Practices results](https://git.drupalcode.org/project/ai_context/-/work_items/3586298) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Ran AI Best Practices against ai_context and found some things that need fixing: GPT 5.5 doc pulling out all the actionable things: [ai-context-actionable-fix-plan.md](https://git.drupalcode.org/-/project/191993/uploads/c3b583782d3be83fde707399a020b762/ai-context-actionable-fix-plan.md) ## Solution GPT 5.5 assessment: For RC1, I’d only block on items that affect **public API, config shape/defaults, installability, or release expectations**. Most accessibility, render-cache, and UI/test cleanup can happen after RC1 as bug/UX fixes. ### Sho… ### [[Feature] Add ExternalContextProviderInterface and ContextQueryInterface to support RAG/vector store integrations](https://git.drupalcode.org/project/ai_context/-/work_items/3586289) State: opened | Updated: 2026-07-03 | Author: josecarlosmedero | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Summary Follow-up to: #3586257+s ## Problem We built an external RAG integration on top of CCC (AI Knowledge Connector — a vector store + semantic retrieval module for Drupal 11) and hit three specific API gaps that currently require workarounds. We're raising these before rc1 so the team can evaluate whether a formal API would be worth adding to make the integration pattern stable and documented for the ecosystem. The current workaround path works (we're using `BuildSystemPromptEvent`) but it's fragile across agent types, bypasses CCC's token limit logic, and gives no observability … ### [Provide real sample context items for end user use](https://git.drupalcode.org/project/ai_context/-/work_items/3586279) 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 Spin off from: #3586244+s Pulling the info from the other ticket. --- It would be really helpful to provide (optional) example context items for this module. There is a mention of this in #3586175, but I wanted to open a separate issue for it because it might make sense to provide a recipe for example content items (similar to this for AI Guardrails: https://www.drupal.org/project/ai_recipe_guardrails_pii) As I'm learning to use the module, I find that I have to spin up an instance of https://www.drupalforge.org/template/driesnote-chicago in order to see some type… ### [Gather CCC contribution stats for code and non-code contributions for release notes](https://git.drupalcode.org/project/ai_context/-/work_items/3586222) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: ## Problem/motivation The current tools for generating release notes are inadequate as they only focus on code commits. They also require the issue number to be in the commit message. I want to gather the stats for all contributors for a release including non-code contributions which there are many. ## Solution The result for release notes should be something like: ``` New Features * one * two Bug Fixes * one * two Tasks * one * two Non-Code Contributions * number of issues? Contributors: kristen pol (35), afoster (8), emma horrell (6), scott falconer (6), mglaman (3)... salsa (35),… ### [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. … ### [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: - 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 StringLongItemOverride patch … ### [Introduce explicit scope types and item inclusion modes; clarify selection in UI and docs](https://git.drupalcode.org/project/ai_context/-/work_items/3586281) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Summary Follow-up to: - #3586243+s - #3586270+s - #3586196+s Blocked by: #3586243+s _**The two decisions still worth locking before this lands: **(1)** `type` derived vs declared, and **(2)** Entity bundle's default inclusion mode.**_ **Builds on (must land first):** #3586243+s — the scope plugin persistence API and capability-flag refactor. **Keep in mind when architecting:** #3586197+s — boundaries / exclusions builds on this. Beta feedback shows site builders don't have an accurate mental model of how context **scopes** decide what actually reaches an agent's prompt. After #35862… ### [Review and update CCC permissions](https://git.drupalcode.org/project/ai_context/-/work_items/3574937) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Problem/Motivation Follow-up to: #3563036+s Let's revisit this after beta3 is created: #3586295+s Permissions need to be revisited to see what's missing and what should be added. This would need to happen prior to full QA: #3573716+s ## Proposed resolution Review permissions, figure out what to add, and add them. ## Target date or deadline July 2026 ## Remaining tasks - Review existing perms - Figure out what's missing - Add perms - Review and test ## AI usage (if applicable) - [ ] AI Assisted Issue This issue was generated with AI assistance, but was reviewed and refined… ### [Allow scope plugins to declare an optional icon for UI display](https://git.drupalcode.org/project/ai_context/-/work_items/3586262) 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: #3586220+s Blocked by: #3586243+s ### Summary Scope plugins are shown in several places across `ai_context` (and will likely appear in more over time). Today, when an icon is shown at all, it is hard-coded in the view layer — e.g. `AiContextItemViewBuilder::SCOPE_ICON_CLASSES` for the context item **Details** sidebar — with a generic funnel fallback for unknown plugins. This issue adds an **optional, plugin-level icon** on `AiContextScope` plugins so each scope can define a consistent visual identity wherever that plugin is rendered, without patching core ma… ### [Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection](https://git.drupalcode.org/project/ai_context/-/work_items/3586243) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 11, AI Sprint 14 Description: ## Description Blocked by: #3586295+s ### Summary The scope plugin API was asymmetric: read and match were abstracted, but write, clear, index, cleanup, form integration, and save-time validation leaked storage details into callers. `AiContextItemForm`, entity presave, `hook_entity_delete()`, and `AiContextScopeIndexService` contained special cases — especially the `target_entities` DER field — that would repeat for every new scope. This issue completes the scope plugin value lifecycle contract before RC1. Callers delegate to `AiContextScopeManager` and scope plugins; custom storage (targ… ### [Create multi-vocabulary taxonomy scope plugin](https://git.drupalcode.org/project/ai_context/-/work_items/3586237) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::feature Description: ## Problem/motivation Follow up to: #3586198+s Blocked by: #3586243+s We do not have a scope plugin that allows associated context with the terms for content entities. Example: * Article **has terms**: foo, bar, hello * Blog post **has terms**: foo, whatever * One context item **has term**: foo * Another context item **has terms**: foo, bar * I'm on the article page, both context items should be relevant * I'm on the blog post, only the second context item should be relevant ## Solution Create a taxonomy scope plugin. The UI should be something like: * Vocabulary ABC \[textbox multis… ### [Create CCC video showing how to configure it](https://git.drupalcode.org/project/ai_context/-/work_items/3586153) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: Let's do this after beta3 is created: #3586295+s People have been having some trouble understanding how to set up CCC. Create a simple video for setting it up. ### [Tune conditional subcontext logic](https://git.drupalcode.org/project/ai_context/-/work_items/3586199) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: Follow up to: #3586194+s It would be good to get these in before this one: - #3586218+s - #3586292+s ## Problem/motivation Conditional subcontext logic needs to be fine-tuned. See related issue above. ## Solution Add the subcontext as an "index" to the parent when asking the LLM which conditional subcontext items are good to include. See issue above for some possible structure. Fill out more details here as this is thought through more. ## Tasks - Review existing logic and test - Document current workflow as needed - Define subcontext index format - Define the LLM workflow - Implement… ### [Recruit CCC beta testers](https://git.drupalcode.org/project/ai_context/-/work_items/3586235) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: ## Problem/motivation Note that Mike Anello (ultimike) is beta testing, but we will try to recruit more after beta3 is created: #3586295+s We want more beta testers. This issue was created for this: #3586234+s ## Solution Promote this in various channels: - Slack - LinkedIn - Planet Drupal? ## Tasks - ~~Create issue with resources~~ - ~~Post in the relevant Slack channels (ai, ai-contrib, ai-context, ai-partner-contributors)~~ - Create a blog post and/or LinkedIn post to promote ### [Add opt-in AiContextSelectionDiagnostics to selection results](https://git.drupalcode.org/project/ai_context/-/work_items/3586242) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::feature Description: ## Summary Follow up to: #3586169 Contrib and site debugging today rely on watchdog/`debug_logging` config, which is global, noisy, and can log sensitive task text. We need structured, **opt-in** selection diagnostics on the result object for preview tools, Drush commands, and developer UI — without leaking context content. **Goal:** When diagnostics are requested, `AiContextSelector::select()` accumulates a structured breakdown and exposes it on `AiContextResult`. ## Solution **Proposed API:** - `AiContextRequest::withDiagnostics(bool $enabled = TRUE)` (or equivalent factory/builder opt… ### [CCC beta3 release planning](https://git.drupalcode.org/project/ai_context/-/work_items/3586182) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 10 Description: ## Problem/Motivation Planning issue for beta3 release See the [milestone](https://git.drupalcode.org/project/ai_context/-/milestones/5#tab-issues ) for all issues. Key must have issues are listed here. --- ## Proposed Resolution **Many issues were already closed and noted here:** - #3567798: META CCC MVP 1.0 roadmap - #3577644: CCC beta1 release planning - #3585902: CCC beta2 release planning **These are the ones below have been the focus since 11 May 2026 for beta3.** --- ### Must haves #### Blocked - N/A #### Todo - #3586296: CCC beta3 QA - #3586295: Create CCC beta3 release … ### [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… ### [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: Joshua Fernandes (joshua1234511) | 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), 2504 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 ### [Clean up CCC accessible interactive links and external links](https://git.drupalcode.org/project/ai_context/-/work_items/3586301) 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 !200 [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), 982 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **2. Accessible Interactive Links And External Links** **Priority:** High **Why group these together:** These are all link-rendering issues. Fixing them together allows one consistent pattern for render-array links, new-tab warnings, and link styling. Includes: - List-builder revisions operation cacheable access result. - Revision UI boolean access checks. ## Solution ### 2.1 Replace interactive links embedded in `#markup` **Files:** - `src/Form/AiCont… ### [Clean up CCC cacheability and access metadata](https://git.drupalcode.org/project/ai_context/-/work_items/3586300) State: opened | Updated: 2026-07-02 | 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 !204 [Issue #3586300: Updated CCC cacheability and access metadata.](https://git.drupalcode.org/project/ai_context/-/merge_requests/204) | State: opened | Author: Joshua Fernandes (joshua1234511), 120 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **1. Cacheability And Access Metadata** **Priority:** High **Why group these together:** These fixes all involve Drupal render/cacheability metadata and access-result cache contexts. They should be reviewed together to avoid fixing one stale-cache path while leaving related cacheability gaps. Includes: - `AiContextOverviewController` cache metadata. - Duplicate overview query cleanup. - `AiContextRenderer` settings cache dependency. ## Solution ### 1.1 A… ### [CCC beta3 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586294) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Do this right before: #3586296+s in case there are any serious issues that need addressing before the release. Beta3 will be released shortly. We continually need to check the codebase as it changes for potential security issues, performance issues, and any pre-rc1 features/apis that need to be addressed. ## Solution Run AI checks against the codebase to identify for pre-rc1 and post-1.0: - Important performance issues - Important feature/API gaps - Security issues (major issues will not be reported here) ## Next steps - Run security review - Run performance revi… ### [[Meta] CCC cleanup from beta3 code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-07-02 | 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) ### Old docs Fable 5 fin… ### [[Meta] CCC cleanup from beta3 code review findings for beta3](https://git.drupalcode.org/project/ai_context/-/work_items/3586310) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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-beta3-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/e83cda3d7f0df7594af44885c7037325/ai_context-beta3-1.0.x-issues.md) ### Old docs Fable 5 fin… ### [Harden update 10011: empty-chunk guard and NULL-only backfill](https://git.drupalcode.org/project/ai_context/-/work_items/3586316) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This should be fixed here: #3586218+s Two robustness issues in `ai_context_update_10011()`: - If items are deleted while the update runs, the batch query eventually returns `[]` while `$sandbox['progress'] < $sandbox['max']`, so `#finished` never reaches 1 — an infinite update loop. - The backfill re-infers over explicit values rather than restricting to NULL rows, so a re-run would flip an explicitly-FALSE, no-custom-scope child back to TRUE (the… ### [Syncing saves bypass all integrity constraints instead of only the global cap](https://git.drupalcode.org/project/ai_context/-/work_items/3586313) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This one should be fixed in: #3586218+s `AiContextItemStorage` skips validation entirely for syncing entities (`!$entity->isSyncing()`). The bypass exists so update 10011 completes on sites already over the global cap, but it also disables the structural checks in `AiContextItemValidator::validateItem()` — self-parent, two-level nesting, missing `subcontext_type`. Migrations and `default_content` imports run with syncing TRUE, so invalid hierarchie… ### [Item form discards user-entered scope when the subcontext feature is disabled](https://git.drupalcode.org/project/ai_context/-/work_items/3586314) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This should be fixed here: #3586218+s `AiContextItemForm::buildEntity()` computes `$inherits_parent_scope = $entity->hasParent() && $entity->inheritsParentScope();` without checking `isSubcontextEnabled()`. With the feature toggled off, the "Same as parent" checkbox is not rendered and the scope widgets are fully visible — yet scope extraction is skipped and `target_entities` is cleared. `preSave()` then strips the parent, leaving a top-level item … ### [Unset inherit_parent_scope silently wipes stored scope on save (data loss)](https://git.drupalcode.org/project/ai_context/-/work_items/3586312) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This problem should be fixed here: #3586218+s On the 3586218 branch, `inherit_parent_scope` has an entity-level default of TRUE and `AiContextItem::inheritsParentScope()` returns TRUE when the field is empty. `preSave()` then clears stored `scope` and `target_entities` whenever the item inherits. This destroys data in three ways: - **Deploy window:** between code deploy and `drush updb`, any save of an existing custom-scope subcontext — including … ### [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-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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… ### [Evaluate Annotations module and how it might work with CCC](https://git.drupalcode.org/project/ai_context/-/work_items/3586268) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation The new [Annotations module](https://www.drupal.org/project/annotations) has overlap with CCC. ### Video From NikLP: No demo videos yet but how y'all feel about a gen AI video outlining my new module suite? :smiling_face_with_tear: https://www.linkedin.com/posts/niklepage_drupal-activity-7469809314463891456-j8u8/ ### Nik's integration approach [ai_context-local.patch](https://git.drupalcode.org/-/project/191993/uploads/5591cdf6801c901c1d6bc021f4975b60/ai_context-local.patch) [adr-ai-context-provider.md](https://git.drupalcode.org/-/project/191993/uploads/75577ae14… ### [Allow agents to opt-out of context auto-injection](https://git.drupalcode.org/project/ai_context/-/work_items/3586308) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Sprint 14, category::feature, needs ux review, priority::major Description: ## Problem/motivation Follow-up to: #3586268+s Some agents may want to use tools to pull in context as needed rather than have CCC auto-inject context (push). ## Solution Add an option for agents to opt-out of all CCC context injection. For now, let's add it as a toggle that defaults to enabled and is right above the Scope Subscriptions fieldset (outside of the fieldset). **Label:** Automatic context injection **Description:** If enabled, context will be ranked based on scope subscriptions and other criteria. The ranked context will be injected into the system prompt based on your maxi… ### [Clean up CCC test and documentation consistency before rc1](https://git.drupalcode.org/project/ai_context/-/work_items/3586299) State: opened | Updated: 2026-07-02 | 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.**_ **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:** - `… ### [Clean up CCC documentation and API consistency](https://git.drupalcode.org/project/ai_context/-/work_items/3586305) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | 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-02 | Author: Kristen Pol (kepol) | Assigned: Juan Correa (jucs7) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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… ### [Clean up CCC tooltip, truncation, and icon-only content](https://git.drupalcode.org/project/ai_context/-/work_items/3586302) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Abhishek Dhariwal (adaptative) | 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 !199 [Issue #3586302: Exposed tooltip/truncated content and icon meaning to assistive tech.](https://git.drupalcode.org/project/ai_context/-/merge_requests/199) | State: opened | Author: Joshua Fernandes (joshua1234511), 216 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **3. Tooltip, Truncation, And Icon-Only Content** **Priority:** High to Medium **Why group these together:** These UI patterns all expose important information through `data-ai-tooltip`, truncation, or visual icons. They should be reviewed as one accessibility pass. Includes: - Replace links in `#markup`. - Add new-tab accessible warnings and `rel`. - Fix CSS-only external-link indicator assumptions. ## Solution ### 3.1 Make tooltip-dependent content ava… ### [Clean up CCC JavaScript filter feedback](https://git.drupalcode.org/project/ai_context/-/work_items/3586303) State: opened | Updated: 2026-07-02 | 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 !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_… ### [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-02 | 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), 3420 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… --- MERGE REQUESTS (24h) --- ### [Issue #3586317: Fix Scheduler as optional and correct AI module version in docs.](https://git.drupalcode.org/project/ai_context/-/merge_requests/209) State: merged 2026-07-03 | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: 3586317-documentation-corrections-dependency-requirements-and-ai-module-version | 39 diff lines Description: ### Changes * Updated `docs/index.md` to move **Scheduler** and **Scheduler Content Moderation Integration** from the **Required modules** section to the **Optional modules** section, since `composer.json` lists them under `require-dev` and the module degrades gracefully when they are not installed. * Updated `README.md` to correct the supported AI module version. The documentation previously stated `^1.3.4`, while `composer.json` requires `drupal/ai ^1.4 || ^2`. The README now reflects the actual Composer requirement. ### [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) | Branch: 3586299-clean-up-ccc-test-and-documentation-consistency-before-rc1 | 286 diff lines Description: ## Summary Addresses sub-items **7.1**, **7.2**, and **7.4** from issue #3586299. ### 7.4 — Test environment documentation (`tests/README.md`) Updated the test documentation with guidance for the `SIMPLETEST_BASE_URL` and `SIMPLETEST_DB` environment variables when using DDEV. This removes the need for contributors to determine these values through trial and error. ### 7.2 — Replace documentation-only tests #### `AiContextScopeGlobalTest` Replaced five placeholder assertions (`assertTrue(TRUE, '...')`) with real unit-level assertions that exercise plugin behavior without requiring a Drupa… --- COMMITS (24h) --- - [26ba1513](https://git.drupalcode.org/project/ai_context/-/commit/26ba1513353d93d5f5acf48f1031fec1d80b4ca3) Issue #3586317: Fix Scheduler as optional and correct AI module version in docs. — Pravesh Poonia (2026-07-03T04:16:42.000+00:00) ======================================================================== ## [8] summariseModule:ai_search:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: marios anagnostopoulos (MariosAnagnostopoulos)". 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 Search

                then use

                ,

                ,

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

                  How can I help on this project?

                  " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Support keyword discovery in nested conditions.](https://git.drupalcode.org/project/ai_search/-/merge_requests/54) State: opened | Author: marios anagnostopoulos (MariosAnagnostopoulos) | Branch: 3584029-support-nested-keyword-queries | 116 diff lines Description: Closes #3584029 --- COMMITS (24h) --- (none) ======================================================================== ## [9] summariseModule:agui:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AG-UI (machine name: agui) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Bryan Sharpe (b_sharpe) [1]". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                  AG-UI

                  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). ### [Allow Data attributes in parsed HTML](https://git.drupalcode.org/project/agui/-/work_items/3590040) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !31 [Allow data attributes for dom purify.](https://git.drupalcode.org/project/agui/-/merge_requests/31) | State: merged 2026-07-02 | Author: Bryan Sharpe (b_sharpe), 42 diff lines Description: Many times the LLM has information that we could use to further enhance the user experience but we don't want displayed into the window. Data attributes would allow attaching this to the HTML. ### [Add events for failures](https://git.drupalcode.org/project/agui/-/work_items/3590038) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Ideally when their are issues/timeouts with response, we have the ability to react to this. For example, let's say the remote throws some sort of exception, we could react to this in a meaningful way to the user. ### [Add events for failures](https://git.drupalcode.org/project/agui/-/work_items/3590041) State: opened | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Ideally when their are issues/timeouts with response, we have the ability to react to this. For example, let's say the remote throws some sort of exception, we could react to this in a meaningful way to the user. We should introduce some event triggers for these cases. ### [Allow data attributes in parsed HTML](https://git.drupalcode.org/project/agui/-/work_items/3590039) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Many times the LLM has information that we could use to further enhance the user experience but we don't want displayed into the window. Data attributes would allow attaching this to the HTML. --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- - [65231fd2](https://git.drupalcode.org/project/agui/-/commit/65231fd2e0c95ac1a977e6f841b05ee3e9ea1037) Allow data attributes for dom purify. — Bryan Sharpe (2026-07-02T09:27:07.000-07:00) ======================================================================== ## [10] 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] Preserve HTML in streamed output (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586558 [2] Drupal Eval Commons umbrella (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586445 [3] RestrictToTopic guardrail: add semantic topic matching mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3584977 [4] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [5] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [6] 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 [7] Add an AI reranking processor for Search API (owned by the AI module) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586543 [8] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [9] Standardize thread/caller correlation on AI OTel spans (map tags to gen_ai.conversation.id) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586581 [10] Guardrail plugins only evaluate the last message (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579088 [11] Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586542 [12] Add rich-text image description support to AI Automators (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586478 [13] "AI Guardrails" or "AI Moderation Guardrails"? (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586471 [14] [Sprint5] Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3567006 [15] Auto-update default prompt entities on module updates, but only if the site has not customized them (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582350 [16] Create Provider Documentation Page for OpenAI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3533040 [17] Show last-modified date on documentation pages (mkdocs-git-revision-date-localized-plugin) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586541 [18] Rename Guardrails "RegExp guardrail" plugin to just "RegEx" (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586475 [19] Allow for manual override for new models from provider APIs in AI module settings (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3540491 [20] To save resources make it easy to reuse requests in manual testing (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3554853 [21] Adopt symfony/ai component v0.8 as platform provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586427 [22] PHP/JS Function to Engage the Chat with a prompt (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3534530 [23] Graceful error handling when an AI Provider is not setup correctly (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549312 [24] Truncate long input and output body in AI logs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556125 [25] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [26] Make AI API Explorer have chat history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3528949 [27] Make API explorer work with Symfony platform and legacy providers (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586470 [28] TypeError in AutomatorBaseAction::getAutomatorsOptions() when automating base fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586430 [29] Integrate ChatProcessor plugin system into AI Chatbot DeepChat block (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585077 [30] Add AI Assistant API ChatProcessor plugin (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585075 [31] AiPromptSubForm validates inline prompt against stale prompt type when multiple ai_prompt elements exist (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586548 [32] Improve ai_ckeditor UX when no provider modules are installed (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586549 [33] ai_prompt entity validation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549664 [34] Render images and videos inside the chatbot viewport (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586518 [35] Improve property limit widgets with proper enum/boolean support and fix FixedValue type mismatch (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586393 [36] Guardrail set - "Stop threshold" documentation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586477 [37] Create assisted structured output generation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556378 [38] Add "Request rate limit has been exceeded" error messages to AI Log (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3561399 [39] Allow Field Widget Actions to target a specific automator (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3571915 [40] Document streaming helping methods and add change record (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579930 [41] Assistant rewrites links poorly or hallucinates links sometimes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499610 [42] RestrictToTopic guardrail: add opt-in logging when a topic is flagged (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586486 [43] Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() (line 498 of /var/www/html/testu/web/core/lib/Drupal/Core/File/FileSystem.php) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3551584 [44] Match "Global Guardrails" config page title with "Global AI Guardrails" menu item (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586476 [45] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [46] Provider configuration on assistant, when run as agent, is not being sent to provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3543368 [47] Schema errors for an Automator field (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585104 [48] Update the AI Assistant documentation - 2.0.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549561 [49] Add optional prompt to ImageToVideoInput and clean up the class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586540 [50] Functioncall schema error with special model (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3573038 [51] Agent/Assistant Conversion Operations (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574046 [52] Show in the UI that an AI Agent is "Connected" to the Assistant (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574064 [53] backport: one-click link should show human name (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3580328 [54] ActionPluginDeriver crashes AI features when an action plugin lacks an instance class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585335 [55] Standardize "AI Automator" naming across UI [1.x] (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585382 [56] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [57] Resolve #3586558 "Preserve HTML in streamed output" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1734 [58] Issue #3584977: RestrictToTopic guardrail: add semantic topic matching mode. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1529 [59] Issue #3586543: Add AI reranking processor for Search API. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1729 [60] Issue #3586425: Resolve "ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1584 [61] Issue #3586542: Fix documentation staleness — automator-type ID drift,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1737 [62] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1679 [63] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1628 [64] Drupal AI UX meeting 29 June 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586592 [65] Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3584407 [66] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [67] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [68] Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3577241 [69] 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 [70] Add caller agent runner ID to tags in determineSolvability() (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3574487 [71] Issue #ai_agents-3578197:ContentEntitySeeder-Crashes-Double-Wrapped fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/291 [72] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [73] Issue #ai_agents-3577520: Streaming fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/290 [74] 3574487: Add caller agent runner ID to tags in determineSolvability(). (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/238 [75] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [76] WSOD AssertionError: assert(!$data instanceof ComponentInputsMapping) in assert() when requesting tmgmt translation job for some component trees (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591734 [77] `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 [78] Match multi-line string props without a matches-everything Regex marker, then remove JitSafeRegexValidator (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591762 [79] Suppress spurious getcwd() errors in PHPUnit CI job logs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591765 [80] Automate review using PHPStan: disallow short ternary (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591671 [81] Canvas should mark multi-line string props on SDCs and code components as translatable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591760 [82] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [83] Make tests pass again on Drupal 11.3: block config schema changed, `ComponentInputsEvolutionTest` needs to handle <=11.2 vs >11.2 differently (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591701 [84] Prepare for PHPStan 2.x (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3501228 [85] Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591457 [86] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [87] Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591721 [88] Prevention of publishing on Conflict in Canvas UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3587526 [89] 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 [90] 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 [91] Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591683 [92] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [93] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [94] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [95] Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591516 [96] Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3582390 [97] [DX regression] Canvas AI: Add 'YAML Path Equals' and 'YAML Path Exists' plugins (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3579681 [98] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [99] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [100] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [101] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [102] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [103] Issue #3575644: Inefficient RegexConstraint on StringLong fields causes "JIT stack limit reached" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [104] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [105] fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1296 [106] 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 [107] #3591764: Make Canvas test suite pass on 11.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [108] Fix high level translation settings experience for Canvas (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1303 [109] Resolve "Automate review using PHPStan: disallow short ternary" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1240 [110] chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1327 [111] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [112] fix(Page): #3591763 Publishing a page without a URL alias fails: its empty... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1331 [113] feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1193 [114] Resolve "Follow-up for #3591596: add PHPat rules for keeping `StagedLanguageConfigOverride` config entity type-agnostic" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1324 [115] #3591683: Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1322 [116] Issue #3591663: Fail validation for props that do not exist on a component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1330 [117] Draft: feat(Conflict detection): #3591591 Expand conflict resolution UI with... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1317 [118] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [119] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [120] Add layout fixture and tests for page builder agent (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1329 [121] Draft: Issue #3591668: Add text-based comparison of entities UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1266 [122] Sprint 13 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586293 [123] Documentation corrections: dependency requirements and AI module version (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586317 [124] [Meta] Fix CCC issues based on AI Best Practices results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586298 [125] [Feature] Add ExternalContextProviderInterface and ContextQueryInterface to support RAG/vector store integrations (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586289 [126] Provide real sample context items for end user use (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586279 [127] Gather CCC contribution stats for code and non-code contributions for release notes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586222 [128] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [129] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [130] Introduce explicit scope types and item inclusion modes; clarify selection in UI and docs (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586281 [131] Review and update CCC permissions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3574937 [132] Allow scope plugins to declare an optional icon for UI display (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586262 [133] Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586243 [134] Create multi-vocabulary taxonomy scope plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586237 [135] Create CCC video showing how to configure it (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586153 [136] Tune conditional subcontext logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586199 [137] Recruit CCC beta testers (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586235 [138] Add opt-in AiContextSelectionDiagnostics to selection results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586242 [139] CCC beta3 release planning (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586182 [140] 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 [141] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [142] Clean up CCC accessible interactive links and external links (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586301 [143] Clean up CCC cacheability and access metadata (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586300 [144] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [145] [Meta] CCC cleanup from beta3 code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [146] [Meta] CCC cleanup from beta3 code review findings for beta3 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586310 [147] Harden update 10011: empty-chunk guard and NULL-only backfill (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586316 [148] Syncing saves bypass all integrity constraints instead of only the global cap (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586313 [149] Item form discards user-entered scope when the subcontext feature is disabled (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586314 [150] Unset inherit_parent_scope silently wipes stored scope on save (data loss) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586312 [151] 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 [152] Evaluate Annotations module and how it might work with CCC (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586268 [153] Allow agents to opt-out of context auto-injection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586308 [154] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [155] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [156] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [157] Clean up CCC tooltip, truncation, and icon-only content (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586302 [158] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [159] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [160] Issue #3586317: Fix Scheduler as optional and correct AI module version in docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/209 [161] 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 [162] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [163] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [164] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [165] Issue #3586302: Exposed tooltip/truncated content and icon meaning to assistive tech. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/199 [166] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [167] 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 [168] 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 [169] Support keyword discovery in nested conditions. (ai_search, MR) — https://git.drupalcode.org/project/ai_search/-/merge_requests/54 [170] Allow Data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590040 [171] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590038 [172] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590041 [173] Allow data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590039 [174] Allow data attributes for dom purify. (agui, MR) — https://git.drupalcode.org/project/agui/-/merge_requests/31 --- MODULE SUMMARIES ---

                      AI (Artificial Intelligence)

                      Activity over the past 24 hours focused on expanding guardrail capabilities, improving documentation accuracy, and addressing streaming and CKEditor integration issues.

                      Work continued on semantic topic matching for the RestrictToTopic guardrail. MR !1529 adds a new mode allowing the guardrail to match LLM-identified topics by meaning rather than exact string comparison, addressing a limitation in RestrictToTopic guardrail: add semantic topic matching mode.

                      A new Search API reranking processor is under review in MR !1729 for Add an AI reranking processor for Search API (owned by the AI module). The processor plugin consumes the existing rerank operation type introduced in a closed issue, enabling generic re-ordering of search results with dedicated rerank models or LLMs across any Search API backend.

                      Rich-text image description support is being ported to the 2.x branch. MR !1679 for Add rich-text image description support to AI Automators enables automators to discover embedded images, generate AI descriptions, and include visual context in prompts—valuable for content moderation workflows.

                      Several documentation issues surfaced. MR !1737 addresses Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names, fixing filename mismatches in automator-type docs where plugin IDs drifted from documentation filenames. MR !1734 proposes a fix for Preserve HTML in streamed output, where streamed LLM outputs incorrectly insert backslash tags. MR !1584 remains open for ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models, tackling malformed streaming requests to Gemini 2.x endpoints.

                      Additional issues opened include guardrail UI consistency concerns, OpenTelemetry span correlation improvements, and various UX refinements around naming and configuration validation.

                      How can I help on this project?

                      Review MR !1529 for semantic topic matching in the RestrictToTopic guardrail. Review MR !1729 for the new Search API reranking processor. Pick up RestrictToTopic guardrail: add opt-in logging when a topic is flagged, which has no open MR and proposes a straightforward logging enhancement.

                      Contributors: Abhinav Jha (ajabhinavjha30), Abhisek Mazumdar (abhisekmazumdar), Ahmad Khader (Ahmad-Khader), Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB), Marcus Johansson (Marcus_Johansson) ---

                      Drupal AI Initiative

                      No merge requests or commits were landed during this period. Activity focused on planning and design discussions.

                      A Drupal AI UX meeting 29 June 2026 issue was updated with notes covering two feature areas. For the Canvas chat functionality, decisions were made around control flow: the stop button will become a play/pause toggle, with a separate resume action that re-prompts the agent to continue generation (enabled by a one-loop-per-request architecture). The "Stop and undo" control is being renamed to "Stop and revert all changes" to clarify it performs a milestone revert of an entire turn while preserving redo capability, distinct from native undo operations. For the AI Content Review feature, the team discussed a criteria-creator UI that will generate markdown prompts for the agent, including guidelines, per-criterion thresholds, and scored examples categorized as good, medium, or bad. Different scoring methods will have distinct user interfaces.

                      How can I help on this project?

                      • Review the Canvas chat and AI Content Review UX decisions in the meeting notes and provide feedback on the proposed interaction patterns.
                      • Check the issue queue for unassigned tickets related to agent prompting or content review APIs that need implementation work.
                      ---

                      AI Integration - ECA

                      No merge requests were completed or commits pushed during this period. The project remains focused on the Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA feature, which proposes a new submodule to expose AI request and response lifecycle events as first-class ECA events, conditions, and actions. This would allow site builders to intercept and react to AI provider calls, streaming responses, and failure conditions through the ECA framework without writing custom code. The issue is currently assigned but shows no recent activity in terms of commits or merge requests during the reporting period.

                      How can I help on this project?

                      The AI ECA Interceptor feature (issue 3584407) is assigned but appears stalled with no recent commits. Contributors could review the current state of the assigned work or offer to collaborate on implementing the event subscriber integration and ECA plugin definitions needed for the interceptor submodule.

                      ---

                      Anthropic Provider

                      A significant merge request expanding the module's capabilities was opened during the period. Issue #3607960: Add token counting, citations, and context management introduces three new opt-in features as part of the native SDK integration meta-issue. The MR adds a public countTokens() method to AnthropicProvider, citation extraction functionality, and context management including conversation compaction and editing. All features are configurable via new admin form sections and default to off, preserving existing chat behavior when disabled. The merge request touches 1823 lines and awaits review.

                      How can I help on this project?

                      • Review the open token counting, citations, and context management MR, testing the new countTokens() API and opt-in admin settings to verify backward compatibility.
                      • Test the citation extraction and context compaction features with real-world Anthropic API scenarios to validate functionality.

                      Contributors: Carlos Ospina (camoa)

                      ---

                      AI Agents

                      The caller agent runner ID to tags in determineSolvability() merge request was merged, closing Add caller agent runner ID to tags in determineSolvability(). This enhancement enables custom AiProvider implementations to detect via the $tags array whether a chat() call originates from a root agent loop or from a sub-agent/tool execution context, addressing a key observability gap.

                      Two new merge requests were opened addressing operational issues. ContentEntitySeeder crash fixes (330 lines) targets double-wrapped content entity seeding crashes, while streaming fixes (280 lines) addresses streaming configuration issues with a setStreaming approach.

                      Feature development continues on tool execution constraints. Make it possible to restrict the order of tools during agent executions has an open merge request (!252, 1815 lines) exploring per-tool execution ordering and conditions like "only once" or "first/last" to prevent illogical tool sequences.

                      How can I help on this project?

                      Review MR !252 on tool ordering constraints to validate the API design. Test MR !291 and MR !290 for entity seeding and streaming regressions. Contribute to design discussions on the export/sync plugin system for external platforms.

                      Contributors: Alin Ameiroaie (aalin) [1], Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511)

                      ---

                      Drupal Canvas

                      A significant bug fix was merged addressing a white-screen-of-death error that occurred when requesting TMGMT translation jobs for component trees containing non-text props like dates, booleans, or numbers. The WSOD AssertionError issue was resolved by correcting assertion logic in shape matching and translation handling.

                      The project introduced automated layout fixtures and tests for the Canvas AI page builder agent in issue 3591457, streamlining validation of YAML output and reducing the manual testing burden when agent system prompts change.

                      Three developer experience improvements landed: PHPStan now disallows short ternary operators to enforce stricter comparisons (issue 3591671), multi-line string props on SDCs and code components are now correctly marked as translatable (issue 3591760), and PHPat rules were added to keep StagedLanguageConfigOverride config entity type-agnostic (issue 3591721). A cleanup task removed unnecessary config schema exclusions from ApiAutoSaveControllerTranslationTest following earlier core schema fixes.

                      Conflict detection during page publishing was merged via issue 3587526, preventing publication of conflicted items and adding visual indicators in the Canvas UI.

                      Work continues on Drupal 11.4 compatibility with an open MR for issue 3591764, and several bug fixes remain in review including an access-check ordering issue in ApiAutoSaveController::post() and a fatal error in PageRegion::createFromBlockLayout() for blocks with context mappings.

                      How can I help on this project?

                      Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Abhishek Dhariwal (adaptative), AKHIL BABU (AkhilBabu) [1], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Fons Vandamme (f0ns), Gábor Hojtsy (goba), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR) [1], Prabhavathi Vanipenta (prabha1997), Ravi Maniyar (ravi.maniyar.123), Wim Leers (wimleers) [4]

                      ---

                      Context Control Center (CCC)

                      Documentation corrections were merged addressing two user-facing errors: Scheduler and Scheduler Content Moderation Integration are now correctly marked as optional in docs/index.md, and the AI module version requirement in README.md now matches composer.json (^1.4 || ^2). This work closed Documentation corrections: dependency requirements and AI module version.

                      Sprint 13 planning continued with Sprint 13 CCC roadmap updates, sprint planning, and issue triage. A pre-release codebase review identified issues now split between two meta issues: [Meta] CCC cleanup from beta3 code review findings for beta3 and [Meta] CCC cleanup from beta3 code review findings for beta4. Several child issues were opened and closed during the period, including Harden update 10011: empty-chunk guard and NULL-only backfill, Syncing saves bypass all integrity constraints instead of only the global cap, Item form discards user-entered scope when the subcontext feature is disabled, and Unset inherit_parent_scope silently wipes stored scope on save (data loss). These issues appear to relate to work in progress on subcontext scope inheritance.

                      Multiple merge requests remain open addressing accessibility, cacheability, and DX cleanup as part of [Meta] Fix CCC issues based on AI Best Practices results.

                      How can I help on this project?

                      Review the open merge request for Usage record page renders context item content without an entity access check (MR !208). Test and provide feedback on the open accessibility improvements in Clean up CCC tooltip, truncation, and icon-only content (MR !199). Review the scope plugin persistence API changes in Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection once unblocked.

                      Contributors: Joshua Fernandes (joshua1234511), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) [1], Tamas Balog (tbalog)

                      ---

                      AI Search

                      A new merge request was opened to Support keyword discovery in nested conditions. The branch introduces changes to handle keyword queries within nested conditions, adding 116 lines of diff. The merge request is currently awaiting review.

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

                      How can I help on this project?

                      Contributors: marios anagnostopoulos (MariosAnagnostopoulos) ---

                      AG-UI

                      AG-UI saw consolidation activity over the reporting period. The Allow data attributes for dom purify merge request was merged, enabling HTML data attributes to pass through DOM Purify sanitization. This allows LLM-provided metadata to be attached to rendered HTML elements without displaying it directly to users, enhancing opportunities for client-side behavior enrichment.

                      Two closed issues related to data attributes in parsed HTML were resolved alongside this merge. A separate issue remains open for adding events for failures, which would provide event triggers to handle remote exceptions and timeouts gracefully. This would enable more meaningful user feedback when the backend encounters errors.

                      How can I help on this project?

                      The Add events for failures issue is open with no merge request. Consider implementing event triggers for remote exceptions and timeouts. Review the existing DOM Purify integration to ensure data attributes work as intended across different HTML contexts.

                      Contributors: Bryan Sharpe (b_sharpe) [1]

                      ======================================================================== ## [11] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 0 Judge flags: 5 ======================================================================== ## [12] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Abhinav Jha (ajabhinavjha30), Abhisek Mazumdar (abhisekmazumdar), Ahmad Khader (Ahmad-Khader), Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB), Marcus Johansson (Marcus_Johansson)". 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). ### [Preserve HTML in streamed output](https://git.drupalcode.org/project/ai/-/work_items/3586558) State: opened | Updated: 2026-07-02 | Author: Sven Decabooter (svendecabooter) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, category::bug, priority::normal Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1734 [Resolve #3586558 "Preserve HTML in streamed output"](https://git.drupalcode.org/project/ai/-/merge_requests/1734) | State: opened | Author: Ahmad Khader (Ahmad-Khader), 433 diff lines Description: ## Summary As reported in https://git.drupalcode.org/project/ai_translate/-/work_items/3585526, there seems to be an issue with HTML processing in streamed outputs. I wasn't able to look into the issue much closer, but the proposed fix seems to imply changes to the AI core module. ## Environment - Drupal version: 11.3.10 - Paragraphs: 8.x-1.20 Original Issue When translating basic pages, the LLM inserts \ tags after other tags like \ Example input: ``` 'De Geheimen van het Hof' is een reeks van zes speurtochten voor klassen: van het 1ste leerjaar tot en met het 6de leerjaar. De focus lig… ### [Drupal Eval Commons umbrella](https://git.drupalcode.org/project/ai/-/work_items/3586445) State: opened | Updated: 2026-07-02 | Author: George Kastanis (zorz) | Assigned: unassigned | Labels: category::plan, priority::normal, state::rtbc Description: ## TL;DR Four Drupal AI projects (`drupal/ai`, `ai_eval`, `ai_agents_test`, `ai_best_practices`) are each working on pieces of the same puzzle: how to write, run, and share evals for AI features. Today there is no shared format for eval cases or results, so the same work risks being redone in incompatible ways. This umbrella suggests splitting the problem into five layers and agreeing on the lowest layer first, so the other layers can move in parallel without one blocking the rest. Nothing in your current module has to change today; the proposal is additive, and a module adopts each layer whe… ### [RestrictToTopic guardrail: add semantic topic matching mode](https://git.drupalcode.org/project/ai/-/work_items/3584977) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Needs manual testing, aiCoreModule 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: Add a semantic matching mode to the RestrictToTopic guardrail so LLM-identified topics are matched against the configured list by meaning rather than exact string equality. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The restrict_to_topic guardrail in src/Plugin/AiGuardrail/RestrictToTopic.php asks an LLM which of the configured topics are present in the input text, then uses an exact-string in_… ### [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-02 | Author: Ricardo Castañeda (cadence96) | Assigned: Ricardo Castañeda (cadence96) | Labels: category::bug, priority::normal, state::accepted 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… ### [Create plugins for interacting with multimedia in AI](https://git.drupalcode.org/project/ai/-/work_items/3463843) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar), Alphons Jaimon (AJV009) | 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 … ### [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-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, aiCoreModule, category::task 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… ### [Add an AI reranking processor for Search API (owned by the AI module)](https://git.drupalcode.org/project/ai/-/work_items/3586543) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, aiCoreModule, category::feature Description: ### Problem/Motivation Reranking improves the precision of semantic search by re-ordering an initial result set with a dedicated rerank model (or a general-purpose LLM). AI Core already added a `rerank` operation type in [#3488114](https://www.drupal.org/project/ai/issues/3488114) (now closed), but nothing in the ecosystem consumes it yet. [#3557901 — Add Reranking Support to AI Search](https://git.drupalcode.org/project/ai_search/-/work_items/3557901) proposed adding reranking directly to AI Search. On reflection it makes more sense for the **AI module itself to own this**: reranking is a g… ### [ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models](https://git.drupalcode.org/project/ai/-/work_items/3586425) State: opened | Updated: 2026-07-02 | Author: josecarlosmedero | 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 !1584 [Issue #3586425: Resolve "ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models"](https://git.drupalcode.org/project/ai/-/merge_requests/1584) | State: opened | Author: Marcus Johansson (Marcus_Johansson), 34 diff lines Description: **Problem / Motivation** `AiRequest.php` calls `setStreamedOutput(TRUE)` for all providers. The PHP client `gemini-api-php` sends a malformed request body when calling `streamGenerateContent` against Gemini 2.x models, resulting in `400 Bad Request`. The non-streaming endpoint `generateContent` works correctly with the same payload. The error in logs: `Error invoking model response: Client error: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent resulted in a 400 Bad Request response` Confirmed: the identical payload sent to `generateConten… ### [Standardize thread/caller correlation on AI OTel spans (map tags to gen_ai.conversation.id)](https://git.drupalcode.org/project/ai/-/work_items/3586581) State: opened | Updated: 2026-07-02 | Author: George Kastanis (zorz) | Assigned: unassigned | Labels: automation::error Description: ## Problem Since project/ai_agents#3574487 landed, everything needed to reconstruct the full trail of a conversation (user, agent, and sub-agent calls) is present on the provider events. But the only way a consumer can get at it is by parsing magic prefixes out of the free-form `tags` string array on the span: | tag prefix | stamped by | meaning | |---|---|---| | `ai_assistant_thread_*` | `ai_assistant_api` (`AiAssistantApiRunner`) | assistant conversation, shared across turns | | `ai_agents_runner_*` | `ai_agents` (`AgentHelper`) | this agent run | | `ai_agents_caller_runner_*` | `ai_agents… ### [Guardrail plugins only evaluate the last message](https://git.drupalcode.org/project/ai/-/work_items/3579088) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, Needs manual testing Description: >>> [!note] Migrated issue Reported by: [abhisekmazumdar](https://www.drupal.org/user/3557964) Related to !1467 >>> [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 Both RegexpGuardrail and RestrictToTopic only inspect the last message in a conversation. The full chat history is passed in via ChatInput, but both plugins call end($messages) and evaluate that single message only. In a mult… ### [Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names](https://git.drupalcode.org/project/ai/-/work_items/3586542) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiAutomators, category::task, priority::normal, state::needsReview Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1737 [Issue #3586542: Fix documentation staleness — automator-type ID drift,...](https://git.drupalcode.org/project/ai/-/merge_requests/1737) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 340 diff lines Description: ## Description A staleness audit of the module documentation under `docs/` (all pages untouched for 6+ months) found a number of pages that have drifted from the current code. Each finding below was verified against source — not just flagged by commit date — so these are confirmed mismatches, not merely old pages. The bulk of the breakage is **filename/ID drift** in the `ai_automators` automator-type pages: the doc filename no longer matches the plugin's `#[AiAutomatorType(id: ...)]`, usually because the code gained a `_field` / `_long` suffix, an id rename, or a typo. No automator plugins w… ### [Add rich-text image description support to AI Automators](https://git.drupalcode.org/project/ai/-/work_items/3586478) State: opened | Updated: 2026-07-02 | Author: Levente Besenyei (LeventeB) | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, category::feature Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1628 [Issue #3586478: "Add rich-text image description support to AI Automators"](https://git.drupalcode.org/project/ai/-/merge_requests/1628) | State: opened | Author: Levente Besenyei (LeventeB), 2630 diff lines Description: ## Summary Add optional rich-text image description support to AI Automators for AI-based formatted text fields, including metadata storage for generated image descriptions. Related/source issue: https://git.drupalcode.org/project/ai_initiative/-/work_items/3585695 ## Problem AI Automators can use formatted text as input, but images embedded in that text are currently ignored unless they are already available through a separate image/media field. This makes automations less accurate for content that depends on visual context (for example: summaries, quality checks, and editorial pre-screen… ### ["AI Guardrails" or "AI Moderation Guardrails"?](https://git.drupalcode.org/project/ai/-/work_items/3586471) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::minor, state::needsReview Description: What it the proper name for this functionality? In the AI menu, it is listed as "AI Moderation Guardrails", but on configuration pages, it is just "AI Guardrails" - it should be consistent, IMHO. Also - and this is probably a separate issue - but why do all the AI menu items use title case (first letter of each word capitalized) while the rest of Drupal is pretty much standardized on sentence case (only the first letter of the first word is capitalized)? See https://www.drupal.org/docs/develop/user-interface-standards/interface-text#interface-text-title-link-heading -mike ### [[Sprint5] Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat)](https://git.drupalcode.org/project/ai/-/work_items/3567006) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: harivansh sharma (harivansh) | Labels: AI Initiative Sprint, Has Testing Steps, aiAgent, category::task 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: Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat) Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation In addition to migrating the core abstraction layer and vector database support, we want to evaluate whether Drupal AI Agents (and related chat functionality) can be migrated to Symfony AI Agents. While this is not a hard requirement for switching frameworks, it is … ### [Auto-update default prompt entities on module updates, but only if the site has not customized them](https://git.drupalcode.org/project/ai/-/work_items/3582350) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Prakash (shubham.prakash) | Labels: aiCoreModule, category::feature, priority::minor, state::needsWork Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1447 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Auto-update default prompt entities on module updates, but only if the site has not customized them Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation When the AI module or its submodules ship updated default prompts (e.g. improved wording, new variables, bug fixes in prompt text), existing installations do not receive these updates. The prompt entities are config entities that are on… ### [Create Provider Documentation Page for OpenAI](https://git.drupalcode.org/project/ai/-/work_items/3533040) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation Currently there is no information about providers on https://project.pages.drupalcode.org/ai, except for https://project.pages.drupalcode.org/ai/1.1.x/providers/matris/ This makes it hard to know what to choose, why and how to set it up. We need detailed pages for each provider that we manage, or that is known to the community, so there is one place to look for information about what to use and where to use it. This task is for createing the OpenAI details documentation pag… ### [Show last-modified date on documentation pages (mkdocs-git-revision-date-localized-plugin)](https://git.drupalcode.org/project/ai/-/work_items/3586541) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::minor, state::needsReview Description: ## Problem / Motivation The documentation site ([project.pages.drupalcode.org/ai](https://project.pages.drupalcode.org/ai/)) does not show when each page was last updated. Because the AI module moves quickly, readers have no easy way to judge whether a given page reflects the current state of the code, or whether it may be stale. ## Proposed resolution Add the [`mkdocs-git-revision-date-localized-plugin`](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) so that every documentation page displays a "last updated" date derived from the file's git history. The Material for… ### [Rename Guardrails "RegExp guardrail" plugin to just "RegEx"](https://git.drupalcode.org/project/ai/-/work_items/3586475) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::minor, state::needsReview Description: As of 1.4.0, the three guardrail plugins are: 1. Restrict to Topic 2. RegExp guardrail 3. Input Length Limit I think "RegExp guardrail" should be changed to just "RegEx" because: 1. "RegEx" is much more commonly used than "RegExp". 2. If we're going to use "guardrail" in the label, then we should use it in all of the plugins. But, I don't think it is necessary to do that, so let's just keep things consistent and remove it. -mike ### [Allow for manual override for new models from provider APIs in AI module settings](https://git.drupalcode.org/project/ai/-/work_items/3540491) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: aiCoreModule, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [andywaldrop](https://www.drupal.org/user/2488592) Related to !1526 >>> Problem/Motivation Currently in the AI module suite of settings, there are many picklist or select box dropdowns that allow you to select a model from a prebuilt list of options. These lists are very helpful for a non-technical user to select a specific model from the LLM provider module that a user has enabled and the operator function (text-to-speech, embeddings, chat, etc.) The challenge that can arise is that when a provider releases a new model the Drupal user has to wait f… ### [To save resources make it easy to reuse requests in manual testing](https://git.drupalcode.org/project/ai/-/work_items/3554853) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Ted Bowman (tedbow) | Labels: aiTest, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [tedbow](https://www.drupal.org/user/240860) Related to !979 >>> Problem/Motivation This comes from testing and development of Canvas AI but also should apply to other uses If I am testing/developing Canvas AI I may be working with a file like /canvas/ui/src/components/aiExtension/AiWizard.tsx where I am editing Javascript and that will invoke remote AI call is not super important, expect that it should use reasonable results. I might enter the prompt, "create a hello world code component" many many times. Every time I do this request it makes a re… ### [Adopt symfony/ai component v0.8 as platform provider](https://git.drupalcode.org/project/ai/-/work_items/3586427) State: opened | Updated: 2026-07-02 | Author: Wolfgang Ziegler (fago) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview, v2.x-dev Description: [#3574187] introduced symfony/ai component in v0.6. Meanwhile 0.8 has been released, introducing its own provider abstraction: a symfony [ProviderInterface](https://github.com/symfony/ai/pull/1923). Based upon @mxr576's [plan](https://git.drupalcode.org/project/ai/-/work_items/3574187#note_809810), we want to adopt the new abstraction in this issue. Overview over the concepts, citing the Symfony PR: > **ProviderInterface** encapsulates what PlatformFactory::create() currently produces — a complete, self-contained connection to a single inference backend (model clients, result converters, c… ### [PHP/JS Function to Engage the Chat with a prompt](https://git.drupalcode.org/project/ai/-/work_items/3534530) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Anjali Prasannan (AnjaliPrasannan) | Labels: aiChatbot, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [robloach](https://www.drupal.org/user/61114) Related to !725 >>> Problem/Motivation There are times when you'd want the chat to engage automatically, with a given prompt for the user. As an example: a user clicks a button, and Drupal provides a prompt that is sent to the Chat Window, and sent automatically so that the user can continue conversationally. While this is a feature in Deepchat, on the Drupal-side we don't have an easy way to leverage it. Proposed resolution Add a Drupal/PHP API that could send a prompt over to the initial Deepchat setti… ### [Graceful error handling when an AI Provider is not setup correctly](https://git.drupalcode.org/project/ai/-/work_items/3549312) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !923 >>> Problem/Motivation On the search server setup page, the whole page goes WSOD if one of the providers is not setup correctly and doesn't handle errors correctly. An example of this is the Gemini provider, when no key is setup. We should not make it impossible to save any other type of Search API server, just because one provider is not setup correctly. Steps to reproduce (required for bugs, but not feature requests) Install the Gemini Provider. Install the Search API and Sear… ### [Truncate long input and output body in AI logs](https://git.drupalcode.org/project/ai/-/work_items/3556125) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shivam Sen (shivamsen_12579) | Labels: aiObservability, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [murz](https://www.drupal.org/user/157092) Related to !1468 >>> Problem/Motivation Providing the content of the AI requests input and output data is very useful, but for some requests, it can be huge, so storing the full body will increase the overall log storage size. Proposed resolution Usually, only the starting text is meaningful in logs, not the whole text. And for binary input/output, the content is usually not needed, so we can exclude it from logging, and store, for example, only the total size of the content, instead. To resolve this, woul… ### [Placeholders not available when using advanced (token) mode](https://git.drupalcode.org/project/ai/-/work_items/3525367) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::task, priority Description: >>> [!note] Migrated issue Reported by: [jhedstrom](https://www.drupal.org/user/208732) Related to !621 !1423 !1352 >>> --- AI TRACKER METADATA --- Update Summary: Needs to fix AnnMary’s feedback. Check-in Date: MM/DD/YYYY (US format) [When we should see progress/get an update] Due Date: MM/DD/YYYY (US format) [When the issue should be fully completed] Blocked by: [#XXXXXX] (New issues on new lines) Additional Collaborators: @username1, @username2 AI Tracker found here: https://www.drupalstarforge.ai/ --- END METADATA --- Problem/Motivation The advanced automator type that allows to… ### [Make AI API Explorer have chat history](https://git.drupalcode.org/project/ai/-/work_items/3528949) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiApiExplorer, category::task, priority Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1049 >>> Problem/Motivation This is dependent on #3528948: Add chat_history form element. When the chat history form field is available, we should add it to the Chat explorer in AI API Explorer and remove our custom solutions there. Proposed resolution Remove the current way of loading text and images. Add the chat_history form field instead System message should stay as it is. > Related issue: [Issue #3528948](https://www.drupal.org/node/3528948) ### [Make API explorer work with Symfony platform and legacy providers](https://git.drupalcode.org/project/ai/-/work_items/3586470) State: opened | Updated: 2026-07-02 | Author: Wolfgang Ziegler (fago) | Assigned: Wolfgang Ziegler (fago) | Labels: Has Testing Steps, priority::normal, state::needsReview, v2.x-dev Description: ### Motivation Before doing further development, we need to make sure we are able to test stuff well manually with API explorer. ### Proposal Make API-explorer work with both Symfony platform and legacy-providers, so both can be tested with it. ### [TypeError in AutomatorBaseAction::getAutomatorsOptions() when automating base fields](https://git.drupalcode.org/project/ai/-/work_items/3586430) State: opened | Updated: 2026-07-02 | Author: Pieter Frenssen (pfrenssen) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview Description: ## Summary Currently `AutomatorBaseAction::getAutomatorsOptions()` requires a `$bundle` to be passed in to retrieve the options for a field. The bundle is available for regular fields added through the field API, but base fields are not associated with a bundle (since base fields apply to all bundles). This can cause a fatal `TypeError` to be thrown when calling code cannot supply a bundle. For example when `AutomatorBaseAction::isAvailable()` is called for an automator associated with a base field. ## Steps to reproduce 1. Create an "Article" node type. 2. Enable the [Base Field Override… ### [Integrate ChatProcessor plugin system into AI Chatbot DeepChat block](https://git.drupalcode.org/project/ai/-/work_items/3585077) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: David Galeano (gxleano) | Labels: AI Initiative Sprint, AI Innovation, aiChatbot, category::feature Description: >>> [!note] Migrated issue Reported by: [ahmad khader](https://www.drupal.org/user/3727855) Related to !1497 >>> [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 Integrate the ChatProcessor plugin system (added in #3492940) into the AI Chatbot module's DeepChat block. This allows site builders to select which ChatProcessor plugin handles chat interactions, decoupling the chatbot UI from … ### [Add AI Assistant API ChatProcessor plugin](https://git.drupalcode.org/project/ai/-/work_items/3585075) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: David Galeano (gxleano) | Labels: AI Initiative Sprint, AI Innovation, aiChatbot, category::feature Description: >>> [!note] Migrated issue Reported by: [ahmad khader](https://www.drupal.org/user/3727855) Related to !1496 >>> [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 Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Create an AiAssistantApiProcessor ChatProcessor plugin tha… ### [AiPromptSubForm validates inline prompt against stale prompt type when multiple ai_prompt elements exist](https://git.drupalcode.org/project/ai/-/work_items/3586548) State: opened | Updated: 2026-07-02 | Author: Javier Destefanis (javierdestefanis) | Assigned: unassigned | Labels: Has Testing Steps, category::bug, priority::normal, state::needsReview Description: ## Summary When a settings form contains multiple `#type => ai_prompt` elements with different prompt types, inline prompt creation can validate against the wrong prompt type. We reproduced this with four prompt selectors on the same config form: * `content_audit_preview_system`, no required variables * `content_audit_preview_user`, requires `{PAGE_CONTENT}` and `{VISITOR_QUESTION}` Note: Creating the same `content_audit_preview_system` prompt from the standalone Prompt Entities admin form works correctly, so the prompt type config itself is valid. Temporary logging inside `AiPromptSubfor… ### [Improve ai_ckeditor UX when no provider modules are installed](https://git.drupalcode.org/project/ai/-/work_items/3586549) State: opened | Updated: 2026-07-02 | Author: Ricardo Castañeda (cadence96) | Assigned: unassigned | Labels: Has Testing Steps, Needs UX review, category::feature, priority::minor Description: ## Summary `ai_ckeditor` currently assumes that at least one provider module is installed. If no provider module (such as `ai_provider_openai`) is available, the CKEditor AI functionality does not work and may result in confusing behavior or errors. The module could provide clearer feedback to site builders or explicitly require provider modules. ## Problem `ai_ckeditor` can be enabled without installing any provider modules. From a site builder perspective, the module appears to be configured correctly because the CKEditor buttons are available, but attempting to use them fails. This c… ### [ai_prompt entity validation](https://git.drupalcode.org/project/ai/-/work_items/3549664) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Sven Decabooter (svendecabooter) | Labels: aiCoreModule, category::feature, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [svendecabooter](https://www.drupal.org/user/35369) Related to !925 >>> Problem/Motivation This came up as part of the refactoring for #3549153: Translate: use prompt entities instead of custom configurations. In that issue, we transform regular textual prompts being stored in config, to a reference to an ai_prompt config entity, that stores the prompt value and variables information. In \Drupal\ai_translate\Form\AiTranslateSettingsForm::validateForm() there was already logic to validate that the prompt text has a minimal length of 50 characters. I'… ### [Render images and videos inside the chatbot viewport](https://git.drupalcode.org/project/ai/-/work_items/3586518) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::normal, state::needsReview Description: ## Problem/Motivation When the AI chatbot renders a response that contains images or videos, the media is not constrained to the chatbot's viewport. Instead it currently shows/overflows everywhere, breaking out of the chat window and affecting the surrounding page layout. ## Steps to reproduce 1. Enable and configure `ai_chatbot`. 2. Trigger a chatbot response that includes an image or a video (e.g. markdown image syntax or an embedded video). 3. Observe that the media is rendered outside the bounds of the chatbot viewport rather than inside it. ## Proposed resolution The chatbot should r… ### [Improve property limit widgets with proper enum/boolean support and fix FixedValue type mismatch](https://git.drupalcode.org/project/ai/-/work_items/3586393) State: opened | Updated: 2026-07-02 | Author: Ahmad Khader (Ahmad-Khader) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, sprint-candidate, state::needsReview Description: [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Added a new PropertyLimitWidgetHelper class with shared enum/boolean detection, widget building, value extraction, and type casting logic. Refactored ToolsExplorer to use it. Check-in Date: MM/DD/YYYY [/Tracker]Problem/Motivation The Tools Explorer rendered a plain <textarea> for every property's "Values" field, even for properties with known enum constraints or boolean type — users had to type valid option strings manually. Enum detection + widget building was duplicated across ToolsExplorer, and… ### [Guardrail set - "Stop threshold" documentation](https://git.drupalcode.org/project/ai/-/work_items/3586477) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::normal, state::needsReview Description: I'm not seeing any documentation for AI guardrail sets "Stop threshold" configuration. I understand the idea behind it, but some documentation or additional help text would be welcome. After reviewing the code (with Claude's help), it seems that at the current time, the 3 plugins that are included can all ever just contribute 0 or 1 to the aggregate score. Therefore, _any_ value of "Stop Threshold" between 0 and 1 is equivalent. I also understand that other guardrail plugins can be developed that provide fractional scores. -mike ### [Create assisted structured output generation](https://git.drupalcode.org/project/ai/-/work_items/3556378) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Ann Mary Sruthy (annmarysruthy) | Labels: aiAgent, category::feature, priority, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1245 >>> Problem/Motivation Currently we have a flag for providers that offers the support of running the mix of tools and structured output, see #3550163: Add new flag ChatCombinedToolsAndStructure. However it is a known problem, that some providers or models does not allow for this. This means that an agent will never be able to return a structured output, since its using tools. With the Tool API and its outputted structure and the cool possibilities with tools like FlowDrop or ECA… ### [Add "Request rate limit has been exceeded" error messages to AI Log](https://git.drupalcode.org/project/ai/-/work_items/3561399) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Goel (shubhamgoel) | Labels: aiLogging, category::task, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [ultimike](https://www.drupal.org/user/51132) Related to !1116 >>> [Tracker] Update Summary: Add "Request rate limit has been exceeded" error messages to AI Log Short Description: It would be useful for error messages of this type to be included in the log, including any relevant response header data. Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Currently, the errors like "Request rate limit has been exceeded" to not appear in the AI Log. I think it would be useful to in… ### [Allow Field Widget Actions to target a specific automator](https://git.drupalcode.org/project/ai/-/work_items/3571915) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAutomators, category::bug, priority::minor Description: >>> [!note] Migrated issue Reported by: [oneliner](https://www.drupal.org/user/1781526) >>> [Tracker] Update Summary: Fix enables multiple field widget action buttons to run only their selected automator. Short Description: Field widget actions trigger all automators on a field instead of the selected one. Check-in Date: 02/06/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation It’s possible (though not exposed by the default UI) to configure multiple AI automators for the same field by duplicating the automator config entity with a… ### [Document streaming helping methods and add change record](https://git.drupalcode.org/project/ai/-/work_items/3579930) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1433 >>> [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 Since 1.2.x we are using doIterate as the method that is exposed to the providers to use for their stream iterators. This is not documented and no change record can be found for this. We should add that when targetting 1.2.0 … ### [Assistant rewrites links poorly or hallucinates links sometimes](https://git.drupalcode.org/project/ai/-/work_items/3499610) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Alphons Jaimon (AJV009) | Labels: aiAssistantsApi, category::bug, priority::major, state::needsWork Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation The Assistants API currently is running different plugins - they can be Agents or RAG (or something in-house). So what happens is that the Assistant API gets a question about something for RAG or instruction to do something for Agents and they action plugin then goes to work and finds information or tells the Assistant it is done. In both those examples the URI's it gives back are deterministic and 100% hallucination free. RAG responses comes from the field in Search API an… ### [RestrictToTopic guardrail: add opt-in logging when a topic is flagged](https://git.drupalcode.org/project/ai/-/work_items/3586486) State: opened | Updated: 2026-07-02 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, aiLogging, category::feature Description: ## Summary Add an optional setting to the **Restrict to Topic** guardrail (`RestrictToTopic`) that logs to the standard Drupal log whenever the guardrail flags a topic. The setting is a checkbox, **disabled by default**, so existing behaviour is unchanged unless a site builder opts in. ## Problem The `RestrictToTopic` guardrail (`web/modules/custom/ai/src/Plugin/AiGuardrail/RestrictToTopic.php`) currently stops a request when invalid topics are present or no valid topics are found, but it does not record *that* it restricted the request anywhere observable. There is no way to see in the log… ### [Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() (line 498 of /var/www/html/testu/web/core/lib/Drupal/Core/File/FileSystem.php)](https://git.drupalcode.org/project/ai/-/work_items/3551584) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: aiApiExplorer, category::bug, priority::normal, state::needsWork Description: >>> [!note] Migrated issue Reported by: [fishfree](https://www.drupal.org/user/175299) >>> For ImageToVideo OperationType, the following lines will throw exception:   ...    $mp4_binary_string = file_get_contents($video_url);  $video_file = new VideoFile($mp4_binary_string, 'video/mp4', 'alibabacloud' . md5($video_url) . '.mp4');return new ImageToVideoOutput([$video_file], $response, ['source_url' => $video_url]);The calling stack is as below: Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() … ### [Match "Global Guardrails" config page title with "Global AI Guardrails" menu item](https://git.drupalcode.org/project/ai/-/work_items/3586476) State: opened | Updated: 2026-07-02 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Has Testing Steps, priority::minor, state::needsReview Description: I like consistency - luckily, it is also good UX. The menu link is "Global AI Guardrails" while the page title is just "Global Guardrails". Let's pick one. -mike ### [Separate AI Chatbot documentation from AI Assistant API](https://git.drupalcode.org/project/ai/-/work_items/3538657) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, category::task, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [kristen pol](https://www.drupal.org/user/8389) >>> Problem/Motivation Follow-up to: #3492940: Add ChatProcessor To split out the AI Chatbot documentation from AI Assistant API docs. See context in comments 2 and 5 of: #3538457: AI module documentation has warnings when running mkdocs serve Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Proposed resolution Once the parent issue is done, split the docs. Remaining tasks Wait for parent Split docs, re… ### [Provider configuration on assistant, when run as agent, is not being sent to provider](https://git.drupalcode.org/project/ai/-/work_items/3543368) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAssistantsApi, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [lpeabody](https://www.drupal.org/user/1137356) Related to !902 >>> Problem/Motivation In the latest 1.2.x, as far as I can tell, the configured max tokens and temperature settings for an assistant are never sent to the AI provider when running as an agent. Unless I'm missing something (entirely possible). Steps to reproduce (required for bugs, but not feature requests) Please provide information like AI modules enabled, which AI provider, browser, etc. Set max output tokens and temperature settings on an assistant that is configured to run as an ag… ### [Schema errors for an Automator field](https://git.drupalcode.org/project/ai/-/work_items/3585104) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Prakash (shubham.prakash) | Labels: category::bug, priority::normal, state::needsWork, toBeTriaged Description: >>> [!note] Migrated issue Reported by: [sirclickalot](https://www.drupal.org/user/403880) Related to !1498 >>> [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 Following upgrading to 1.33, where I have been using an Automator on a field named 'Prompt and Model Response (field.field.node.prompt_and_model_response) ' I am seeing this warning message... Warning messageSchema errors for fie… ### [Update the AI Assistant documentation - 2.0.x](https://git.drupalcode.org/project/ai/-/work_items/3549561) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Shubham Goel (shubhamgoel) | Labels: Has Testing Steps, category::bug, documentation, priority::normal Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1118 >>> Problem/Motivation The AI Assistant was updated last minute for the 1.1.x release, however the documentation does not reflect that at all. We should add this to the documentation. ### [Add optional prompt to ImageToVideoInput and clean up the class](https://git.drupalcode.org/project/ai/-/work_items/3586540) State: opened | Updated: 2026-07-02 | Author: Ahmad Khader (Ahmad-Khader) | Assigned: unassigned | Labels: Has Testing Steps, category::task, priority::normal, state::needsReview Description: ## Description The image_to_video operation type cannot carry a text prompt. ImageToVideoInput exposes only the source. Classic image-to-video models (Stable Video Diffusion) animate a still image with no prompt — the image-only contract is fine for them. Modern prompt-guided models (CogVideoX-I2V, LTX-Video, Kling, Runway Gen-3) require a prompt to direct the motion. There is currently no way for a caller or provider to pass one. This is inconsistent with ImageToImageInput, which already has getPrompt()/setPrompt(). Also, the operation types show a lot of audio-to-audio input copied tex… ### [Functioncall schema error with special model](https://git.drupalcode.org/project/ai/-/work_items/3573038) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAgent, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [ipumpkin](https://www.drupal.org/user/2279442) Related to !1190 >>> [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 When use deepseek model with Drupal Canvas AI got error from LLM API: Error invoking model response: Invalid schema for function 'ai_agent_verify_task_completion': schema must be a JSON Schema of 'type: "object"', got 'type: null'. … ### [Agent/Assistant Conversion Operations](https://git.drupalcode.org/project/ai/-/work_items/3574046) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: James Abrahams (yautja_cetanu) | Labels: Has Testing Steps, aiAssistantsApi, category::task, priority::normal Description: >>> [!note] Migrated issue Reported by: [yautja_cetanu](https://www.drupal.org/user/626050) Related to !1209 >>> [Tracker] Update Summary: AI provided solution that physically works and has undergone manual testing to convert between the two. Short Description: Allow Agents to be converted to Assistants so they can be used directly with a chatbot in a simpler manner better for context. Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation Site builders can see both AI Agents and AI Assistants in admin listings, but the… ### [Show in the UI that an AI Agent is "Connected" to the Assistant](https://git.drupalcode.org/project/ai/-/work_items/3574064) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiAssistantsApi, category::task, priority::normal Description: >>> [!note] Migrated issue Reported by: [yautja_cetanu](https://www.drupal.org/user/626050) Related to !1239 >>> [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 The historical summary of why this is a problem is located here: https://git.drupalcode.org/project/flowdrop_ui_agents/-/work_items/3567054 However it means the connection between "Assistant" and "Agent" is kind of hidden behind… ### [backport: one-click link should show human name](https://git.drupalcode.org/project/ai/-/work_items/3580328) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Jordan Koplowicz (koppie) | Labels: Has Testing Steps, aiTranslate, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [koppie](https://www.drupal.org/user/261840) Related to !1334 >>> [Tracker] Update Summary: New issue, backported from https://www.drupal.org/project/ai_translate Short Description: one-click link should show human name, not machine name Check-in Date: 03/19/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation The AI module works off of providers. Each provider defines models with both human name, and "machine name." The machine name usually avoids spaces and other "special" characters. The prob… ### [ActionPluginDeriver crashes AI features when an action plugin lacks an instance class](https://git.drupalcode.org/project/ai/-/work_items/3585335) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, aiCoreModule, category::bug, priority::normal Description: >>> [!note] Migrated issue Reported by: [mtift](https://www.drupal.org/user/751908) Related to !1520 >>> [Tracker] Update Summary: New bug report — defensive fix proposed Short Description: ActionPluginDeriver crashes the chat explorer when any ECA action plugin lacks a class Check-in Date: 04/23/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation ActionPluginDeriver::getDerivativeDefinitions() iterates every ECA action plugin definition and calls createInstance() on each one to discover available function-call tools for AI provide… ### [Standardize "AI Automator" naming across UI [1.x]](https://git.drupalcode.org/project/ai/-/work_items/3585382) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: Has Testing Steps, UX, aiAutomators, category::task Description: >>> [!note] Migrated issue Reported by: [cadence96](https://www.drupal.org/user/3520894) Related to !1527 >>> [Tracker] Update Summary: Standardize AI Automator naming across UI [1.x]. Short Description: Backport fix for inconsistent lowercase usage of "ai automator" in UI labels. Check-in Date: 04/17/2026 Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] This issue is a follow-up to #3585119, as suggested by @marcus_johansson, and targets the 1.x branch. Problem/Motivation The term "AI Automator" is used inconsistently across the UI. In several places it app… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Product Development, Has Testing Steps, aiChatbot Description: >>> [!note] Migrated issue Reported by: [heyyo](https://www.drupal.org/user/474388) Related to !1277 >>> Problem/Motivation ChatBot closes itself, and impossible to reopen-it, without refreshing the page Steps to reproduce 1. Create new content with CKEditor, for example basic page 2. Open ChatBot 3. Add Media into Ckeditor, we can see ChatBot closes 4. Include the Media 5. It's impossible to reopen the ChatBot > Related issue: [Issue #3505569](https://www.drupal.org/node/3505569) --- MERGE REQUESTS (24h) --- ### [Issue #3584977: RestrictToTopic guardrail: add semantic topic matching mode.](https://git.drupalcode.org/project/ai/-/merge_requests/1529) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3584977-restricttotopic-guardrail-add | 881 diff lines Description: Closes #3584977 ### [Issue #3586543: Add AI reranking processor for Search API.](https://git.drupalcode.org/project/ai/-/merge_requests/1729) State: opened | Author: Abhisek Mazumdar (abhisekmazumdar) | Branch: 3586543-add-ai-reranking-processor-for-search-api | 735 diff lines Description: ## Description A new Search API processor plugin (`ai_reranker`) that re-orders query results using the `rerank` operation type already in AI Core. The `rerank` operation was added in #3488114 but nothing consumed it for Search API. #3557901 proposed putting reranking in `ai_search`, but reranking is a generic capability. It belongs in the `ai` core module where the operation type itself lives, so it works with any Search API backend (database, Solr, anything), not just the vector backend. **New files:** - `src/Plugin/search_api/processor/AiReranker.php`: `ProcessorPluginBase` plugin runni… ### [Issue #3586478: "Add rich-text image description support to AI Automators"](https://git.drupalcode.org/project/ai/-/merge_requests/1679) State: opened | Author: Levente Besenyei (LeventeB) | Branch: 3586478-issue-branch-2x | 2435 diff lines Description: ## Description Ports the resolution of #3586478 from the 1.x line to the 2.x branch. This introduces rich-text image awareness to AI Automators so supported text-based automators can discover embedded images, generate AI image descriptions, include those descriptions in prompt context, and optionally store image metadata for auditability. For AI content pre-moderation, this enables the moderation automator to evaluate visual content from Article body fields in addition to text content. If embedded images cannot be fully processed (for example, configured image limit exceeded, unreachable/in… --- COMMITS (24h) --- (none) ======================================================================== ## [13] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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). ### [Drupal AI UX meeting 29 June 2026](https://git.drupalcode.org/project/ai_initiative/-/work_items/3586592) State: opened | Updated: 2026-07-02 | Author: Aidan Foster (aidanfoster) | Assigned: Aidan Foster (aidanfoster) | Labels: meetings, state::accepted Description: **Date:** Monday, June 29, 2026 **Attendees:** Aidan, Marcus, Ángela, Darren, Emma ### Canvas chat ticket * Stop becomes play/pause; resume re-prompts the agent to continue, possible because generation runs one loop per request * Stop and undo is renamed Stop and revert all changes, a milestone revert of the whole turn, kept redo-able and distinct from native Ctrl-Z ### AI Content Review criteria-creator UI * A form that writes the agent's markdown prompt: guidelines, per-criterion thresholds, and scored good/medium/bad examples * Two scoring methods get different UIs: example-based, and… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [14] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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). ### [Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA](https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3584407) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, Road to 1.0.0, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !8 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: New submodule that exposes AI request/response/stream/failure events to ECA as first-class Events, Conditions, and Actions. Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module dispatches a rich set of events around provider calls (PreGenerateResponseEvent, PostGenerateResponseEvent, PostStreamingResponseEvent) and exposes typed exceptions for rate limits, quotas, unsafe prom… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [15] summariseModule:ai_provider_anthropic:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Anthropic Provider (machine name: ai_provider_anthropic) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Carlos Ospina (camoa)". 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

                            Anthropic 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 #3607960: Add token counting, citations, and context management](https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35) State: opened | Author: Carlos Ospina (camoa) | Branch: 3607960-add-token-counting | 1823 diff lines Description: ## Summary Phase 3 of the native SDK integration meta ([#3572138](https://www.drupal.org/project/ai_provider_anthropic/issues/3572138)): adds **token counting**, **citations**, and **context management (compaction + editing)**. All three features are opt-in via new admin form sections and default off; the GA chat path is behaviorally unchanged when they are disabled (live-verified). ## What changed - **Token counting** — public `AnthropicProvider::countTokens(ChatInput|array, string): int` backed by `$client->messages->countTokens()`. Provider-native method (drupal/ai 1.4 has no token-count… --- COMMITS (24h) --- (none) ======================================================================== ## [16] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Alin Ameiroaie (aalin) [1], Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                              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). ### [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-02 | Author: drupalbot | Assigned: Abhisek Mazumdar (abhisekmazumdar) | 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… ### [Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.)](https://git.drupalcode.org/project/ai_agents/-/work_items/3577241) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: Abhishek Dhariwal (adaptative) | Labels: AI Initiative Sprint, AI Product Development, category::feature, code Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !249 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.) Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI Agents module currently allows defining and configuring agents inside Drupal. However, many modern AI ecosystems expect agents to exist inside external platforms such as Claude Code or services like VAPI. In many cases Drupal sh… ### [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-02 | 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), 1815 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… ### [Add caller agent runner ID to tags in determineSolvability()](https://git.drupalcode.org/project/ai_agents/-/work_items/3574487) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, category::feature, code Description: >>> [!note] Migrated issue Reported by: [aalin](https://www.drupal.org/user/2941961) Related to !238 >>> Problem/Motivation When a custom AiProvider implements chat(), there is currently no way to determine from the $tags array whether the call originates from a root agent loop or from a sub-agent/tool execution loop. --- MERGE REQUESTS (24h) --- ### [Issue #ai_agents-3578197:ContentEntitySeeder-Crashes-Double-Wrapped fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/291) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3578197-ContentEntitySeeder-Crashes-Double-Wrapped | 330 diff lines Description: Closes #3578197 ### [Issue #ai_agents-3577520: Streaming fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/290) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3577520-Fix-Streaming-Through-SetStreaming | 280 diff lines Description: Closes #3577520 ### [3574487: Add caller agent runner ID to tags in determineSolvability().](https://git.drupalcode.org/project/ai_agents/-/merge_requests/238) State: merged 2026-07-02 | Author: Alin Ameiroaie (aalin) | Branch: ai_agents-3574487 | 216 diff lines --- COMMITS (24h) --- - [e48c4836](https://git.drupalcode.org/project/ai_agents/-/commit/e48c4836dc76e1945924e1e4f7ee9934fa1519c1) 3574487: Add caller agent runner ID to tags in determineSolvability(). — Alin Ameiroaie (2026-07-02T07:53:57.000+00:00) ======================================================================== ## [17] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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), Abhishek Dhariwal (adaptative), AKHIL BABU (AkhilBabu) [1], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Fons Vandamme (f0ns), Gábor Hojtsy (goba), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR) [1], Prabhavathi Vanipenta (prabha1997), Ravi Maniyar (ravi.maniyar.123), Wim Leers (wimleers) [4]". 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-03 | 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… ### [WSOD AssertionError: assert(!$data instanceof ComponentInputsMapping) in assert() when requesting tmgmt translation job for some component trees](https://git.drupalcode.org/project/canvas/-/work_items/3591734) State: closed | Updated: 2026-07-03 | Author: Gábor Hojtsy (goba) | Assigned: Narendra Singh Rathore (NarendraR), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: category::bug, componentSources, priority::normal, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1296 [fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date](https://git.drupalcode.org/project/canvas/-/merge_requests/1296) | State: merged 2026-07-03 | Author: Narendra Singh Rathore (NarendraR), 502 diff lines Description: I went to try Canvas 1.7.0 translation today with a brand new install of Drupal CMS Haven. I don't think the issue is due to Haven, so submitting here. I think previously this config form had separate settings under the components for the tree and inputs but that is not an option that I have for some reason, so this is how I have it set up. ![Screenshot 2026-06-26 at 11.29.44.png](https://git.drupalcode.org/-/project/19391/uploads/fe3690f7cf31f5eafd12c4cf6de93f29/Screenshot_2026-06-26_at_11.29.44.png){width="755" height="600"} I have `canvas_dev_translation` enabled and `content|config|inte… ### [`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-02 | 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… ### [Match multi-line string props without a matches-everything Regex marker, then remove JitSafeRegexValidator](https://git.drupalcode.org/project/canvas/-/work_items/3591762) State: opened | Updated: 2026-07-02 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: category::task, priority::normal, shapeMatching, state::accepted Description: ## Overview Canvas overrides `string_long` fields with a `Regex` constraint whose pattern is `/(.|\r?\n)*/` (built by `JsonSchemaType::patternToPcre('(.|\r?\n)*')`). This pattern matches every possible string, so it validates nothing. It exists only as a **marker**: `EntityFieldPropSourceMatcher` compares constraints by value, so a component's multi-line string prop (`pattern: (.|\r?\n)*`) matches a `string_long` field only when the field carries a byte-identical `Regex` constraint. In #3575644 this marker caused a real bug: on long values the pattern exhausts the PCRE JIT stack, so `preg_ma… ### [Suppress spurious getcwd() errors in PHPUnit CI job logs](https://git.drupalcode.org/project/canvas/-/work_items/3591765) State: opened | Updated: 2026-07-02 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: DX (Developer Experience), priority::minor, projectManagement, state::accepted Description: ### Overview PHPUnit CI job logs end with spurious errors after the tests themselves have finished: ``` sh: 0: getcwd() failed: No such file or directory shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory ``` These appear in the `after_script` / artifact-upload phase, after test results are already recorded. GitLab's cleanup removes the job's working directory while shell processes spawned during `after_script` still … ### [Automate review using PHPStan: disallow short ternary](https://git.drupalcode.org/project/canvas/-/work_items/3591671) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Lee Rowlands (larowlan), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: DX (Developer Experience), projectManagement, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1240 [Resolve "Automate review using PHPStan: disallow short ternary"](https://git.drupalcode.org/project/canvas/-/merge_requests/1240) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 699 diff lines Description: @larowlan, while reviewing !1112: > ``` > $entity_type_bundles[] = [$entity_type_id, $bundle ?: $entity_type_id]; > ``` > > ?? instead of ?: - ?: - we know it is NULL so can use the more strict version — — —-- — https://git.drupalcode.org/project/canvas/-/merge_requests/1112#note_1199237 The solution is https://github.com/phpstan/phpstan-strict-rules' `disallowedShortTernary: true`: > Disallow short ternary operator (?:) - implies weak comparison, it's recommended to use null coalesce operator (??) or ternary operator with strict condition. ### [Canvas should mark multi-line string props on SDCs and code components as translatable](https://git.drupalcode.org/project/canvas/-/work_items/3591760) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Lauri Timmanee (lauriii), Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: blocker, category::task, priority::critical, shapeMatching Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1327 [chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable](https://git.drupalcode.org/project/canvas/-/merge_requests/1327) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 347 diff lines Description: See https://git.drupalcode.org/project/mercury/-/work_items/3592151#note_1078869. Coming up again at https://git.drupalcode.org/project/canvas/-/merge_requests/1296#note_1370731 ### [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-02 | 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](https://git.drupalcode.org/project/canvas/-/merge_requests/1332) | State: opened | Author: Wim Leers (wimleers), 1334 diff lines Description: Yesterday, https://www.drupal.org/project/drupal/releases/11.4.0 was released. This needs 2 MRs: - [ ] Canvas should be tested explicitly against 11.4: #3561392+ - [ ] Canvas should drop 11.2 support, because Drupal core dropped security support for 11.2. Note that the latter will unblock !1241. ### [Make tests pass again on Drupal 11.3: block config schema changed, `ComponentInputsEvolutionTest` needs to handle <=11.2 vs >11.2 differently](https://git.drupalcode.org/project/canvas/-/work_items/3591701) State: closed | Updated: 2026-07-02 | Author: Matt Glaman (mglaman) | Assigned: Matt Glaman (mglaman) | Labels: AI-accelerated, state::fixed, technical debt Description: ## Problem/Motivation The nightly pipeline on `1.x` ([pipeline 855595](https://git.drupalcode.org/project/canvas/-/pipelines/855595)) fails the PHPUnit kernel jobs on Drupal core 11.3 (`DRUPAL_CORE_NEXT_MINOR=11.3.10`). Two kernel test classes fail only on 11.3; they pass on 11.2. ### Failing jobs (11.3, all databases) - `phpunit (11.3 *): [PHPUnit-Kernel, 1, ...]` — `ComponentInputsEvolutionTest` - `phpunit (11.3 *): [PHPUnit-Kernel, 2, ...]` — `HostEntityPropSourceMatcherTest` ## Steps to reproduce ```bash composer require "drupal/core-recommended:~11.3.0" "drupal/core-dev:~11.3.0" --wi… ### [Prepare for PHPStan 2.x](https://git.drupalcode.org/project/canvas/-/work_items/3501228) State: opened | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: category::task, code, priority::normal, projectManagement Description: >>> [!note] Migrated issue Reported by: [longwave](https://www.drupal.org/user/246492) >>> Overview Drupal 11.x now ships with PHPStan 2.0 and 11.2.0 will be the first stable version to use it. We can test locally by running XB against Drupal 11.x. Currently this reports three configuration errors: <?phpInvalid entries in excludePaths:Path /var/www/html/web/modules/contrib/experience_builder/modules/same_page_preview is neither a directory, nor a file path, nor a fnmatch pattern.Path /var/www/html/web/modules/contrib/experience_builder/tests/src/Cypress/node_modules is neither a direct… ### [Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent](https://git.drupalcode.org/project/canvas/-/work_items/3591457) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, ai, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1329 [Add layout fixture and tests for page builder agent](https://git.drupalcode.org/project/canvas/-/merge_requests/1329) | State: merged 2026-07-02 | Author: AKHIL BABU (AkhilBabu), 2214 diff lines Description: ## Goal Create automated tests for the Canvas AI agents, so the manual testing otherwise needed every time an agent's system prompt changes can be avoided. ## Scope This issue was originally scoped to cover both the page builder agent and the template builder agent. It is now narrowed to the **page builder agent** alone. Tests for the template builder agent will follow in a separate issue. ## What has been done so far This builds on the earlier steps toward that coverage: - #3579681 — added the `canvas_ai_agents_test` module and the framework that validates the YAML output produced by … ### [Canvas AI: Component context required props missing required flag](https://git.drupalcode.org/project/canvas/-/work_items/3591655) State: opened | Updated: 2026-07-02 | Author: AKHIL BABU (AkhilBabu) | Assigned: AKHIL BABU (AkhilBabu) | 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: opened | Author: Prabhavathi Vanipenta (prabha1997), 115 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'], … ### [Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic](https://git.drupalcode.org/project/canvas/-/work_items/3591721) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Christian López Espínola (penyaskito), Wim Leers (wimleers) | Labels: auto-save, configManagement, projectManagement, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1324 [Resolve "Follow-up for #3591596: add PHPat rules for keeping `StagedLanguageConfigOverride` config entity type-agnostic"](https://git.drupalcode.org/project/canvas/-/merge_requests/1324) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 66 diff lines Description: The following discussion from !1271 should be addressed: - [ ] @penyaskito started a [discussion](https://git.drupalcode.org/project/canvas/-/merge_requests/1271#note_1268169): (+3 comments) > Shouldn't this be restricted to our known `ComponentTreeConfigEntityBase` implementers? ### [Prevention of publishing on Conflict in Canvas UI](https://git.drupalcode.org/project/canvas/-/work_items/3587526) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: Wim Leers (wimleers), Feliksas Mazeikis (f.mazeikis), Ravi Maniyar (ravi.maniyar.123) | Labels: Conflict resolution, category::task, priority::critical, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1193 [feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity"](https://git.drupalcode.org/project/canvas/-/merge_requests/1193) | State: merged 2026-07-02 | Author: Feliksas Mazeikis (f.mazeikis), 887 diff lines Description: >>> [!note] Migrated issue Reported by: [ravi.maniyar.123](https://www.drupal.org/user/3867193) Related to !1018 >>> Overview: Whenever conflicts occur, we need to show the file name with indicator and with different styling. The file with conflicts cannot be selected for publish. This issue will only add this functionality for Canvas UI. There will be separate issue that will ensure conflict detection is performed during publishing of entities in similar fashion validation is performed. User interface changes: -- Item with a conflict has indicator icon -- Item with a conflict is marked i… ### [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: opened | Updated: 2026-07-02 | 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: opened | 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… ### [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-02 | Author: Fons Vandamme (f0ns) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1331 [fix(Page): #3591763 Publishing a page without a URL alias fails: its empty...](https://git.drupalcode.org/project/canvas/-/merge_requests/1331) | State: opened | Author: Fons Vandamme (f0ns), 89 diff lines 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. ### [Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions`](https://git.drupalcode.org/project/canvas/-/work_items/3591683) State: closed | Updated: 2026-07-02 | Author: Wim Leers (wimleers) | Assigned: Wim Leers (wimleers) | Labels: Configuration schema, Novice, autoSave, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1322 [#3591683: Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions`](https://git.drupalcode.org/project/canvas/-/merge_requests/1322) | State: merged 2026-07-02 | Author: Wim Leers (wimleers), 25 diff lines Description: The following discussion from !1189 should be addressed: - [ ] @larowlan started a [discussion](https://git.drupalcode.org/project/canvas/-/merge_requests/1189#note_1199179): (+1 comment) > I think in another issue we patched core for this via our own .schema.yml file - [ ] @wimleers confirmed: > Indeed — #3583684 committed `config/schema/core_fix_forward_port.schema.yml` with `core.base_field_override.*.*.*.third_party.content_translation` — doesn't that mean this is not necessary? ⇒ we should be able to revert those config schema exclusions from the test coverage ### [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-02 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, AI Initiative Sprint, AI Innovation, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1330 [Issue #3591663: Fail validation for props that do not exist on a component](https://git.drupalcode.org/project/canvas/-/merge_requests/1330) | State: opened | Author: Abhishek Dhariwal (adaptative), 251 diff lines 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… ### [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-02 | Author: drupalbot | Assigned: Joonas Meriläinen (mErilainen) | 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 … ### [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-02 | 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), 603 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… ### [Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed](https://git.drupalcode.org/project/canvas/-/work_items/3591516) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: AKHIL BABU (AkhilBabu) | Labels: AI Initiative Sprint, AI Innovation, Novice, ai Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !1152 >>> Overview The canvas_ai_agents_test module exists to provide automated test coverage for the Canvas AI agents. https://git.drupalcode.org/project/canvas/-/work_items/3582390 adds automated tests for the orchestrator agent. The next step is to add tests for the page builder agent and the template builder agent. Both agents call the get_component_context tool, which returns a catalog of every component entity available on the site. Because the catalog is site-specific, different tes… ### [Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input](https://git.drupalcode.org/project/canvas/-/work_items/3582390) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, ai Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !957 >>> Overview CanvasAiPageBuilderHelper::generateVerboseContextForOrchestrator() generates a message for the orchestrator agent by combining the current entity type (Canvas page), page title, and page description. This is currently added to the orchestrator agent as a token in its system prompt. Instead, it should be passed through the user input Proposed resolution Remove the [canvas_ai:verbose_context_for_orchestrator] token Get the user input and output of CanvasAiPageBuilderHelper… ### [[DX regression] Canvas AI: Add 'YAML Path Equals' and 'YAML Path Exists' plugins](https://git.drupalcode.org/project/canvas/-/work_items/3579681) State: closed | Updated: 2026-07-02 | Author: drupalbot | Assigned: unassigned | Labels: AI Initiative Sprint, AI Innovation, AI Page Generation, DX (Developer Experience) Description: >>> [!note] Migrated issue Reported by: [akhil babu](https://www.drupal.org/user/3632866) Related to !737 >>> Overview Parent issue: https://git.drupalcode.org/project/canvas/-/work_items/3579471 Creating a test with the AI Agents Test module involves the following steps, at a high level: Selecting the agent Defining the input prompt Defining rules per tool (a tool should/should not run at a specific loop) Defining rules to validate the tool parameter inputs given by the agent The rules mentioned in the final step are called parameter rules, and the module defines them as AgentsParamete… --- MERGE REQUESTS (24h) --- ### [chore(deps): update dependency cspell to v10](https://git.drupalcode.org/project/canvas/-/merge_requests/1273) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/major-cspell-monorepo | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`^9.2.0` → `^10.0.0`](https://renovatebot.com/diffs/npm/cspell/9.7.0/10.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/10.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.7.0/10.0.1?slim=true) | > :exclamation: **I… ### [chore(deps): update dependency @eslint/compat to v2](https://git.drupalcode.org/project/canvas/-/merge_requests/1306) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/eslint-compat-2.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | [`^1.3.1` → `^2.0.0`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.4.1/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fcompat/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confide… ### [chore(deps): update dependency @chromatic-com/storybook to v5](https://git.drupalcode.org/project/canvas/-/merge_requests/1305) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/chromatic-com-storybook-5.x | 13 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@chromatic-com/storybook](https://github.com/chromaui/addon-visual-tests) | [`^3.2.2` → `^5.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/5.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.7/5.2.1?slim=true) | >… ### [fix(deps): update npm minor and patch](https://git.drupalcode.org/project/canvas/-/merge_requests/1238) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/npm-minor-and-patch | 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… ### [Issue #3575644: Inefficient RegexConstraint on StringLong fields causes "JIT stack limit reached"](https://git.drupalcode.org/project/canvas/-/merge_requests/1276) State: opened | Author: Matt Glaman (mglaman) | Branch: 3575644-issue-branch | 225 diff lines Description: ## Overview Saving a `string_long` field with a long value (~10k+ characters) fails validation with *"This value is not valid."* Canvas overrides `string_long` with a `Regex` constraint whose pattern is `/(.|\r?\n)*/`. That pattern matches every possible string — it never rejects a value. It exists only so `EntityFieldPropSourceMatcher` can recognize multi-line string props by comparing constraints by value. On long values, though, the alternating group under `*` exhausts the PCRE JIT stack: `preg_match()` returns `FALSE` with `PREG_JIT_STACKLIMIT_ERROR`, which Symfony's Regex validator repo… ### [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 | 1281 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… ### [Fix high level translation settings experience for Canvas](https://git.drupalcode.org/project/canvas/-/merge_requests/1303) State: opened | Author: Gábor Hojtsy (goba) | Branch: 3591740-fix-explanation-of-lack-of-canvas-page-language-support-to-account-for-varied-use-cases | 113 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591740 ### [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) | Branch: 3591601-rudimentary-conflict-resolution-ui | 3923 diff lines Description: \[Description of changes\] ## What this MR adds This adds a conflict review flow for Canvas Pages. In simple terms: Canvas saves unpublished edits as auto-saves. A conflict happens when a user has unpublished Canvas changes, but the published Page is changed outside of that user’s Canvas session before they publish. This MR shows those conflicts in Review changes, prevents conflicted items from being published directly, and lets the user open a side-by-side resolver. In the resolver, the user can choose either: - **Published version**: discard the Canvas auto-save for that Page. - **New… ### [Draft: feat(Conflict detection): #3591591 Expand conflict resolution UI with...](https://git.drupalcode.org/project/canvas/-/merge_requests/1317) State: opened | Author: Ravi Maniyar (ravi.maniyar.123) | Branch: 3591752-add-side-by-side-review-flow-for-selected-page-changes | 7035 diff lines Description: \[Description of changes\] Adds a side-by-side review flow for selected non-conflicted Page changes before publishing. **Changes include:** - Added a Review Changes route/view for selected pending Page changes. - Reused the shared page version comparison UI for visual/text comparison. - Allows selecting either the published version or the autosave/new version. - Selecting the published version discards the pending autosave change. - Selecting the new version keeps it selected and publishes it from the action button. - Added the all-files-reviewed state with publish/close actions. - Kept con… ### [Draft: Issue #3591668: Add text-based comparison of entities UI](https://git.drupalcode.org/project/canvas/-/merge_requests/1266) State: opened | Author: Ravi Maniyar (ravi.maniyar.123) | Branch: 3591668-text-based-comparison-of-entities-ui | 4855 diff lines Description: ## Description Adds a text-based comparison view to the conflict-resolution UI so users can compare the published and auto-saved versions of a Canvas page as YAML. This is a stacked MR. The change for #3591668 is in commit `b6a8a7fc`; earlier commits belong to the conflict-detection and conflict-resolution dependencies. ### What changed - Added a **Text** tab alongside the existing Visual and Props views. - Fetches the published and auto-saved entity exports in parallel. - Displays a side-by-side YAML diff using `react-diff-viewer-continued`. - Highlights added, removed, and changed conten… --- COMMITS (24h) --- - [38a14312](https://git.drupalcode.org/project/canvas/-/commit/38a143121892794bac352a0e022a59d0bb9d7f2e) fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date, email, number, boolean) — Narendra Singh Rathore (2026-07-03T01:22:56.000+00:00) - [d7ae391b](https://git.drupalcode.org/project/canvas/-/commit/d7ae391b34fedd1de058521d1ea974d8b89555ff) chore(Project management): #3591671 Automate review using PHPStan: disallow short ternary — Wim Leers (2026-07-02T14:51:47.000+00:00) - [4a84d5f6](https://git.drupalcode.org/project/canvas/-/commit/4a84d5f624fa22d5b0c7641a757e8a80fe0ea6dd) chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable — Wim Leers (2026-07-02T14:05:00.000+00:00) - [028fae3a](https://git.drupalcode.org/project/canvas/-/commit/028fae3ae0e634602b38fbd3168f4a2b5aac461a) feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity" — Feliksas Mazeikis (2026-07-02T12:19:47.000+00:00) - [0242c2ae](https://git.drupalcode.org/project/canvas/-/commit/0242c2aebd68e082f3bfa6e128bc20a8f146a684) chore(Project management): #3591721 Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic — Wim Leers (2026-07-02T11:15:46.000+00:00) - [bfe17b84](https://git.drupalcode.org/project/canvas/-/commit/bfe17b84e6e54c3cb5fd2ce8837a3bb1b578eddd) chore(Auto-save): #3591683 Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` — Wim Leers (2026-07-02T09:56:57.000+00:00) - [3fffffc5](https://git.drupalcode.org/project/canvas/-/commit/3fffffc5cc1a7efa995ea7fac5f09d346f7c2eb8) test(AI): #3591457 Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent — AKHIL BABU (2026-07-02T07:44:42.000+00:00) ======================================================================== ## [18] 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-02T05:00:05+00:00 to 2026-07-03T05:00:05+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), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) [1], 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). ### [Sprint 13 CCC roadmap updates, sprint planning, and issue triage](https://git.drupalcode.org/project/ai_context/-/work_items/3586293) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/Motivation Prioritize backlog items for the sprint to align with roadmap, releases, and project needs. --- ## Proposed resolution Groom sprint issues https://git.drupalcode.org/project/ai_context/-/work_items/views/78 --- ## Target date or deadline 27 to 10 July 2026 --- ## Remaining tasks - Go through backlog and prioritize - Create new issues as needed - Identify what goes into sprint - Tune mid-sprint as needed - Update roadmap meta as needed --- ## Related issues - [#3567798: [META] CCC MVP 1.0 roadmap](https://www.drupal.org/project/ai_context/issues/3567798) - … ### [Documentation corrections: dependency requirements and AI module version](https://git.drupalcode.org/project/ai_context/-/work_items/3586317) 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: ## 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.**_ Two user-facing doc errors beta testers will hit: - `docs/index.md` lists Scheduler and Scheduler Content Moderation Integration as **required**; `README.md` and `composer.json` (require-dev) treat them as optional, and the code degrades gracefully without them. - `README.md` states AI module `^1.3.4`; `composer.json` requires `drupal/ai ^1.4 || ^2`. ## Proposed resolution Fix `docs/index.md` to mark both modules optional and correct the README ve… ### [[Meta] Fix CCC issues based on AI Best Practices results](https://git.drupalcode.org/project/ai_context/-/work_items/3586298) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Follow-up to: #3586258+s Ran AI Best Practices against ai_context and found some things that need fixing: GPT 5.5 doc pulling out all the actionable things: [ai-context-actionable-fix-plan.md](https://git.drupalcode.org/-/project/191993/uploads/c3b583782d3be83fde707399a020b762/ai-context-actionable-fix-plan.md) ## Solution GPT 5.5 assessment: For RC1, I’d only block on items that affect **public API, config shape/defaults, installability, or release expectations**. Most accessibility, render-cache, and UI/test cleanup can happen after RC1 as bug/UX fixes. ### Sho… ### [[Feature] Add ExternalContextProviderInterface and ContextQueryInterface to support RAG/vector store integrations](https://git.drupalcode.org/project/ai_context/-/work_items/3586289) State: opened | Updated: 2026-07-03 | Author: josecarlosmedero | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Summary Follow-up to: #3586257+s ## Problem We built an external RAG integration on top of CCC (AI Knowledge Connector — a vector store + semantic retrieval module for Drupal 11) and hit three specific API gaps that currently require workarounds. We're raising these before rc1 so the team can evaluate whether a formal API would be worth adding to make the integration pattern stable and documented for the ecosystem. The current workaround path works (we're using `BuildSystemPromptEvent`) but it's fragile across agent types, bypasses CCC's token limit logic, and gives no observability … ### [Provide real sample context items for end user use](https://git.drupalcode.org/project/ai_context/-/work_items/3586279) 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 Spin off from: #3586244+s Pulling the info from the other ticket. --- It would be really helpful to provide (optional) example context items for this module. There is a mention of this in #3586175, but I wanted to open a separate issue for it because it might make sense to provide a recipe for example content items (similar to this for AI Guardrails: https://www.drupal.org/project/ai_recipe_guardrails_pii) As I'm learning to use the module, I find that I have to spin up an instance of https://www.drupalforge.org/template/driesnote-chicago in order to see some type… ### [Gather CCC contribution stats for code and non-code contributions for release notes](https://git.drupalcode.org/project/ai_context/-/work_items/3586222) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: ## Problem/motivation The current tools for generating release notes are inadequate as they only focus on code commits. They also require the issue number to be in the commit message. I want to gather the stats for all contributors for a release including non-code contributions which there are many. ## Solution The result for release notes should be something like: ``` New Features * one * two Bug Fixes * one * two Tasks * one * two Non-Code Contributions * number of issues? Contributors: kristen pol (35), afoster (8), emma horrell (6), scott falconer (6), mglaman (3)... salsa (35),… ### [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. … ### [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: - 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 StringLongItemOverride patch … ### [Introduce explicit scope types and item inclusion modes; clarify selection in UI and docs](https://git.drupalcode.org/project/ai_context/-/work_items/3586281) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Summary Follow-up to: - #3586243+s - #3586270+s - #3586196+s Blocked by: #3586243+s _**The two decisions still worth locking before this lands: **(1)** `type` derived vs declared, and **(2)** Entity bundle's default inclusion mode.**_ **Builds on (must land first):** #3586243+s — the scope plugin persistence API and capability-flag refactor. **Keep in mind when architecting:** #3586197+s — boundaries / exclusions builds on this. Beta feedback shows site builders don't have an accurate mental model of how context **scopes** decide what actually reaches an agent's prompt. After #35862… ### [Review and update CCC permissions](https://git.drupalcode.org/project/ai_context/-/work_items/3574937) State: opened | Updated: 2026-07-03 | Author: drupalbot | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: ## Problem/Motivation Follow-up to: #3563036+s Let's revisit this after beta3 is created: #3586295+s Permissions need to be revisited to see what's missing and what should be added. This would need to happen prior to full QA: #3573716+s ## Proposed resolution Review permissions, figure out what to add, and add them. ## Target date or deadline July 2026 ## Remaining tasks - Review existing perms - Figure out what's missing - Add perms - Review and test ## AI usage (if applicable) - [ ] AI Assisted Issue This issue was generated with AI assistance, but was reviewed and refined… ### [Allow scope plugins to declare an optional icon for UI display](https://git.drupalcode.org/project/ai_context/-/work_items/3586262) 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: #3586220+s Blocked by: #3586243+s ### Summary Scope plugins are shown in several places across `ai_context` (and will likely appear in more over time). Today, when an icon is shown at all, it is hard-coded in the view layer — e.g. `AiContextItemViewBuilder::SCOPE_ICON_CLASSES` for the context item **Details** sidebar — with a generic funnel fallback for unknown plugins. This issue adds an **optional, plugin-level icon** on `AiContextScope` plugins so each scope can define a consistent visual identity wherever that plugin is rendered, without patching core ma… ### [Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection](https://git.drupalcode.org/project/ai_context/-/work_items/3586243) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 11, AI Sprint 14 Description: ## Description Blocked by: #3586295+s ### Summary The scope plugin API was asymmetric: read and match were abstracted, but write, clear, index, cleanup, form integration, and save-time validation leaked storage details into callers. `AiContextItemForm`, entity presave, `hook_entity_delete()`, and `AiContextScopeIndexService` contained special cases — especially the `target_entities` DER field — that would repeat for every new scope. This issue completes the scope plugin value lifecycle contract before RC1. Callers delegate to `AiContextScopeManager` and scope plugins; custom storage (targ… ### [Create multi-vocabulary taxonomy scope plugin](https://git.drupalcode.org/project/ai_context/-/work_items/3586237) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::feature Description: ## Problem/motivation Follow up to: #3586198+s Blocked by: #3586243+s We do not have a scope plugin that allows associated context with the terms for content entities. Example: * Article **has terms**: foo, bar, hello * Blog post **has terms**: foo, whatever * One context item **has term**: foo * Another context item **has terms**: foo, bar * I'm on the article page, both context items should be relevant * I'm on the blog post, only the second context item should be relevant ## Solution Create a taxonomy scope plugin. The UI should be something like: * Vocabulary ABC \[textbox multis… ### [Create CCC video showing how to configure it](https://git.drupalcode.org/project/ai_context/-/work_items/3586153) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: Let's do this after beta3 is created: #3586295+s People have been having some trouble understanding how to set up CCC. Create a simple video for setting it up. ### [Tune conditional subcontext logic](https://git.drupalcode.org/project/ai_context/-/work_items/3586199) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, blocker::stable Description: Follow up to: #3586194+s It would be good to get these in before this one: - #3586218+s - #3586292+s ## Problem/motivation Conditional subcontext logic needs to be fine-tuned. See related issue above. ## Solution Add the subcontext as an "index" to the parent when asking the LLM which conditional subcontext items are good to include. See issue above for some possible structure. Fill out more details here as this is thought through more. ## Tasks - Review existing logic and test - Document current workflow as needed - Define subcontext index format - Define the LLM workflow - Implement… ### [Recruit CCC beta testers](https://git.drupalcode.org/project/ai_context/-/work_items/3586235) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::task Description: ## Problem/motivation Note that Mike Anello (ultimike) is beta testing, but we will try to recruit more after beta3 is created: #3586295+s We want more beta testers. This issue was created for this: #3586234+s ## Solution Promote this in various channels: - Slack - LinkedIn - Planet Drupal? ## Tasks - ~~Create issue with resources~~ - ~~Post in the relevant Slack channels (ai, ai-contrib, ai-context, ai-partner-contributors)~~ - Create a blog post and/or LinkedIn post to promote ### [Add opt-in AiContextSelectionDiagnostics to selection results](https://git.drupalcode.org/project/ai_context/-/work_items/3586242) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Innovation, AI Sprint 14, category::feature Description: ## Summary Follow up to: #3586169 Contrib and site debugging today rely on watchdog/`debug_logging` config, which is global, noisy, and can log sensitive task text. We need structured, **opt-in** selection diagnostics on the result object for preview tools, Drush commands, and developer UI — without leaking context content. **Goal:** When diagnostics are requested, `AiContextSelector::select()` accumulates a structured breakdown and exposes it on `AiContextResult`. ## Solution **Proposed API:** - `AiContextRequest::withDiagnostics(bool $enabled = TRUE)` (or equivalent factory/builder opt… ### [CCC beta3 release planning](https://git.drupalcode.org/project/ai_context/-/work_items/3586182) State: opened | Updated: 2026-07-03 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 10 Description: ## Problem/Motivation Planning issue for beta3 release See the [milestone](https://git.drupalcode.org/project/ai_context/-/milestones/5#tab-issues ) for all issues. Key must have issues are listed here. --- ## Proposed Resolution **Many issues were already closed and noted here:** - #3567798: META CCC MVP 1.0 roadmap - #3577644: CCC beta1 release planning - #3585902: CCC beta2 release planning **These are the ones below have been the focus since 11 May 2026 for beta3.** --- ### Must haves #### Blocked - N/A #### Todo - #3586296: CCC beta3 QA - #3586295: Create CCC beta3 release … ### [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… ### [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: Joshua Fernandes (joshua1234511) | 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), 2504 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 ### [Clean up CCC accessible interactive links and external links](https://git.drupalcode.org/project/ai_context/-/work_items/3586301) 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 !200 [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), 982 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **2. Accessible Interactive Links And External Links** **Priority:** High **Why group these together:** These are all link-rendering issues. Fixing them together allows one consistent pattern for render-array links, new-tab warnings, and link styling. Includes: - List-builder revisions operation cacheable access result. - Revision UI boolean access checks. ## Solution ### 2.1 Replace interactive links embedded in `#markup` **Files:** - `src/Form/AiCont… ### [Clean up CCC cacheability and access metadata](https://git.drupalcode.org/project/ai_context/-/work_items/3586300) State: opened | Updated: 2026-07-02 | 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 !204 [Issue #3586300: Updated CCC cacheability and access metadata.](https://git.drupalcode.org/project/ai_context/-/merge_requests/204) | State: opened | Author: Joshua Fernandes (joshua1234511), 120 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **1. Cacheability And Access Metadata** **Priority:** High **Why group these together:** These fixes all involve Drupal render/cacheability metadata and access-result cache contexts. They should be reviewed together to avoid fixing one stale-cache path while leaving related cacheability gaps. Includes: - `AiContextOverviewController` cache metadata. - Duplicate overview query cleanup. - `AiContextRenderer` settings cache dependency. ## Solution ### 1.1 A… ### [CCC beta3 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586294) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation Do this right before: #3586296+s in case there are any serious issues that need addressing before the release. Beta3 will be released shortly. We continually need to check the codebase as it changes for potential security issues, performance issues, and any pre-rc1 features/apis that need to be addressed. ## Solution Run AI checks against the codebase to identify for pre-rc1 and post-1.0: - Important performance issues - Important feature/API gaps - Security issues (major issues will not be reported here) ## Next steps - Run security review - Run performance revi… ### [[Meta] CCC cleanup from beta3 code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-07-02 | 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) ### Old docs Fable 5 fin… ### [[Meta] CCC cleanup from beta3 code review findings for beta3](https://git.drupalcode.org/project/ai_context/-/work_items/3586310) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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-beta3-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/e83cda3d7f0df7594af44885c7037325/ai_context-beta3-1.0.x-issues.md) ### Old docs Fable 5 fin… ### [Harden update 10011: empty-chunk guard and NULL-only backfill](https://git.drupalcode.org/project/ai_context/-/work_items/3586316) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This should be fixed here: #3586218+s Two robustness issues in `ai_context_update_10011()`: - If items are deleted while the update runs, the batch query eventually returns `[]` while `$sandbox['progress'] < $sandbox['max']`, so `#finished` never reaches 1 — an infinite update loop. - The backfill re-infers over explicit values rather than restricting to NULL rows, so a re-run would flip an explicitly-FALSE, no-custom-scope child back to TRUE (the… ### [Syncing saves bypass all integrity constraints instead of only the global cap](https://git.drupalcode.org/project/ai_context/-/work_items/3586313) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This one should be fixed in: #3586218+s `AiContextItemStorage` skips validation entirely for syncing entities (`!$entity->isSyncing()`). The bypass exists so update 10011 completes on sites already over the global cap, but it also disables the structural checks in `AiContextItemValidator::validateItem()` — self-parent, two-level nesting, missing `subcontext_type`. Migrations and `default_content` imports run with syncing TRUE, so invalid hierarchie… ### [Item form discards user-entered scope when the subcontext feature is disabled](https://git.drupalcode.org/project/ai_context/-/work_items/3586314) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This should be fixed here: #3586218+s `AiContextItemForm::buildEntity()` computes `$inherits_parent_scope = $entity->hasParent() && $entity->inheritsParentScope();` without checking `isSubcontextEnabled()`. With the feature toggled off, the "Same as parent" checkbox is not rendered and the scope widgets are fully visible — yet scope extraction is skipped and `target_entities` is cleared. `preSave()` then strips the parent, leaving a top-level item … ### [Unset inherit_parent_scope silently wipes stored scope on save (data loss)](https://git.drupalcode.org/project/ai_context/-/work_items/3586312) State: closed | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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.**_ This problem should be fixed here: #3586218+s On the 3586218 branch, `inherit_parent_scope` has an entity-level default of TRUE and `AiContextItem::inheritsParentScope()` returns TRUE when the field is empty. `preSave()` then clears stored `scope` and `target_entities` whenever the item inherits. This destroys data in three ways: - **Deploy window:** between code deploy and `drush updb`, any save of an existing custom-scope subcontext — including … ### [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-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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… ### [Evaluate Annotations module and how it might work with CCC](https://git.drupalcode.org/project/ai_context/-/work_items/3586268) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 Description: ## Problem/motivation The new [Annotations module](https://www.drupal.org/project/annotations) has overlap with CCC. ### Video From NikLP: No demo videos yet but how y'all feel about a gen AI video outlining my new module suite? :smiling_face_with_tear: https://www.linkedin.com/posts/niklepage_drupal-activity-7469809314463891456-j8u8/ ### Nik's integration approach [ai_context-local.patch](https://git.drupalcode.org/-/project/191993/uploads/5591cdf6801c901c1d6bc021f4975b60/ai_context-local.patch) [adr-ai-context-provider.md](https://git.drupalcode.org/-/project/191993/uploads/75577ae14… ### [Allow agents to opt-out of context auto-injection](https://git.drupalcode.org/project/ai_context/-/work_items/3586308) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: AI Sprint 14, category::feature, needs ux review, priority::major Description: ## Problem/motivation Follow-up to: #3586268+s Some agents may want to use tools to pull in context as needed rather than have CCC auto-inject context (push). ## Solution Add an option for agents to opt-out of all CCC context injection. For now, let's add it as a toggle that defaults to enabled and is right above the Scope Subscriptions fieldset (outside of the fieldset). **Label:** Automatic context injection **Description:** If enabled, context will be ranked based on scope subscriptions and other criteria. The ranked context will be injected into the system prompt based on your maxi… ### [Clean up CCC test and documentation consistency before rc1](https://git.drupalcode.org/project/ai_context/-/work_items/3586299) State: opened | Updated: 2026-07-02 | 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.**_ **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:** - `… ### [Clean up CCC documentation and API consistency](https://git.drupalcode.org/project/ai_context/-/work_items/3586305) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | 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-02 | Author: Kristen Pol (kepol) | Assigned: Juan Correa (jucs7) | Labels: AI Context Management, AI Initiative Sprint, AI Innovation, AI Sprint 13 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… ### [Clean up CCC tooltip, truncation, and icon-only content](https://git.drupalcode.org/project/ai_context/-/work_items/3586302) State: opened | Updated: 2026-07-02 | Author: Kristen Pol (kepol) | Assigned: Abhishek Dhariwal (adaptative) | 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 !199 [Issue #3586302: Exposed tooltip/truncated content and icon meaning to assistive tech.](https://git.drupalcode.org/project/ai_context/-/merge_requests/199) | State: opened | Author: Joshua Fernandes (joshua1234511), 216 diff lines Description: ## Problem/motivation Follow-up to: #3586258+s Parent: #3586298+s _**Verify the issue problem and solution before proceeding.**_ **3. Tooltip, Truncation, And Icon-Only Content** **Priority:** High to Medium **Why group these together:** These UI patterns all expose important information through `data-ai-tooltip`, truncation, or visual icons. They should be reviewed as one accessibility pass. Includes: - Replace links in `#markup`. - Add new-tab accessible warnings and `rel`. - Fix CSS-only external-link indicator assumptions. ## Solution ### 3.1 Make tooltip-dependent content ava… ### [Clean up CCC JavaScript filter feedback](https://git.drupalcode.org/project/ai_context/-/work_items/3586303) State: opened | Updated: 2026-07-02 | 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 !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_… ### [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-02 | 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), 3420 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… --- MERGE REQUESTS (24h) --- ### [Issue #3586317: Fix Scheduler as optional and correct AI module version in docs.](https://git.drupalcode.org/project/ai_context/-/merge_requests/209) State: merged 2026-07-03 | Author: Pravesh Poonia (Pravesh_Poonia) | Branch: 3586317-documentation-corrections-dependency-requirements-and-ai-module-version | 39 diff lines Description: ### Changes * Updated `docs/index.md` to move **Scheduler** and **Scheduler Content Moderation Integration** from the **Required modules** section to the **Optional modules** section, since `composer.json` lists them under `require-dev` and the module degrades gracefully when they are not installed. * Updated `README.md` to correct the supported AI module version. The documentation previously stated `^1.3.4`, while `composer.json` requires `drupal/ai ^1.4 || ^2`. The README now reflects the actual Composer requirement. ### [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) | Branch: 3586299-clean-up-ccc-test-and-documentation-consistency-before-rc1 | 286 diff lines Description: ## Summary Addresses sub-items **7.1**, **7.2**, and **7.4** from issue #3586299. ### 7.4 — Test environment documentation (`tests/README.md`) Updated the test documentation with guidance for the `SIMPLETEST_BASE_URL` and `SIMPLETEST_DB` environment variables when using DDEV. This removes the need for contributors to determine these values through trial and error. ### 7.2 — Replace documentation-only tests #### `AiContextScopeGlobalTest` Replaced five placeholder assertions (`assertTrue(TRUE, '...')`) with real unit-level assertions that exercise plugin behavior without requiring a Drupa… --- COMMITS (24h) --- - [26ba1513](https://git.drupalcode.org/project/ai_context/-/commit/26ba1513353d93d5f5acf48f1031fec1d80b4ca3) Issue #3586317: Fix Scheduler as optional and correct AI module version in docs. — Pravesh Poonia (2026-07-03T04:16:42.000+00:00) ======================================================================== ## [19] summariseModule:ai_search:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: marios anagnostopoulos (MariosAnagnostopoulos)". 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 Search

                                    then use

                                    ,

                                    ,

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

                                      How can I help on this project?

                                      " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Support keyword discovery in nested conditions.](https://git.drupalcode.org/project/ai_search/-/merge_requests/54) State: opened | Author: marios anagnostopoulos (MariosAnagnostopoulos) | Branch: 3584029-support-nested-keyword-queries | 116 diff lines Description: Closes #3584029 --- COMMITS (24h) --- (none) ======================================================================== ## [20] summariseModule:agui:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AG-UI (machine name: agui) Reporting period: last 24h (2026-07-02T05:00:05+00:00 to 2026-07-03T05:00:05+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: Bryan Sharpe (b_sharpe) [1]". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                      AG-UI

                                      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). ### [Allow Data attributes in parsed HTML](https://git.drupalcode.org/project/agui/-/work_items/3590040) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !31 [Allow data attributes for dom purify.](https://git.drupalcode.org/project/agui/-/merge_requests/31) | State: merged 2026-07-02 | Author: Bryan Sharpe (b_sharpe), 42 diff lines Description: Many times the LLM has information that we could use to further enhance the user experience but we don't want displayed into the window. Data attributes would allow attaching this to the HTML. ### [Add events for failures](https://git.drupalcode.org/project/agui/-/work_items/3590038) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Ideally when their are issues/timeouts with response, we have the ability to react to this. For example, let's say the remote throws some sort of exception, we could react to this in a meaningful way to the user. ### [Add events for failures](https://git.drupalcode.org/project/agui/-/work_items/3590041) State: opened | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Ideally when their are issues/timeouts with response, we have the ability to react to this. For example, let's say the remote throws some sort of exception, we could react to this in a meaningful way to the user. We should introduce some event triggers for these cases. ### [Allow data attributes in parsed HTML](https://git.drupalcode.org/project/agui/-/work_items/3590039) State: closed | Updated: 2026-07-02 | Author: Bryan Sharpe (b_sharpe) | Assigned: unassigned | Labels: Description: Many times the LLM has information that we could use to further enhance the user experience but we don't want displayed into the window. Data attributes would allow attaching this to the HTML. --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- - [65231fd2](https://git.drupalcode.org/project/agui/-/commit/65231fd2e0c95ac1a977e6f841b05ee3e9ea1037) Allow data attributes for dom purify. — Bryan Sharpe (2026-07-02T09:27:07.000-07:00) ======================================================================== ## [21] 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] Preserve HTML in streamed output (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586558 [2] Drupal Eval Commons umbrella (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586445 [3] RestrictToTopic guardrail: add semantic topic matching mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3584977 [4] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [5] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [6] 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 [7] Add an AI reranking processor for Search API (owned by the AI module) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586543 [8] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [9] Standardize thread/caller correlation on AI OTel spans (map tags to gen_ai.conversation.id) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586581 [10] Guardrail plugins only evaluate the last message (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579088 [11] Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586542 [12] Add rich-text image description support to AI Automators (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586478 [13] "AI Guardrails" or "AI Moderation Guardrails"? (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586471 [14] [Sprint5] Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3567006 [15] Auto-update default prompt entities on module updates, but only if the site has not customized them (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582350 [16] Create Provider Documentation Page for OpenAI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3533040 [17] Show last-modified date on documentation pages (mkdocs-git-revision-date-localized-plugin) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586541 [18] Rename Guardrails "RegExp guardrail" plugin to just "RegEx" (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586475 [19] Allow for manual override for new models from provider APIs in AI module settings (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3540491 [20] To save resources make it easy to reuse requests in manual testing (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3554853 [21] Adopt symfony/ai component v0.8 as platform provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586427 [22] PHP/JS Function to Engage the Chat with a prompt (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3534530 [23] Graceful error handling when an AI Provider is not setup correctly (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549312 [24] Truncate long input and output body in AI logs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556125 [25] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [26] Make AI API Explorer have chat history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3528949 [27] Make API explorer work with Symfony platform and legacy providers (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586470 [28] TypeError in AutomatorBaseAction::getAutomatorsOptions() when automating base fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586430 [29] Integrate ChatProcessor plugin system into AI Chatbot DeepChat block (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585077 [30] Add AI Assistant API ChatProcessor plugin (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585075 [31] AiPromptSubForm validates inline prompt against stale prompt type when multiple ai_prompt elements exist (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586548 [32] Improve ai_ckeditor UX when no provider modules are installed (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586549 [33] ai_prompt entity validation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549664 [34] Render images and videos inside the chatbot viewport (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586518 [35] Improve property limit widgets with proper enum/boolean support and fix FixedValue type mismatch (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586393 [36] Guardrail set - "Stop threshold" documentation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586477 [37] Create assisted structured output generation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556378 [38] Add "Request rate limit has been exceeded" error messages to AI Log (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3561399 [39] Allow Field Widget Actions to target a specific automator (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3571915 [40] Document streaming helping methods and add change record (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579930 [41] Assistant rewrites links poorly or hallucinates links sometimes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499610 [42] RestrictToTopic guardrail: add opt-in logging when a topic is flagged (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586486 [43] Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() (line 498 of /var/www/html/testu/web/core/lib/Drupal/Core/File/FileSystem.php) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3551584 [44] Match "Global Guardrails" config page title with "Global AI Guardrails" menu item (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586476 [45] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [46] Provider configuration on assistant, when run as agent, is not being sent to provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3543368 [47] Schema errors for an Automator field (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585104 [48] Update the AI Assistant documentation - 2.0.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549561 [49] Add optional prompt to ImageToVideoInput and clean up the class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586540 [50] Functioncall schema error with special model (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3573038 [51] Agent/Assistant Conversion Operations (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574046 [52] Show in the UI that an AI Agent is "Connected" to the Assistant (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574064 [53] backport: one-click link should show human name (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3580328 [54] ActionPluginDeriver crashes AI features when an action plugin lacks an instance class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585335 [55] Standardize "AI Automator" naming across UI [1.x] (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585382 [56] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [57] Resolve #3586558 "Preserve HTML in streamed output" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1734 [58] Issue #3584977: RestrictToTopic guardrail: add semantic topic matching mode. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1529 [59] Issue #3586543: Add AI reranking processor for Search API. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1729 [60] Issue #3586425: Resolve "ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1584 [61] Issue #3586542: Fix documentation staleness — automator-type ID drift,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1737 [62] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1679 [63] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1628 [64] Drupal AI UX meeting 29 June 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586592 [65] Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3584407 [66] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [67] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [68] Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3577241 [69] 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 [70] Add caller agent runner ID to tags in determineSolvability() (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3574487 [71] Issue #ai_agents-3578197:ContentEntitySeeder-Crashes-Double-Wrapped fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/291 [72] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [73] Issue #ai_agents-3577520: Streaming fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/290 [74] 3574487: Add caller agent runner ID to tags in determineSolvability(). (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/238 [75] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [76] WSOD AssertionError: assert(!$data instanceof ComponentInputsMapping) in assert() when requesting tmgmt translation job for some component trees (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591734 [77] `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 [78] Match multi-line string props without a matches-everything Regex marker, then remove JitSafeRegexValidator (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591762 [79] Suppress spurious getcwd() errors in PHPUnit CI job logs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591765 [80] Automate review using PHPStan: disallow short ternary (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591671 [81] Canvas should mark multi-line string props on SDCs and code components as translatable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591760 [82] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [83] Make tests pass again on Drupal 11.3: block config schema changed, `ComponentInputsEvolutionTest` needs to handle <=11.2 vs >11.2 differently (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591701 [84] Prepare for PHPStan 2.x (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3501228 [85] Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591457 [86] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [87] Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591721 [88] Prevention of publishing on Conflict in Canvas UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3587526 [89] 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 [90] 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 [91] Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591683 [92] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [93] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [94] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [95] Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591516 [96] Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3582390 [97] [DX regression] Canvas AI: Add 'YAML Path Equals' and 'YAML Path Exists' plugins (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3579681 [98] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [99] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [100] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [101] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [102] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [103] Issue #3575644: Inefficient RegexConstraint on StringLong fields causes "JIT stack limit reached" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [104] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [105] fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1296 [106] 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 [107] #3591764: Make Canvas test suite pass on 11.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [108] Fix high level translation settings experience for Canvas (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1303 [109] Resolve "Automate review using PHPStan: disallow short ternary" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1240 [110] chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1327 [111] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [112] fix(Page): #3591763 Publishing a page without a URL alias fails: its empty... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1331 [113] feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1193 [114] Resolve "Follow-up for #3591596: add PHPat rules for keeping `StagedLanguageConfigOverride` config entity type-agnostic" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1324 [115] #3591683: Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1322 [116] Issue #3591663: Fail validation for props that do not exist on a component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1330 [117] Draft: feat(Conflict detection): #3591591 Expand conflict resolution UI with... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1317 [118] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [119] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [120] Add layout fixture and tests for page builder agent (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1329 [121] Draft: Issue #3591668: Add text-based comparison of entities UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1266 [122] Sprint 13 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586293 [123] Documentation corrections: dependency requirements and AI module version (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586317 [124] [Meta] Fix CCC issues based on AI Best Practices results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586298 [125] [Feature] Add ExternalContextProviderInterface and ContextQueryInterface to support RAG/vector store integrations (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586289 [126] Provide real sample context items for end user use (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586279 [127] Gather CCC contribution stats for code and non-code contributions for release notes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586222 [128] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [129] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [130] Introduce explicit scope types and item inclusion modes; clarify selection in UI and docs (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586281 [131] Review and update CCC permissions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3574937 [132] Allow scope plugins to declare an optional icon for UI display (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586262 [133] Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586243 [134] Create multi-vocabulary taxonomy scope plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586237 [135] Create CCC video showing how to configure it (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586153 [136] Tune conditional subcontext logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586199 [137] Recruit CCC beta testers (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586235 [138] Add opt-in AiContextSelectionDiagnostics to selection results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586242 [139] CCC beta3 release planning (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586182 [140] 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 [141] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [142] Clean up CCC accessible interactive links and external links (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586301 [143] Clean up CCC cacheability and access metadata (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586300 [144] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [145] [Meta] CCC cleanup from beta3 code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [146] [Meta] CCC cleanup from beta3 code review findings for beta3 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586310 [147] Harden update 10011: empty-chunk guard and NULL-only backfill (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586316 [148] Syncing saves bypass all integrity constraints instead of only the global cap (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586313 [149] Item form discards user-entered scope when the subcontext feature is disabled (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586314 [150] Unset inherit_parent_scope silently wipes stored scope on save (data loss) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586312 [151] 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 [152] Evaluate Annotations module and how it might work with CCC (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586268 [153] Allow agents to opt-out of context auto-injection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586308 [154] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [155] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [156] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [157] Clean up CCC tooltip, truncation, and icon-only content (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586302 [158] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [159] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [160] Issue #3586317: Fix Scheduler as optional and correct AI module version in docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/209 [161] 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 [162] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [163] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [164] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [165] Issue #3586302: Exposed tooltip/truncated content and icon meaning to assistive tech. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/199 [166] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [167] 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 [168] 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 [169] Support keyword discovery in nested conditions. (ai_search, MR) — https://git.drupalcode.org/project/ai_search/-/merge_requests/54 [170] Allow Data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590040 [171] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590038 [172] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590041 [173] Allow data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590039 [174] Allow data attributes for dom purify. (agui, MR) — https://git.drupalcode.org/project/agui/-/merge_requests/31 --- MODULE SUMMARIES ---

                                          AI (Artificial Intelligence)

                                          The AI module continued steady progress this period, with work spanning user experience refinement, infrastructure improvements, and new capabilities for semantic search and rich content processing.

                                          A merge request to add a reranking processor for Search API is now under review. Reranking improves search precision by re-ordering initial results with a dedicated AI model, and the new processor integrates with the existing rerank operation type to work across any Search API backend. Separately, development continued on rich-text image description support for AI Automators, which will allow automations to process images embedded in formatted text fields—useful for content moderation and accessibility workflows.

                                          Progress was made on two streaming and compatibility fixes: a bug causing HTML tags to be incorrectly escaped in streamed output and an incompatibility with Gemini 2.x models when streaming is enabled. Both issues have open merge requests awaiting review. Documentation also saw attention, with proposed fixes for outdated references to automator plugin IDs and deprecated modules.

                                          Several user experience improvements were flagged, including incorrect language output in the CKEditor summarize tool and inconsistent naming conventions across the UI. Work also continued on the semantic topic matching mode for the RestrictToTopic guardrail, which will match topics by meaning rather than exact strings.

                                          How can I help on this project?

                                          • Prioritize reviewer capacity for merge requests addressing streaming bugs and Search API reranking, as these are blocking broader adoption.
                                          • Sponsor UX review time for the language-output and UI consistency issues to ensure a polished experience before the next stable release.

                                          Contributors: Abhinav Jha (ajabhinavjha30), Abhisek Mazumdar (abhisekmazumdar), Ahmad Khader (Ahmad-Khader), Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB), Marcus Johansson (Marcus_Johansson)

                                          ---

                                          Drupal AI Initiative

                                          The Drupal AI Initiative held a user experience meeting focused on refining two key interface components. Work continued on improving the Canvas chat feature, where the team is simplifying how users control AI-generated content. The interface will now offer clearer options for pausing generation and reverting changes, making it easier for users to maintain control over automated workflows.

                                          The team also progressed on the AI Content Review tool, which allows organizations to define their own content quality standards. This feature will enable users to create custom review criteria through a form-based interface, supporting both example-based scoring and other evaluation methods. This positions the module to serve diverse content governance needs across different organizations.

                                          No code was merged during this period, reflecting the focus on design and planning activities typical of alpha-stage development.

                                          How can I help on this project?

                                          • Ensure the team has adequate design resources to translate the user experience decisions into implemented features.
                                          • Connect the initiative with early adopter organizations willing to pilot the Content Review tool once available.
                                          ---

                                          AI Integration - ECA

                                          Activity during this period focused on planning for a new interceptor capability. A feature request was opened to create a submodule that would allow the ECA (Event-Condition-Action) system to interact with AI requests and responses as they occur. This would enable non-technical administrators to configure automated workflows that trigger when AI operations succeed, fail, or encounter rate limits—without writing code.

                                          The proposed submodule would expose AI events, conditions, and actions through ECA's visual interface, allowing business users to build integrations such as logging AI usage, handling errors gracefully, or routing requests based on content safety rules. This aligns with the project's roadmap toward a stable 1.0.0 release and represents a strategic investment in making AI capabilities more accessible to site managers.

                                          No code was merged or committed during this period. The work is in the planning stage, with design discussions underway.

                                          How can I help on this project?

                                          • Clarify priority: confirm whether the interceptor submodule should be completed before or after the 1.0.0 release, to help focus development resources.
                                          • Ensure design review: convene stakeholders to validate the proposed workflow capabilities meet real business use cases.
                                          ---

                                          Anthropic Provider

                                          A significant feature expansion is underway to give users more control over how the Anthropic integration manages conversations and tracks usage. A merge request adding token counting, citations, and context management was opened during this period. This work introduces three new optional capabilities: the ability to measure conversation size (token counting), track where information comes from (citations), and manage long conversations by automatically condensing or editing earlier exchanges (context management). All three features are designed to be turned off by default, preserving the current user experience until administrators choose to enable them.

                                          This represents continued progress on the provider's transition to a more robust architecture. Because the features are opt-in, the change introduces minimal risk to existing deployments. The module remains in active development as part of a broader modernization effort.

                                          How can I help on this project?

                                          • Prioritize review and testing resources for the open merge request to accelerate delivery of the new capabilities.
                                          • Clarify whether token counting or citation tracking aligns with organizational compliance or usage monitoring requirements, which could inform prioritization.

                                          Contributors: Carlos Ospina (camoa)

                                          ---

                                          AI Agents

                                          The AI Agents module made progress this period on both technical infrastructure and extensibility features. A key enhancement to improve diagnostics and developer insight was completed: the ability to track caller context when agents make decisions. This improvement allows the system to better trace where requests originate, particularly when agents invoke other agents or tools, which helps with debugging complex workflows.

                                          Two open proposals are under active consideration for streaming responses and internal data handling improvements, though neither represents a blocking issue. Development continues on a system to control the order in which agents execute tools, aimed at preventing illogical sequences that currently require manual workarounds. This feature would give administrators more predictable control over agent behaviour.

                                          Strategically, the module is exploring extensibility to external platforms like Claude Code and VAPI through an export and sync capability, which would allow Drupal-configured agents to operate in broader AI ecosystems. Work is also underway on role-based permissions for autonomous agents, enabling agents to run in background jobs without active user sessions.

                                          How can I help on this project?

                                          • Clarify strategic priority for external platform integration: does the organisation want Drupal agents interoperable with third-party AI services, or should development focus on native capabilities?
                                          • Review whether autonomous agent workflows require additional security policy or governance before progressing the role-based permissions work.

                                          Contributors: Alin Ameiroaie (aalin) [1], Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511)

                                          ---

                                          Drupal Canvas

                                          Over the past 24 hours, Canvas addressed several critical issues affecting translation workflows, conflict detection, and code quality. A fix was merged to resolve a fatal error that prevented translation jobs from being created when component trees included non-text properties such as dates or booleans. Multi-line text fields in components are now correctly marked as translatable, ensuring content can flow through translation systems as expected.

                                          The conflict detection system reached a milestone: changes can now be published only when no conflicts exist, preventing users from inadvertently overwriting work made outside their editing session. Automated enforcement of code standards was expanded to disallow ambiguous short ternary operators, improving maintainability. Testing infrastructure was strengthened with the addition of automated layout fixtures for the AI page builder agent, reducing the need for manual validation after prompt changes.

                                          Several issues remain open, including compatibility work for Drupal 11.4, a fix for publishing pages without URL aliases, and improvements to how the content-entity-reference UI exposes fields. These are being addressed through active merge requests.

                                          How can I help on this project?

                                          • Prioritise code review and testing bandwidth for the open Drupal 11.4 compatibility merge request to unblock the next stable release.
                                          • Approve dedicated testing time for open fixes affecting publishing workflows, particularly the URL alias and access check issues.

                                          Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Abhishek Dhariwal (adaptative), AKHIL BABU (AkhilBabu) [1], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Fons Vandamme (f0ns), Gábor Hojtsy (goba), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR) [1], Prabhavathi Vanipenta (prabha1997), Ravi Maniyar (ravi.maniyar.123), Wim Leers (wimleers) [4]

                                          ---

                                          Context Control Center (CCC)

                                          Sprint planning for Sprint 13 is underway, with the team prioritising work toward the upcoming beta3 release. A documentation issue addressing incorrect dependency requirements and version information was merged, ensuring beta testers encounter accurate installation guidance.

                                          The project is working through a structured code review and cleanup ahead of beta3. Several merge requests are open to address accessibility, cacheability, and developer experience improvements identified through AI-assisted best-practices audits. These include making tooltip and icon content accessible to assistive technologies, improving JavaScript filter feedback, and hardening update hooks against edge cases. Work is also progressing on the scope plugin persistence API, which will allow scope plugins to fully manage their own data lifecycle without leaking storage details into forms and entity logic.

                                          Two architectural extensions are under discussion: a formal external context provider interface to support third-party RAG and vector store integrations, and an opt-out mechanism for agents that prefer on-demand context retrieval over automatic injection. Both are being evaluated for inclusion before the stable release.

                                          Planning is underway for beta3 quality assurance, beta tester recruitment, and release documentation. The team is working toward a release candidate, with remaining blockers focused on scope selection logic, permissions review, and completion of the document loader submodule promotion.

                                          How can I help on this project?

                                          • Expand beta tester recruitment by promoting the module through organisational channels or partner networks to surface real-world integration issues before stable release.
                                          • Prioritise resourcing for accessibility and user experience reviews to ensure the upcoming stable release meets enterprise adoption standards.

                                          Contributors: Joshua Fernandes (joshua1234511), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) [1], Tamas Balog (tbalog)

                                          ---

                                          AI Search

                                          A new merge request was opened to support keyword discovery in nested conditions. This enhancement will improve the module's ability to handle more complex search queries, allowing users to perform sophisticated searches where keywords appear within layered conditions. This represents progress toward making the search functionality more flexible and capable of meeting advanced user needs.

                                          No issues were updated or commits merged during this period. The module continues its development trajectory with work in progress on query handling capabilities.

                                          How can I help on this project?

                                          • Ensure the team has adequate code review capacity to assess and merge the pending keyword discovery work.
                                          • Consider whether there are end-user stakeholders who should validate the enhanced search capabilities before release.

                                          Contributors: marios anagnostopoulos (MariosAnagnostopoulos)

                                          ---

                                          AG-UI

                                          AG-UI, a module for integrating AI-driven user interfaces, made progress on expanding how system-generated content can be presented and how errors are handled. A change was merged to allow data attributes in parsed HTML, enabling the system to attach supplemental information from the language model to page elements without displaying it directly to users. This creates opportunities for richer interactions and more contextual user experiences.

                                          Work has also begun on improving error handling. An issue is now open to add events for failures, which will allow the system to respond more gracefully when remote services time out or encounter exceptions. This will help provide clearer feedback to users when issues occur, rather than leaving them without explanation.

                                          These efforts reflect continued refinement of the module's core capabilities as it matures through its development cycle.

                                          How can I help on this project?

                                          • Clarify use cases or priorities for error handling to guide the open work on failure events.
                                          • Ensure development resources remain allocated to close out open issues and advance toward a stable release.

                                          Contributors: Bryan Sharpe (b_sharpe) [1]

                                          ======================================================================== ## [22] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 0 Judge flags: 0 ======================================================================== ## [23] 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] Preserve HTML in streamed output (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586558 [2] Drupal Eval Commons umbrella (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586445 [3] RestrictToTopic guardrail: add semantic topic matching mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3584977 [4] AI CKEditor Summarize generates summaries in a different language than the selected text (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586580 [5] Create plugins for interacting with multimedia in AI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3463843 [6] 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 [7] Add an AI reranking processor for Search API (owned by the AI module) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586543 [8] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [9] Standardize thread/caller correlation on AI OTel spans (map tags to gen_ai.conversation.id) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586581 [10] Guardrail plugins only evaluate the last message (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579088 [11] Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586542 [12] Add rich-text image description support to AI Automators (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586478 [13] "AI Guardrails" or "AI Moderation Guardrails"? (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586471 [14] [Sprint5] Research and draft first mapping Drupal AI Agents to Symfony AI Agents (including chat) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3567006 [15] Auto-update default prompt entities on module updates, but only if the site has not customized them (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582350 [16] Create Provider Documentation Page for OpenAI (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3533040 [17] Show last-modified date on documentation pages (mkdocs-git-revision-date-localized-plugin) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586541 [18] Rename Guardrails "RegExp guardrail" plugin to just "RegEx" (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586475 [19] Allow for manual override for new models from provider APIs in AI module settings (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3540491 [20] To save resources make it easy to reuse requests in manual testing (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3554853 [21] Adopt symfony/ai component v0.8 as platform provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586427 [22] PHP/JS Function to Engage the Chat with a prompt (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3534530 [23] Graceful error handling when an AI Provider is not setup correctly (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549312 [24] Truncate long input and output body in AI logs (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556125 [25] Placeholders not available when using advanced (token) mode (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3525367 [26] Make AI API Explorer have chat history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3528949 [27] Make API explorer work with Symfony platform and legacy providers (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586470 [28] TypeError in AutomatorBaseAction::getAutomatorsOptions() when automating base fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586430 [29] Integrate ChatProcessor plugin system into AI Chatbot DeepChat block (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585077 [30] Add AI Assistant API ChatProcessor plugin (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585075 [31] AiPromptSubForm validates inline prompt against stale prompt type when multiple ai_prompt elements exist (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586548 [32] Improve ai_ckeditor UX when no provider modules are installed (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586549 [33] ai_prompt entity validation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549664 [34] Render images and videos inside the chatbot viewport (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586518 [35] Improve property limit widgets with proper enum/boolean support and fix FixedValue type mismatch (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586393 [36] Guardrail set - "Stop threshold" documentation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586477 [37] Create assisted structured output generation (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3556378 [38] Add "Request rate limit has been exceeded" error messages to AI Log (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3561399 [39] Allow Field Widget Actions to target a specific automator (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3571915 [40] Document streaming helping methods and add change record (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3579930 [41] Assistant rewrites links poorly or hallucinates links sometimes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499610 [42] RestrictToTopic guardrail: add opt-in logging when a topic is flagged (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586486 [43] Error: Object of class Drupal\ai\OperationType\GenericType\VideoFile could not be converted to string in file_put_contents() (line 498 of /var/www/html/testu/web/core/lib/Drupal/Core/File/FileSystem.php) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3551584 [44] Match "Global Guardrails" config page title with "Global AI Guardrails" menu item (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586476 [45] Separate AI Chatbot documentation from AI Assistant API (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3538657 [46] Provider configuration on assistant, when run as agent, is not being sent to provider (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3543368 [47] Schema errors for an Automator field (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585104 [48] Update the AI Assistant documentation - 2.0.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3549561 [49] Add optional prompt to ImageToVideoInput and clean up the class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586540 [50] Functioncall schema error with special model (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3573038 [51] Agent/Assistant Conversion Operations (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574046 [52] Show in the UI that an AI Agent is "Connected" to the Assistant (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3574064 [53] backport: one-click link should show human name (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3580328 [54] ActionPluginDeriver crashes AI features when an action plugin lacks an instance class (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585335 [55] Standardize "AI Automator" naming across UI [1.x] (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3585382 [56] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [57] Resolve #3586558 "Preserve HTML in streamed output" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1734 [58] Issue #3584977: RestrictToTopic guardrail: add semantic topic matching mode. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1529 [59] Issue #3586543: Add AI reranking processor for Search API. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1729 [60] Issue #3586425: Resolve "ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1584 [61] Issue #3586542: Fix documentation staleness — automator-type ID drift,... (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1737 [62] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1679 [63] Issue #3586478: "Add rich-text image description support to AI Automators" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1628 [64] Drupal AI UX meeting 29 June 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3586592 [65] Add AI ECA Interceptor submodule: intercept AI requests/responses through ECA (ai_integration_eca, Issue) — https://git.drupalcode.org/project/ai_integration_eca/-/work_items/3584407 [66] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [67] Let an agent use a role when running a tool (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3518167 [68] Explore export/sync plugin system for AI Agents to external agent platforms (Claude Code, VAPI, etc.) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3577241 [69] 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 [70] Add caller agent runner ID to tags in determineSolvability() (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3574487 [71] Issue #ai_agents-3578197:ContentEntitySeeder-Crashes-Double-Wrapped fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/291 [72] Issue #3560681: Add per-tool execution ordering constraints for agent loops. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/252 [73] Issue #ai_agents-3577520: Streaming fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/290 [74] 3574487: Add caller agent runner ID to tags in determineSolvability(). (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/238 [75] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [76] WSOD AssertionError: assert(!$data instanceof ComponentInputsMapping) in assert() when requesting tmgmt translation job for some component trees (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591734 [77] `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 [78] Match multi-line string props without a matches-everything Regex marker, then remove JitSafeRegexValidator (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591762 [79] Suppress spurious getcwd() errors in PHPUnit CI job logs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591765 [80] Automate review using PHPStan: disallow short ternary (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591671 [81] Canvas should mark multi-line string props on SDCs and code components as translatable (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591760 [82] Make Canvas test suite pass on 11.4; drop support for 11.2 (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591764 [83] Make tests pass again on Drupal 11.3: block config schema changed, `ComponentInputsEvolutionTest` needs to handle <=11.2 vs >11.2 differently (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591701 [84] Prepare for PHPStan 2.x (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3501228 [85] Canvas AI: Add layout fixtures and automated tests for the Canvas AI page builder agent (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591457 [86] Canvas AI: Component context required props missing required flag (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591655 [87] Automate MR review using PHPat: keep `StagedLanguageConfigOverride` config entity type-agnostic (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591721 [88] Prevention of publishing on Conflict in Canvas UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3587526 [89] 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 [90] 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 [91] Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591683 [92] Canvas AI: Drupal\canvas_ai\AiResponseValidator fails to validate non-existent props (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591663 [93] Spike: TMGMT Auto-job creation for Canvas' translatable content & config entities (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3589814 [94] Add heuristics for exposing fields/props to the content-entity-reference selection UI (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591669 [95] Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591516 [96] Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3582390 [97] [DX regression] Canvas AI: Add 'YAML Path Equals' and 'YAML Path Exists' plugins (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3579681 [98] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [99] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [100] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [101] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [102] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [103] Issue #3575644: Inefficient RegexConstraint on StringLong fields causes "JIT stack limit reached" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1276 [104] #3591736 "Access check in ApiAutoSaveController::post() should be performed earlier" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1302 [105] fix(Shape matching, translation): #3591734 Fix WSOD requesting a TMGMT translation job for components with non-text props (date (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1296 [106] 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 [107] #3591764: Make Canvas test suite pass on 11.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1332 [108] Fix high level translation settings experience for Canvas (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1303 [109] Resolve "Automate review using PHPStan: disallow short ternary" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1240 [110] chore(Shape matching, translation): #3591760 Multi-line string props on SDCs and code components should be marked as translatable (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1327 [111] feat(conflict): Add conflict resolution UI with viewport selection and route integration (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1183 [112] fix(Page): #3591763 Publishing a page without a URL alias fails: its empty... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1331 [113] feat(Conflict detection): #3587526 "Detect conflicts during publishing of changes to Page entity" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1193 [114] Resolve "Follow-up for #3591596: add PHPat rules for keeping `StagedLanguageConfigOverride` config entity type-agnostic" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1324 [115] #3591683: Follow-up for #3591584: remove `ApiAutoSaveControllerTranslationTest::$configSchemaCheckerExclusions` (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1322 [116] Issue #3591663: Fail validation for props that do not exist on a component (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1330 [117] Draft: feat(Conflict detection): #3591591 Expand conflict resolution UI with... (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1317 [118] feat(Internal HTTP API): #3591669 Heuristics for the content-entity-reference selection UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1289 [119] Fix required prop flag dropped in processSdc() and missing in processCodeComponents(). (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1328 [120] Add layout fixture and tests for page builder agent (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1329 [121] Draft: Issue #3591668: Add text-based comparison of entities UI (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1266 [122] Sprint 13 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586293 [123] Documentation corrections: dependency requirements and AI module version (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586317 [124] [Meta] Fix CCC issues based on AI Best Practices results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586298 [125] [Feature] Add ExternalContextProviderInterface and ContextQueryInterface to support RAG/vector store integrations (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586289 [126] Provide real sample context items for end user use (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586279 [127] Gather CCC contribution stats for code and non-code contributions for release notes (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586222 [128] Inject context into ai_ckeditor requests (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3581955 [129] Promote Document Loader: Context Importer from experimental to stable (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586282 [130] Introduce explicit scope types and item inclusion modes; clarify selection in UI and docs (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586281 [131] Review and update CCC permissions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3574937 [132] Allow scope plugins to declare an optional icon for UI display (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586262 [133] Complete scope plugin persistence API: manager orchestration, target entity encapsulation, and plugin-driven admin/selection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586243 [134] Create multi-vocabulary taxonomy scope plugin (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586237 [135] Create CCC video showing how to configure it (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586153 [136] Tune conditional subcontext logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586199 [137] Recruit CCC beta testers (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586235 [138] Add opt-in AiContextSelectionDiagnostics to selection results (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586242 [139] CCC beta3 release planning (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586182 [140] 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 [141] Allow subcontext scope to override parent scope (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586218 [142] Clean up CCC accessible interactive links and external links (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586301 [143] Clean up CCC cacheability and access metadata (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586300 [144] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [145] [Meta] CCC cleanup from beta3 code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [146] [Meta] CCC cleanup from beta3 code review findings for beta3 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586310 [147] Harden update 10011: empty-chunk guard and NULL-only backfill (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586316 [148] Syncing saves bypass all integrity constraints instead of only the global cap (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586313 [149] Item form discards user-entered scope when the subcontext feature is disabled (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586314 [150] Unset inherit_parent_scope silently wipes stored scope on save (data loss) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586312 [151] 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 [152] Evaluate Annotations module and how it might work with CCC (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586268 [153] Allow agents to opt-out of context auto-injection (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586308 [154] Clean up CCC test and documentation consistency before rc1 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586299 [155] Clean up CCC documentation and API consistency (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586305 [156] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [157] Clean up CCC tooltip, truncation, and icon-only content (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586302 [158] Clean up CCC JavaScript filter feedback (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586303 [159] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [160] Issue #3586317: Fix Scheduler as optional and correct AI module version in docs. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/209 [161] 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 [162] Issue #3586301: Clean up CCC accessible interactive links and external links. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/200 [163] Issue #3586300: Updated CCC cacheability and access metadata. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/204 [164] Issue #3586218: Allow subcontext scope to override parent scope. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/159 [165] Issue #3586302: Exposed tooltip/truncated content and icon meaning to assistive tech. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/199 [166] Issue #3586299: Fix test and documentation consistency before rc1. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/207 [167] 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 [168] 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 [169] Support keyword discovery in nested conditions. (ai_search, MR) — https://git.drupalcode.org/project/ai_search/-/merge_requests/54 [170] Allow Data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590040 [171] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590038 [172] Add events for failures (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590041 [173] Allow data attributes in parsed HTML (agui, Issue) — https://git.drupalcode.org/project/agui/-/work_items/3590039 [174] Allow data attributes for dom purify. (agui, MR) — https://git.drupalcode.org/project/agui/-/merge_requests/31 --- TODAY'S MODULE SUMMARIES ---

                                            AI (Artificial Intelligence)

                                            The AI module continued steady progress this period, with work spanning user experience refinement, infrastructure improvements, and new capabilities for semantic search and rich content processing.

                                            A merge request to add a reranking processor for Search API is now under review. Reranking improves search precision by re-ordering initial results with a dedicated AI model, and the new processor integrates with the existing rerank operation type to work across any Search API backend. Separately, development continued on rich-text image description support for AI Automators, which will allow automations to process images embedded in formatted text fields—useful for content moderation and accessibility workflows.

                                            Progress was made on two streaming and compatibility fixes: a bug causing HTML tags to be incorrectly escaped in streamed output and an incompatibility with Gemini 2.x models when streaming is enabled. Both issues have open merge requests awaiting review. Documentation also saw attention, with proposed fixes for outdated references to automator plugin IDs and deprecated modules.

                                            Several user experience improvements were flagged, including incorrect language output in the CKEditor summarize tool and inconsistent naming conventions across the UI. Work also continued on the semantic topic matching mode for the RestrictToTopic guardrail, which will match topics by meaning rather than exact strings.

                                            How can I help on this project?

                                            • Prioritize reviewer capacity for merge requests addressing streaming bugs and Search API reranking, as these are blocking broader adoption.
                                            • Sponsor UX review time for the language-output and UI consistency issues to ensure a polished experience before the next stable release.

                                            Contributors: Abhinav Jha (ajabhinavjha30), Abhisek Mazumdar (abhisekmazumdar), Ahmad Khader (Ahmad-Khader), Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB), Marcus Johansson (Marcus_Johansson)

                                            ---

                                            Drupal AI Initiative

                                            The Drupal AI Initiative held a user experience meeting focused on refining two key interface components. Work continued on improving the Canvas chat feature, where the team is simplifying how users control AI-generated content. The interface will now offer clearer options for pausing generation and reverting changes, making it easier for users to maintain control over automated workflows.

                                            The team also progressed on the AI Content Review tool, which allows organizations to define their own content quality standards. This feature will enable users to create custom review criteria through a form-based interface, supporting both example-based scoring and other evaluation methods. This positions the module to serve diverse content governance needs across different organizations.

                                            No code was merged during this period, reflecting the focus on design and planning activities typical of alpha-stage development.

                                            How can I help on this project?

                                            • Ensure the team has adequate design resources to translate the user experience decisions into implemented features.
                                            • Connect the initiative with early adopter organizations willing to pilot the Content Review tool once available.
                                            ---

                                            AI Integration - ECA

                                            Activity during this period focused on planning for a new interceptor capability. A feature request was opened to create a submodule that would allow the ECA (Event-Condition-Action) system to interact with AI requests and responses as they occur. This would enable non-technical administrators to configure automated workflows that trigger when AI operations succeed, fail, or encounter rate limits—without writing code.

                                            The proposed submodule would expose AI events, conditions, and actions through ECA's visual interface, allowing business users to build integrations such as logging AI usage, handling errors gracefully, or routing requests based on content safety rules. This aligns with the project's roadmap toward a stable 1.0.0 release and represents a strategic investment in making AI capabilities more accessible to site managers.

                                            No code was merged or committed during this period. The work is in the planning stage, with design discussions underway.

                                            How can I help on this project?

                                            • Clarify priority: confirm whether the interceptor submodule should be completed before or after the 1.0.0 release, to help focus development resources.
                                            • Ensure design review: convene stakeholders to validate the proposed workflow capabilities meet real business use cases.
                                            ---

                                            Anthropic Provider

                                            A significant feature expansion is underway to give users more control over how the Anthropic integration manages conversations and tracks usage. A merge request adding token counting, citations, and context management was opened during this period. This work introduces three new optional capabilities: the ability to measure conversation size (token counting), track where information comes from (citations), and manage long conversations by automatically condensing or editing earlier exchanges (context management). All three features are designed to be turned off by default, preserving the current user experience until administrators choose to enable them.

                                            This represents continued progress on the provider's transition to a more robust architecture. Because the features are opt-in, the change introduces minimal risk to existing deployments. The module remains in active development as part of a broader modernization effort.

                                            How can I help on this project?

                                            • Prioritize review and testing resources for the open merge request to accelerate delivery of the new capabilities.
                                            • Clarify whether token counting or citation tracking aligns with organizational compliance or usage monitoring requirements, which could inform prioritization.

                                            Contributors: Carlos Ospina (camoa)

                                            ---

                                            AI Agents

                                            The AI Agents module made progress this period on both technical infrastructure and extensibility features. A key enhancement to improve diagnostics and developer insight was completed: the ability to track caller context when agents make decisions. This improvement allows the system to better trace where requests originate, particularly when agents invoke other agents or tools, which helps with debugging complex workflows.

                                            Two open proposals are under active consideration for streaming responses and internal data handling improvements, though neither represents a blocking issue. Development continues on a system to control the order in which agents execute tools, aimed at preventing illogical sequences that currently require manual workarounds. This feature would give administrators more predictable control over agent behaviour.

                                            Strategically, the module is exploring extensibility to external platforms like Claude Code and VAPI through an export and sync capability, which would allow Drupal-configured agents to operate in broader AI ecosystems. Work is also underway on role-based permissions for autonomous agents, enabling agents to run in background jobs without active user sessions.

                                            How can I help on this project?

                                            • Clarify strategic priority for external platform integration: does the organisation want Drupal agents interoperable with third-party AI services, or should development focus on native capabilities?
                                            • Review whether autonomous agent workflows require additional security policy or governance before progressing the role-based permissions work.

                                            Contributors: Alin Ameiroaie (aalin) [1], Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511)

                                            ---

                                            Drupal Canvas

                                            Over the past 24 hours, Canvas addressed several critical issues affecting translation workflows, conflict detection, and code quality. A fix was merged to resolve a fatal error that prevented translation jobs from being created when component trees included non-text properties such as dates or booleans. Multi-line text fields in components are now correctly marked as translatable, ensuring content can flow through translation systems as expected.

                                            The conflict detection system reached a milestone: changes can now be published only when no conflicts exist, preventing users from inadvertently overwriting work made outside their editing session. Automated enforcement of code standards was expanded to disallow ambiguous short ternary operators, improving maintainability. Testing infrastructure was strengthened with the addition of automated layout fixtures for the AI page builder agent, reducing the need for manual validation after prompt changes.

                                            Several issues remain open, including compatibility work for Drupal 11.4, a fix for publishing pages without URL aliases, and improvements to how the content-entity-reference UI exposes fields. These are being addressed through active merge requests.

                                            How can I help on this project?

                                            • Prioritise code review and testing bandwidth for the open Drupal 11.4 compatibility merge request to unblock the next stable release.
                                            • Approve dedicated testing time for open fixes affecting publishing workflows, particularly the URL alias and access check issues.

                                            Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Abhishek Dhariwal (adaptative), AKHIL BABU (AkhilBabu) [1], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis) [1], Fons Vandamme (f0ns), Gábor Hojtsy (goba), Matt Glaman (mglaman), Narendra Singh Rathore (NarendraR) [1], Prabhavathi Vanipenta (prabha1997), Ravi Maniyar (ravi.maniyar.123), Wim Leers (wimleers) [4]

                                            ---

                                            Context Control Center (CCC)

                                            Sprint planning for Sprint 13 is underway, with the team prioritising work toward the upcoming beta3 release. A documentation issue addressing incorrect dependency requirements and version information was merged, ensuring beta testers encounter accurate installation guidance.

                                            The project is working through a structured code review and cleanup ahead of beta3. Several merge requests are open to address accessibility, cacheability, and developer experience improvements identified through AI-assisted best-practices audits. These include making tooltip and icon content accessible to assistive technologies, improving JavaScript filter feedback, and hardening update hooks against edge cases. Work is also progressing on the scope plugin persistence API, which will allow scope plugins to fully manage their own data lifecycle without leaking storage details into forms and entity logic.

                                            Two architectural extensions are under discussion: a formal external context provider interface to support third-party RAG and vector store integrations, and an opt-out mechanism for agents that prefer on-demand context retrieval over automatic injection. Both are being evaluated for inclusion before the stable release.

                                            Planning is underway for beta3 quality assurance, beta tester recruitment, and release documentation. The team is working toward a release candidate, with remaining blockers focused on scope selection logic, permissions review, and completion of the document loader submodule promotion.

                                            How can I help on this project?

                                            • Expand beta tester recruitment by promoting the module through organisational channels or partner networks to surface real-world integration issues before stable release.
                                            • Prioritise resourcing for accessibility and user experience reviews to ensure the upcoming stable release meets enterprise adoption standards.

                                            Contributors: Joshua Fernandes (joshua1234511), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia) [1], Tamas Balog (tbalog)

                                            ---

                                            AI Search

                                            A new merge request was opened to support keyword discovery in nested conditions. This enhancement will improve the module's ability to handle more complex search queries, allowing users to perform sophisticated searches where keywords appear within layered conditions. This represents progress toward making the search functionality more flexible and capable of meeting advanced user needs.

                                            No issues were updated or commits merged during this period. The module continues its development trajectory with work in progress on query handling capabilities.

                                            How can I help on this project?

                                            • Ensure the team has adequate code review capacity to assess and merge the pending keyword discovery work.
                                            • Consider whether there are end-user stakeholders who should validate the enhanced search capabilities before release.

                                            Contributors: marios anagnostopoulos (MariosAnagnostopoulos)

                                            ---

                                            AG-UI

                                            AG-UI, a module for integrating AI-driven user interfaces, made progress on expanding how system-generated content can be presented and how errors are handled. A change was merged to allow data attributes in parsed HTML, enabling the system to attach supplemental information from the language model to page elements without displaying it directly to users. This creates opportunities for richer interactions and more contextual user experiences.

                                            Work has also begun on improving error handling. An issue is now open to add events for failures, which will allow the system to respond more gracefully when remote services time out or encounter exceptions. This will help provide clearer feedback to users when issues occur, rather than leaving them without explanation.

                                            These efforts reflect continued refinement of the module's core capabilities as it matures through its development cycle.

                                            How can I help on this project?

                                            • Clarify use cases or priorities for error handling to guide the open work on failure events.
                                            • Ensure development resources remain allocated to close out open issues and advance toward a stable release.

                                            Contributors: Bryan Sharpe (b_sharpe) [1]

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