# Prompt log — 24h 2026-08-04 ======================================================================== ## [1] summariseModule:ai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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), Abhishek Dhariwal (adaptative), Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511), Marcus Johansson (Marcus_Johansson), Ricardo Castañeda (cadence96), Rob Loach (robloach), Rodel Duterte (rduterte), Shivam Sen (shivamsen_12579)". 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). ### [Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x](https://git.drupalcode.org/project/ai/-/work_items/3586639) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Artem Dmitriiev (a.dmitriiev), Christoph Breidert (breidert) | Labels: category::plan, priority::normal, state::accepted Description: ### Problem/Motivation A coordinated set of 12 issues — the **Chat Fundamentals plan** — has been filed across the ai and ai_agents queues, proposing that rich structured chat (content blocks, citations, tool output rendering, forms-in-chat via elicitation, pre-tool confirmation, progress, suggested replies) be built by adopting the Model Context Protocol shapes (spec revision 2025-06-18) directly as the canonical array shapes. All 12 issues are deliberately filed as **`state::postponed`**: they are a design proposal awaiting maintainer approval, not work in progress. Nothing in the set is i… ### [[Meta] Rich structured chat: adopt MCP content and interaction shapes](https://git.drupalcode.org/project/ai/-/work_items/3586640) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::plan, state::postponed Description: > ⚠️ **Postponed pending approval.** This issue set awaits maintainer approval — see the [approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639). It targets the **1.6.x branch once it is created**; nothing here is intended for 1.5.x. ### Problem/Motivation Chat responses in the AI ecosystem are plain text plus one trusted-HTML escape hatch. Concretely, on 1.5.x today: - `ChatMessage` carries only `role`, `text`, `files`, `remoteFiles`, `tools`, `toolId`. There is no metadata bag and no slot for structured payloads. - `ChatOutput::$metadata` is `mixed`, settable only thr… ### [(Optional) Typed context references on user messages via input-side content blocks](https://git.drupalcode.org/project/ai/-/work_items/3586648) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Optional capability** — the output-side issue set stands without it. **Depends on:** [content blocks (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643); history persistence via [structured response channel (#3586644)](https://git.drupalcode.org/project/ai/-/work_items/3586644). ### P… ### [Citations/sources and suggested replies via MCP shapes](https://git.drupalcode.org/project/ai/-/work_items/3586647) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks + `_meta` registry (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643), [structured response channel (#3586644)](https://git.drupalcode.org/project/ai/-/work_items/3586644), [renderers (#3586645)](https://git.drupalcode.org/project/ai/-/work_items/3586645)… ### [Elicitation round-trip: MCP-shaped request/result objects and pause/resume on ChatProcessor](https://git.drupalcode.org/project/ai/-/work_items/3586646) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks + `_meta` conventions (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643); shares the interface-evolution pattern with the structured-response child issue and can be developed in parallel with it. ### Problem/Motivation There is no way for a processor — … ### [ChatBlockRenderer plugin type with default renderers and entity cards](https://git.drupalcode.org/project/ai/-/work_items/3586645) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks on ChatMessage (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643). ### Problem/Motivation Once messages carry MCP content blocks (#3586643), every consumer still needs bespoke code to turn a block into markup. Without a shared rendering path, each chatb… ### [ChatProcessor: structured response channel and block-aware message history](https://git.drupalcode.org/project/ai/-/work_items/3586644) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks on ChatMessage (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643) and [streamed metadata fix (#3586641)](https://git.drupalcode.org/project/ai/-/work_items/3586641). ### Problem/Motivation The ChatProcessor plugin type (`Drupal\ai\Plugin\ChatProcessor\C… ### [Add MCP content blocks and a _meta bag to ChatMessage](https://git.drupalcode.org/project/ai/-/work_items/3586643) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640) (conventions). Foundation for the structured-response, renderer, elicitation, agent-loop and citations child issues (see the meta issue's child list). ### Problem/Motivation `ChatMessage` can carry only text, files… ### [Add MCP tool annotations to tool definitions and a ContentBlockProducerInterface for rich tool results](https://git.drupalcode.org/project/ai/-/work_items/3586642) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** nothing (wave 1 of the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640)). Pairs with the content-blocks child issue (03) for block shape validation and the ai_agents pre-tool confirmation child issue (08) for gating — see the meta issue's child list for links. ### Pro… ### [Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction](https://git.drupalcode.org/project/ai/-/work_items/3586641) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::bug, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** nothing (wave 1 of the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640)). ### Problem/Motivation `ChatOutput` has a `getMetadata(): mixed` accessor, but the metadata can only be set through the constructor's third argument. There is no `setMetadata()`. This has two c… ### [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-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, Needs manual testing, aiCoreModule 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… ### [Modules should register the AI request tags they can emit, at install time and dynamically](https://git.drupalcode.org/project/ai/-/work_items/3586638) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, priority::normal, state::needs review Description: ## Summary Modules should **register the AI request tags they can emit**, so the set of possible tags is known before any request is made. Registration should happen at installation/discovery time for static tags, and dynamically for tags that only exist because of site configuration — an agent created as `foo` should register something like `ai_agent_foo_request`. ## Problem Tags are free-form strings passed as the third argument to every operation call, appended to the provider plugin, and only observable once a request has already been executed (line references against 1.5.x): - `ChatIn… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, Has Testing Steps Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1815 [Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it](https://git.drupalcode.org/project/ai/-/merge_requests/1815) | State: opened | Author: Abhishek Dhariwal (adaptative), 46 diff lines 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 ### [`AiReranker::extractItemText()` should prefer chunk text over configured indexed fields](https://git.drupalcode.org/project/ai/-/work_items/3586637) State: opened | Updated: 2026-08-05 | Author: Abhisek Mazumdar (abhisekmazumdar) | Assigned: Ann Mary Sruthy (annmarysruthy) | Labels: category::bug, priority::normal, state::accepted, v1.5.x-dev Description: ## Problem/Motivation `ai_search`'s chunk-mode retrieval (used by `RagTool` and any other consumer querying with `search_api_ai_get_chunks_result`) carries the actual chunk text in `$item->getExtraData('content')`, not in the item's configured indexed source fields. `AiReranker::extractItemText()` only reads the processor's configured `source_fields` off each result item. For chunk-mode results this means every chunk belonging to the same entity reranks against the same text: the entity's full configured field content, not the individual chunk. Chunk-level rerank quality regresses to entity-… ### [ai_provider_configuration renders an empty Configuration widget when the provider has no configuration options](https://git.drupalcode.org/project/ai/-/work_items/3586636) State: opened | Updated: 2026-08-04 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: category::bug, priority::minor, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1906 [Issue #3586636: Don't render an empty Configuration widget](https://git.drupalcode.org/project/ai/-/merge_requests/1906) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 17 diff lines Description: ### Overview The `ai_provider_configuration` form element renders an empty `Configuration` details widget when the selected provider has no configuration options for the operation type. ### Steps to reproduce 1. Check out the branch of MR https://git.drupalcode.org/project/ai_agents/-/merge_requests/315 in the `ai_agents` project (\[#3535760\]). 2. Open any AI agent and select a provider from the Request settings. 3. The configuration field is empty. Found while testing with the `litellm` provider. ![image.png](https://git.drupalcode.org/-/project/106525/uploads/87d910a86e016b1197f5486c1b8… ### [Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests](https://git.drupalcode.org/project/ai/-/work_items/3582633) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, Has Testing Steps Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1432 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module has a system for running FunctionalJavascript tests in CI that relies on two conventions: Every new FJS test class must have a @group annotation with the issue number it belongs to, so the filter script (scripts/filter-functio… ### [Drupal 11.4 DeepChat Block does not work with BigPipe enabled](https://git.drupalcode.org/project/ai/-/work_items/3586615) State: opened | Updated: 2026-08-04 | Author: jesmaster (Jesmaster) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::bug Description: Chatbot was working on Drupal 11.3, I updated to 11.4 and the chatbot doesn't open when clicked anymore, there are no javascript errors in the console log. I deleted the block and re-created it and I'm getting this AJAX error when choosing the assisstant. ### [AI Balloon Menu throws uncaught TypeError on selection change when user lacks 'use ai ckeditor' permission, breaking media insertion](https://git.drupalcode.org/project/ai/-/work_items/3586588) State: opened | Updated: 2026-08-04 | Author: Leandro Luvigne (lluvigne) | Assigned: Leandro Luvigne (lluvigne) | Labels: aiCkeditor, category::bug, state::needsWork Description: ## Summary The AI Balloon Menu (`ai_balloon_menu`) plugin does not check the `hasAccess` flag from the shared `ai_ckeditor_ai` config object, unlike the AI Assistant toolbar plugin (`aickeditor`) which correctly checks it. For users without the `use ai ckeditor` permission, this causes an uncaught `TypeError` on any non-collapsed selection change, which most commonly manifests as media insertion silently failing (the Media Library "Insert selected" AJAX request is aborted client-side). ## Steps to reproduce 1. Fresh Drupal core (Standard profile) + `composer require drupal/ai`, enable `ai` an… ### [Provide proper support for "unconfigured" AI provider state](https://git.drupalcode.org/project/ai/-/work_items/3572645) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: Levente Besenyei (LeventeB) | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [mxr576](https://www.drupal.org/user/315522) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation This is the second time we have hit a WSOD with the Gemini provider where simply enabling the module can break pages that instantiate AI provider clients. See #3572638: WSOD after module enabled. At the moment, this does not look like something that can… ### [[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: closed | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | 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 … ### [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-08-04 | Author: josecarlosmedero | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside 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… ### [AI Automator Token Replacement with removing unresolved Tokens (Checkbox?)](https://git.drupalcode.org/project/ai/-/work_items/3586535) State: opened | Updated: 2026-08-04 | Author: ro-no-lo | Assigned: Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, Needs review, Quick Win Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1884 [Issue #3586535: AI Automators strip unresolved tokens from prompts](https://git.drupalcode.org/project/ai/-/merge_requests/1884) | State: opened | Author: Rodel Duterte (rduterte), 237 diff lines Description: When we use the Advanced mode with Tokens in the AI Automator settings, Tokens which are not resolved by the Token system stay in the AI Prompt. This is not much text for AI, but everything what can be avoided to send to AI, should be removed. As an example. I have an Entity where I defined a textarea called field_user_prompt which can optionally (!) be used to alter the prompt I setup in the field AI automation. So there is a Token like this: [node:field_user_prompt:value]. This stays when the user left the field empty. It's only replaced when something is filled in. I do think that unresol… --- MERGE REQUESTS (24h) --- ### [Issue #3586539: Add ChatMemory plugin type](https://git.drupalcode.org/project/ai/-/merge_requests/1885) State: opened | Author: Rob Loach (robloach) | Branch: 3586539-chat-memory-interface | 2616 diff lines Description: Adds the ChatMemory plugin type originally from !1835 , without the other changes. Closes #3586539 ### [feat: #3586638 Add AI request tag registry with static and dynamic discovery](https://git.drupalcode.org/project/ai/-/merge_requests/1907) State: opened | Author: Ricardo Castañeda (cadence96) | Branch: 3586638-modules-should-register-the-ai-request-tags-they-can-emit-at-install-time-and-dynamically | 851 diff lines Description: ## Description Adds a tag registry service (`ai.tag_registry`) so modules can declare, up front, which AI request tags they may emit — closing the gap described in #3586638, where tags are free-form strings nobody declares until a request has already run. Two discovery paths feed the registry: - **Static** — a new `hook_ai_tags_info()` (documented in the new `ai.api.php`, this module had none before). Any module — OOP `#[Hook]` class or legacy procedural `.module` function — can implement it. ai core registers its own known tags in `src/Hook/AiTags.php` (operation types pulled from … ### [Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes.](https://git.drupalcode.org/project/ai/-/merge_requests/1277) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3499451-chatbot-closes-itself | 125951 diff lines Description: Closes #3499451 ### [#3582633: Add Functional JavaScript testing conventions and validation script](https://git.drupalcode.org/project/ai/-/merge_requests/1432) State: opened | Author: Shivam Sen (shivamsen_12579) | Branch: 3582633-document-functionaljavascript-test | 237 diff lines Description: (cherry picked from commit 20c8ac18d15a25ffd0db807b6e427e8b41d34cf7) Closes #3582633 ### [Resolve #3586539 "Add a ChatMemoryInterface for storing ChatBot chat history"](https://git.drupalcode.org/project/ai/-/merge_requests/1904) State: closed | Author: Marcus Johansson (Marcus_Johansson) | Branch: 3586539-chatbot-memory-from-1835 | 3029 diff lines Description: Resolves #3586539 ### [Issue#3586558:Preserve-HTML-In-Streamed-Output fixes.](https://git.drupalcode.org/project/ai/-/merge_requests/1818) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3586558-Preserve-HTML-In-Streamed-Output | 468 diff lines Description: ## Description ## Testing instructions 1. 2. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR contains no breaking API or hook changes, or the… --- COMMITS (24h) --- (none) ======================================================================== ## [2] summariseModule:ai_initiative:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal AI Initiative (machine name: ai_initiative) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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). ### [QA Meeting - 25th Feb 2026](https://git.drupalcode.org/project/ai_initiative/-/work_items/3575717) State: closed | Updated: 2026-08-04 | Author: drupalbot | Assigned: Madeline Tuhey (maddyt) | Labels: category::plan, meetings, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [maddyt](https://www.drupal.org/user/3843187) >>> Update Summary: QA Meeting - 25th Feb 2026 Check-in Date: 02/25/2026 Problem/Motivation Weekly QA Meeting to discuss updates around Drupal Pod Development and General QA Processes Points Discussed QA compatibility scenario testing start The QA team will begin testing the matrix of different compatibility scenarios for AI modules (e.g., AI context, AI search) starting next Monday. Compatibility scenarios documented in QA issue A list of specific compatibility testing scenarios will be added to th… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [3] summariseModule:ai_provider_openai:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: OpenAI Provider (machine name: ai_provider_openai) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Joshua Fernandes (joshua1234511)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

      OpenAI Provider

      then use

      ,

      ,

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

        How can I help on this project?

        " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Issue #3605812: Add a setup-provider agent skill to configure the OpenAI provider from an environment variable](https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/82) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3605812-create-a-skill | 624 diff lines Description: Closes #3605812. Adds `.agents/skills/setup-provider/SKILL.md` — an agent skill that sets up the OpenAI provider on a running site from the CLI, reading the API key from an existing environment variable and never touching the secret itself. Follows the pattern the two AI-core skills settled on (ai#3586561, ai#3586562): a single `SKILL.md`, driven by `drush key:save` plus core config commands. No tool plugins, no `drupal/tool` dependency, no PHP added — so there is nothing here to unit test and no new dependency to carry. ### What the skill does 1. Blocking clarification step — asks for the… --- 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-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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_provider_amazeeio:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: amazee.ai Private AI Provider (machine name: ai_provider_amazeeio) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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

          amazee.ai Private AI 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). ### [chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception](https://git.drupalcode.org/project/ai_provider_amazeeio/-/work_items/3586239) State: closed | Updated: 2026-08-04 | Author: Nik LePage (niklp) | Assigned: unassigned | Labels: Description: Apologies this is AI generated, but it's outside my remit. I encountered this while trying to generate some text. Didn't understand it, Claude seems to... Any chat() call made through ai_provider_amazeeio fails with: To use stream requests you must provide an stream handler closure via the OpenAI factory.whenever the call happens to execute inside an active PHP Fiber — which, on a default Drupal install with BigPipe enabled (core, on by default), is a routine occurrence, not an edge case. In practice this means the provider cannot currently be used for chat completions from most real request… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [6] summariseModule:ai_agents:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: AKHIL BABU (AkhilBabu) [1], Alexis Martínez (alexismmd), Bharat Kelotra (bharatkelotra), 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 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). ### [Expose the agent status stream as MCP-shaped progress to any chat consumer](https://git.drupalcode.org/project/ai_agents/-/work_items/3586072) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. Opt-in. **Depends on:** the [meta plan's conventions](https://git.drupalcode.org/project/ai/-/work_items/3586640); soft-depends on the [`_meta` key registry (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643). Independent of the ChatProcessor child issues. ### Problem/Mo… ### [Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation](https://git.drupalcode.org/project/ai_agents/-/work_items/3586071) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. Strictly opt-in. **Depends on (ai project):** [tool annotations (#3586642)](https://git.drupalcode.org/project/ai/-/work_items/3586642), [elicitation contract (#3586646)](https://git.drupalcode.org/project/ai/-/work_items/3586646). ### Problem/Motivation `AgentToolPreExecuteEvent` (`ai_age… ### [Preserve structured tool output as content blocks through the agent loop](https://git.drupalcode.org/project/ai_agents/-/work_items/3586070) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. **Depends on (ai project):** [ContentBlockProducerInterface + tool annotations (#3586642)](https://git.drupalcode.org/project/ai/-/work_items/3586642), [content blocks (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643), [structured response channel (#3586644)](https://gi… ### [Tool settings popup on agent edit form has no visible close/save button](https://git.drupalcode.org/project/ai_agents/-/work_items/3586066) State: opened | Updated: 2026-08-05 | Author: Abhisek Mazumdar (abhisekmazumdar) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: Novice, Quick Win, category::bug, priority::minor Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !335 [Tool settings popup on agent edit form has no visible close/save button](https://git.drupalcode.org/project/ai_agents/-/merge_requests/335) | State: opened | Author: AKHIL BABU (AkhilBabu), 95 diff lines Description: ## Problem/Motivation The tool-configuration popup on the agent edit form (`/admin/config/ai/tools-automation/agents/{agent}/edit/form`, click **Configure** under a tool) has no visible way to close or save it. The popup is a MicroModal (`css/micromodal.css`, `js/agents_form.js`) introduced in #3559183 / !213. Its header renders a close control: ```php // src/Form/AiAgentForm.php, createToolUsageForm() '' ``` `data-micromodal-close` makes it functional, but nothing renders it visibly. `css/micromodal.css` only draws the "✕" glyph on `.ai-modal__close:before`: ```css .ai-modal__header .ai-m… ### [Give a parent agent possibility to forward request as is](https://git.drupalcode.org/project/ai_agents/-/work_items/3550098) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: Marcus Johansson (Marcus_Johansson), Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation Many time a user is actually asking an orchestration agent just one instruction for one specific agent. Depending on how well the prompt is, there might be loss of information when this is forwarded to the subagent. If the parent knows that it should just forward the request as is, then it should be able to give this as a token instead. This helps both with consistency, but also costs and speed, since it will just output one token. Proposed resolution Create a token that th… ### [No way to limit the size of files passed to an agent](https://git.drupalcode.org/project/ai_agents/-/work_items/3586068) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: why::needsInfo Description: ## Problem Agents accept files onto the chat history, and no path applies a size limit. There is no configuration for a maximum size, and no check anywhere in the module. A site that needs one has to validate file sizes itself, before the file ever reaches the agent, and every integration has to reimplement that. Files are also carried in chat history and base64-encoded on every serialization, so the cost is not limited to the single request that introduced them. ## Proposed solution Would it make sense to make this a config on the agent, alongside the other per-agent limits? A per-agent… ### [AI Agents 1.3.3 release](https://git.drupalcode.org/project/ai_agents/-/work_items/3586069) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: category::task, priority::normal, state::accepted ### [AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image](https://git.drupalcode.org/project/ai_agents/-/work_items/3586067) State: closed | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !333 [AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image](https://git.drupalcode.org/project/ai_agents/-/merge_requests/333) | State: merged 2026-08-05 | Author: AKHIL BABU (AkhilBabu), 212 diff lines Description: ## Problem `AiAgentEntityWrapper::toArray()` and `::fromArray()` do not round-trip a chat history containing files. Restoring an agent whose stored history includes an image throws: ``` Error: Call to a member function toArray() on array in Drupal\ai\OperationType\Chat\ChatMessage->toArray() (line 301 of modules/contrib/ai/src/OperationType/Chat/ChatMessage.php) Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getContextTools() Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->fromArray() ``` `ChatMessage::toArray()` serializes each file through `AbstractFileBase::toArray()`, so the store… ### [Create implementation of ShortTermMemory](https://git.drupalcode.org/project/ai_agents/-/work_items/3546411) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !183 >>> Problem/Motivation Short term memory is now available here: #3528730: Create ShortTermMemoryPlugin We should add an integration with it. Proposed resolution Add a parameter to the agent config to save the short term memory config. Add a subform integration for saving the configuration, while editing the AI Agent. Assume no ShortTermMemory by default. Trigger ShortTermMemory after the request event. ### [Use streamed chat for agents](https://git.drupalcode.org/project/ai_agents/-/work_items/3538174) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !165 >>> Problem/Motivation We are making streamed chat possible in #3528549: Allow tool calling in streamed chat. This should make it possible to use it with agents. Steps to reproduce Proposed resolution Implement a solution based on #3528549: Allow tool calling in streamed chat Remaining tasks User interface changes API changes Data model changes ### [Add limits on how often a tool can run](https://git.drupalcode.org/project/ai_agents/-/work_items/3547995) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !224 >>> Problem/Motivation Right now we have to tell the system prompt how often it is allowed to use a specific tool. But there should also be a determenistic way, where if the tool gets stuck in a loop or searches to no awail in a RAG database for instance, we need to be able to programatically say how many times a tool can run. Proposed resolution Add a form value of how many times a tool can run. Add a form for setting the error message when this happens. If the tool has run tha… ### [Configuring the model an agent uses](https://git.drupalcode.org/project/ai_agents/-/work_items/3586050) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: category::support, priority::minor, state::accepted Description: I recently had some questions from students about why when configuring an agent, there isn't the opportunity to select which model the agent uses. I've been assuming that agents use the model selected on the assistant configuration - is this correct? Or do agents use whatever the default model is for the "Chat with Tools/Function Calling" capability (via /admin/config/ai/settings) If I have an orchestration agent that uses multiple subagents, it is also safe to assume that they all use the same model based on the assistant configuration? Is there any (non-code) way to have different subagen… ### [Warning: Undefined array key "parameters" en Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() (línea 1038 de /var/www/html/docroot/modules/contrib/ai_agents/src/PluginBase/AiAgentEntityWrapper.php)](https://git.drupalcode.org/project/ai_agents/-/work_items/3586065) State: opened | Updated: 2026-08-04 | Author: Alexis Martínez (alexismmd) | Assigned: unassigned | Labels: Novice, Quick Win, category::bug, priority::minor Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !331 [Issue #3586065: Prevent undefined array key warning when parameters is missing](https://git.drupalcode.org/project/ai_agents/-/merge_requests/331) | State: opened | Author: Alexis Martínez (alexismmd), 21 diff lines Description: ### Problem The following warning is triggered: ```text Warning: Undefined array key "parameters" in Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() ``` ### Cause The code accesses `$values['parameters']` without first checking whether the `parameters` key exists in the `$values` array. If the key is missing, PHP emits an `Undefined array key` warning. ### Suggested fix Before accessing `$values['parameters']`, check that the key exists (for example using `isset()` or `!empty()`) to avoid the warning when `parameters` is not defined. --- MERGE REQUESTS (24h) --- ### [Resolve ""ai_agent" entity type did not specify a list_builder handler."](https://git.drupalcode.org/project/ai_agents/-/merge_requests/334) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3563198-ai_agent-entity-type-did-not-specify-list_builder-handler | 87 diff lines Description: Closes #3563198 ### [feat: #3546411 use short term memory plugins in the agent loop](https://git.drupalcode.org/project/ai_agents/-/merge_requests/321) State: opened | Author: Marcus Johansson (Marcus_Johansson) | Branch: short-term-memory-1-4 | 1499 diff lines Description: Agents can now pick one of the AI modules short term memory plugins and configure it, so that a long running agent can summarize or truncate the conversation instead of running out of context. The plugin only decides what a single request looks like. The agent keeps its complete conversation in $chatHistory, since it needs it to keep track of tool calls and their results, and hands that over as the original history. What the plugin produced on the previous loop is handed back as the current history, so plugins like the summarizer can build on their own earlier work, and it is serialized along… ### [Issue#3556533:Normalize-Standalone-Line-Endings-Property_restrictions-Form fixes](https://git.drupalcode.org/project/ai_agents/-/merge_requests/332) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3556533-Normalize-Standalone-Line-Endings-Property_restrictions-Form | 2214 diff lines Description: Closes #3556533 ### [Issue#3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/330) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set | 4077 diff lines Description: Closes #3552641 --- COMMITS (24h) --- - [60dcae14](https://git.drupalcode.org/project/ai_agents/-/commit/60dcae14547930d74327aa5d02682d2374aa3c5c) bug: #3586067 AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image — AKHIL BABU (2026-08-05T06:54:14.000+00:00) ======================================================================== ## [7] summariseModule:canvas:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal Canvas (machine name: canvas) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), AKHIL BABU (AkhilBabu), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Dave Long (longwave) [2], David Bravo (davidbp), Feliksas Mazeikis (f.mazeikis) [1], Harumi Jang (hooroomoo), Ignacio Sánchez Holgueras (isholgueras), Jakub Piasecki (zaporylie), Lauri Timmanee (lauriii), wotnak [1]". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

              Drupal Canvas

              then use

              ,

              ,

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

                How can I help on this project?

                " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Missing upgrade path: stored `default-relative-url` prop sources written before 1.8 contain `$id` and fail `DefaultRelativeUrlPropSource::parse()`](https://git.drupalcode.org/project/canvas/-/work_items/3591904) State: opened | Updated: 2026-08-05 | Author: Marco (marco.nett) | Assigned: unassigned | Labels: AI-accelerated, Needs update path, Regression, category::bug Description: ## Problem / Motivation After updating Canvas 1.4.1 → 1.8.0, opening the editor for any page whose component tree contains a `default-relative-url` prop source returns a 500 from `/canvas/api/v0/layout/{entity_type}/{id}`: ``` LogicException: Extraneous JSON Schema information detected: { "$id": "json-schema-definitions://canvas.module/image", ... } should have been just { ... } ``` ## Root cause - Canvas ≤ 1.4 stored the resolved JSON schema of `default-relative-url` prop sources including the `$id` keys the schema resolver emits (e.g. `json-schema-definitions://canvas.module/imag… ### [Replace Lupus CE API with a dedicated Canvas Headless endpoint](https://git.drupalcode.org/project/canvas/-/work_items/3591861) State: closed | Updated: 2026-08-05 | Author: wotnak | Assigned: wotnak | Labels: headless Description: Canvas Headless relies on the Lupus CE API `/ce-api` endpoint to retrieve routed content for decoupled frontends. This adds an unnecessary dependency on [Lupus Decoupled](https://www.drupal.org/project/lupus_decoupled) and limits Canvas control over the response contract. ### Proposed resolution Implement an equivalent routed-content endpoint in Canvas Headless using Custom Elements. Update the headless SDK to use the new endpoint and remove the Lupus dependency. ### User interface changes n/a ### [Canvas AI: Run the component agent in the dev chat with setLooped(FALSE), driven by the browser](https://git.drupalcode.org/project/canvas/-/work_items/3591884) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1461 [Issues/3591884: Run component agnet with setlooped false.](https://git.drupalcode.org/project/canvas/-/merge_requests/1461) | State: opened | Author: AKHIL BABU (AkhilBabu), 3103 diff lines Description: ## Summary `CanvasDevAiBuilder::render()` returns a hard-coded mocked response. Replace it with a copy of the live `CanvasBuilder::render()` that runs the Canvas component agent with **`$agent->setLooped(FALSE)`**, so the agent stops after each model decision instead of looping to completion inside one request. The controller serializes the paused agent to the tempstore, returns `should_continue`, and `AiWizardDev.tsx` re-POSTs with a freshly built page context until `should_continue` is `FALSE`. ## Why With looping on (the `ai_agents` default), one HTTP request runs the agent until it is f… ### [[META] Allow Canvas to be used on any content entity type (bundle), as long as it has certain entity type characteristics](https://git.drupalcode.org/project/canvas/-/work_items/3498525) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: Configuration schema, Needs ADR, blocker, category::plan Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1462 [#3498525 Allow entity types other than node; add feature flag module for taxonomy terms.](https://git.drupalcode.org/project/canvas/-/merge_requests/1462) | State: closed | Author: Dave Long (longwave), 1190 diff lines Description: >>> [!note] Migrated issue Reported by: [longwave](https://www.drupal.org/user/246492) Related to !526 >>> Overview Since the prototype XB has only worked on article node types and there are hardcoded assumptions about this. We now have the Page entity as well but we should allow XB to work on all node types (and open the possibility for other entity types in the future as well). There is no design/UX for this yet but we know we will need to allow opting in for each bundle so we can start the work on this. Proposed resolution Eligibility criteria: a "title" field (entity key: label)) Ent… ### [Content template preview is blank for every non-full view mode](https://git.drupalcode.org/project/canvas/-/work_items/3591908) State: opened | Updated: 2026-08-05 | Author: Jakub Piasecki (zaporylie) | Assigned: unassigned | Labels: category::bug, priority::major Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1465 [Don't collapse the preview iframe when a view mode's height comes from its content](https://git.drupalcode.org/project/canvas/-/merge_requests/1465) | State: opened | Author: Jakub Piasecki (zaporylie), 49 diff lines Description: iframe stuck at inline height: 0px since #3588074 Editing a content template for any view mode other than `full` (teaser, card, search index, or any custom view mode) shows a blank white preview. The component tree renders correctly and the overlay/layers UI is fully functional - components can be selected, the geometry is correct, and the layers panel shows the real tree - but nothing is visible in the preview canvas. The `full` view mode is unaffected. … ### [Dependency Dashboard](https://git.drupalcode.org/project/canvas/-/work_items/3591657) State: opened | Updated: 2026-08-05 | 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: No github.com token has been configured. Skipping release notes retrieval - ⚠️ 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. ## Deprecations / Replacements > ⚠️ **Warning** > The foll… ### [Cypress E2E parallel split balances by file count, not runtime — distribute by tagging slow/flaky specs](https://git.drupalcode.org/project/canvas/-/work_items/3591907) State: opened | Updated: 2026-08-04 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: DX (Developer Experience), category::task, flaky tests, priority::normal Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1463 [Resolve #3591907 "Balance cypress E2E parallel split by runtime weight"](https://git.drupalcode.org/project/canvas/-/merge_requests/1463) | State: opened | Author: Christian López Espínola (penyaskito), 279 diff lines Description: ### Overview The `cypress E2E` CI job runs with `parallel: 4`, but the four nodes finish at very different times. Across the last 5 `1.x` pipelines that ran it, the slowest node took **12:54–27:36** while the fastest finished in **4:55–8:00** — a 2–3× spread. Because a parallel stage only completes when its slowest node does, the whole E2E stage is paced by one overloaded node while others sit idle. The cause is the spec-distribution logic in `ui/tests/support/parallel.js`. It sorts the 46 spec files alphabetically and deals them round-robin (`index % CI_NODE_TOTAL`), which balances the **nu… ### [`drush config:import` can fail to update a Component whose `active_version` changed](https://git.drupalcode.org/project/canvas/-/work_items/3591905) State: closed | Updated: 2026-08-04 | Author: Dave Long (longwave) | Assigned: unassigned | Labels: category::bug, dataModel, priority::major, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1459 [#3591905: `drush config:import` can fail to update a Component whose `active_version` changed](https://git.drupalcode.org/project/canvas/-/merge_requests/1459) | State: merged 2026-08-04 | Author: Dave Long (longwave), 286 diff lines Description: Importing configuration for an existing `canvas.component.*` config entity can fail when its `active_version` differs from the one in the target database: ``` Unexpected error during import with operation update for canvas.component.extjs.my_component: 'component' entity is a versioned config entity, and its loaded version is not the active version. ``` This blocks the standard `drush deploy` workflow: change a component's props in one environment, export, then deploy to another. Any deploy that bumps a version hash can fail, unless a cache clear takes place immediately before importing confi… ### [Allow patterns to be edited](https://git.drupalcode.org/project/canvas/-/work_items/3591851) State: closed | Updated: 2026-08-04 | Author: Dave Long (longwave) | Assigned: unassigned | Labels: category::feature, pageBuilder, priority::normal, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1403 [#3591851: Allow editing stored patterns](https://git.drupalcode.org/project/canvas/-/merge_requests/1403) | State: merged 2026-08-04 | Author: Dave Long (longwave), 1757 diff lines Description: Once a user creates a Pattern in the Canvas editor, there is no way to edit it. The library menu for a pattern offers only Insert and Delete — there is no "Edit", "Open", or "Rename". If a pattern was created with a mistake, or needs to evolve, the only option is to delete it and recreate it from scratch. This is surprising because the backend already fully supports updating a pattern — the gap is entirely on the client, plus one missing architectural piece (a round-trip to load a pattern back into the editor). - Backend UPDATE already works. Pattern is a config entity storing a component_tr… ### [Strengthen AutoSaveManager to generate stable hashes](https://git.drupalcode.org/project/canvas/-/work_items/3591785) State: opened | Updated: 2026-08-04 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Feliksas Mazeikis (f.mazeikis) | Labels: 1.x-dev, Conflict resolution, auto-save, autoSave Description: When AutoSaveManager normalizes entity, it is doing so without using strictly casted values. The set of normalized entity calues is used for `data_hash` hash computation. As the contents of the normalized entities are not strictly casted, the resulting hashes cannot be relied upon. The aim of this issue is to strengthen, simplify and standardise normalization and hashing processes happening in AutoSaveManager. ### [PHPStan bootstrap fails when custom_elements is not installed after merging `canvas_headless`](https://git.drupalcode.org/project/canvas/-/work_items/3591906) State: closed | Updated: 2026-08-04 | Author: Ignacio Sánchez Holgueras (isholgueras) | Assigned: unassigned | Labels: priority::normal, projectManagement, state::closed, v1.x-dev Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1460 [Issue #3591906: define the class in the canvas_headless.services.yml.](https://git.drupalcode.org/project/canvas/-/merge_requests/1460) | State: closed | Author: Ignacio Sánchez Holgueras (isholgueras), 12 diff lines Description: # PHPStan bootstrap fails when custom_elements is not installed ## Problem/Motivation `canvas_headless.services.yml` defines the render converter with shorthand syntax: ``` Drupal\canvas_headless\RenderConverter\JsComponentCanvasRenderConverter: decorates: custom_elements.canvas_render_converter decoration_on_invalid: ignore ``` `mglaman/phpstan-drupal` calls `class_exists()` on shorthand service IDs during bootstrap (`DrupalAutoloader.php:240`). That autoloads the class, which extends `Drupal\custom_elements\RenderConverter\CanvasRenderConverter`. PHP resolves parent class… ### [Media Library widget modal does not open](https://git.drupalcode.org/project/canvas/-/work_items/3581123) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | Labels: Needs steps to reproduce, category::bug, priority::normal, reduxIntegratedFieldWidgets Description: >>> [!note] Migrated issue Reported by: [bartnelissen](https://www.drupal.org/user/3489703) >>> When attempting to open the Media Library widget, the modal dialog does not open. At pageload I see these JS errors: dialog.ajax.js?v=11.3.3:135 Uncaught TypeError: Cannot read properties of undefined (reading 'prototype') at dialog.ajax.js?v=11.3.3:135:23 at dialog.ajax.js?v=11.3.3:303:3 Uncaught TypeError: Cannot read properties of undefined (reading 'prototype') at ajax.command.customizations.js?tceawu:583:45 at ajax.command.customizations.js?tceawu:623:3 Environment: Drupal v… --- MERGE REQUESTS (24h) --- ### [Draft: Resolve "Canvas AI: Add Tools dropdown to chat UI"](https://git.drupalcode.org/project/canvas/-/merge_requests/1447) State: opened | Author: David Bravo (davidbp) | Branch: 3591856-canvas-ai-add-tools-dropdown-to-chat-ui | 530 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591856 ### [feat(CLI Tool): Return flexible codebase files to local environment on canvas pull](https://git.drupalcode.org/project/canvas/-/merge_requests/1443) State: opened | Author: Harumi Jang (hooroomoo) | Branch: 3591862-issue-branch | 2524 diff lines Description: **AI Disclosure:** Yes. Used Claude to help develop and document this change. Closes #3591862 ### Summary Extends the Canvas CLI push/pull to include the flexible codebase files a project needs to be reconstructed on disk. On push, in addition to component code, the CLI now stores and later restores: - **`package.json`** — pushed to and stored on the asset library, restored on pull. A terminal note prompts running `npm install` when it changes. - **Local helper modules** a component imports via the `@/…` alias — overwritten on pull. - **Binary assets** (images, video, SVG) imported via `@/… ### [feat(Headless): #3591893 Enable headless previews for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/1438) State: opened | Author: wotnak | Branch: 3591893-enable-headless-previews-for-content-templates | 1061 diff lines Description: Closes #3591893 - enables headless previews for content templates ## Testing - build ui and packages and enable canvas_headless - `npm run build` - `npm run packages:build` - `ddev drush cr` - `npm link -ws` - `ddev drush en canvas_headless` - create a headless app: `npx @drupal-canvas/create@latest --experimental-headless --template nextjs` - start headless app - `npm link @drupal-canvas/headless @drupal-canvas/headless-next @drupal-canvas/headless-react` (if using a template other than the nextjs, link `@drupal-canvas/headless` and framework adapter matching the template) - … ### [feat: #3518272 support all entity types with configurable displays for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/791) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3518272-field-ui-base-route | 1977 diff lines Description: Closes #3518272 ### [chore: version packages](https://git.drupalcode.org/project/canvas/-/merge_requests/1464) State: opened | Author: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010) | Branch: changeset-release/1.x | 449 diff lines Description: Automated merge request created from pending changesets. Merging it publishes the new package versions to npm. Do not commit to this branch manually; it is force-pushed on every push to 1.x. ### [feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK](https://git.drupalcode.org/project/canvas/-/merge_requests/1437) State: merged 2026-08-05 | Author: wotnak | Branch: 3591861-headless-sdk-new-canvas-content-api-endpoint | 2758 diff lines Description: #3591861 - Switches the headless SDK's draft-aware `fetchPage()` client from `/ce-api/{path}` to `/canvas/content-api`. - Adopts the Canvas endpoint's content, document-head, route, and redirect response contract. - Removes the now obsolete Lupus endpoint dependencies and the `/ce-api` auto-save controller override. ## SDK response handling `fetchPage(requestUri)` now returns: - `Page`, containing Canvas-rendered content when available, document-head data, and normalized route information. `route.managedByCanvas` indicates whether Canvas manages the route's complete component tree. - `ro… ### [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 | 55 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [mysql](https://hub.docker.com/_/mysql) ([source](https://github.com/docker-library/mysql)) | service-image | minor | `8.0` → `8.4` | > :exclamation: **Important** > > Release Notes retrieval for this MR were skipped because no github.com credentials were available. > If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes). --- ### Configuration 📅 **Schedule**: (UTC) - Br… ### [Draft: #3591838 [PHASE 2] introduce color props](https://git.drupalcode.org/project/canvas/-/merge_requests/1432) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-phase-2-color-props | 11378 diff lines Description: \[Description of changes\] Pending... ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591838 ### [#3591838 brand kit color implementation](https://git.drupalcode.org/project/canvas/-/merge_requests/1385) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-brand-kit-color-support | 7619 diff lines Description: \[Description of changes\]TK AI Disclosure: Had Opencode + Kimi/Claude implement much of the work in several discrete stages. For the UI code, the prompts were detailed & granular enough that it can largely be viewed as my work aided by a robo-proofreader. Parts of the PHP side, however, could be accurately described as "Generated". I've looked though it but there's a bit of blind trust, and a Backend reviewer should keep that in mind. ## Testing instructions - [ ] enable 'canvas_dev_mode' module - [ ] Run DB updates to add Color entity type - [ ] (optional) enable 'canvas_test_code_compone… ### [Draft: feat(Conflict detection): #3591668 "Text-based Page entity representation via Canvas API"](https://git.drupalcode.org/project/canvas/-/merge_requests/1241) State: opened | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591668-text-based-comparison-of-entities | 659 diff lines Description: **TL;DR:** Adds a new endpoint and related infra that serves Page entities using textual in YAML format, using only fields that can be stored in auto-save item. For people with attention span or AI summary tools: ### :robot: Summary Adds a GET `/canvas/api/v0/content/canvas_page/values-as-text/{canvas_page}` endpoint that returns a Page entity's storable field values encoded as YAML text. The primary use case is client-side comparison of published and draft Page entities using text-based representation of values that can be stored in an auto-save item. The endpoint accepts an `?autoSaved=tr… ### [refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes](https://git.drupalcode.org/project/canvas/-/merge_requests/1356) State: merged 2026-08-04 | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591785-strengthen-autosave-normalization | 977 diff lines Description: ## Summary This branch consolidates the typed-data normalization logic that `AutoSaveManager` and `ComponentSourceBase` previously duplicated into a single method, `TypedDataHelper::castRawPhpTypes()`. ## What changed and why `AutoSaveManager::normalizeEntity()` (hash source) and `ComponentSourceBase::castRawTypedConfigToPhpTypes()` (component-shape normalization) each contained their own primitive-casting and traversal logic. These are merged into `TypedDataHelper::castRawPhpTypes()`, which already existed for the config typed-data path but was not wired into `toStorableArray()`. During c… ### [Draft: Stage Canvas autosaves in a dedicated Workspace](https://git.drupalcode.org/project/canvas/-/merge_requests/1056) State: closed | Author: Lauri Timmanee (lauriii) | Branch: 3588540-stage-canvas-autosaves | 6692 diff lines Description: AI-Generated: Yes, Cursor was used to assist with the creation of this MR. ## Testing instructions * [ ] Apply MR + Run update hooks * [ ] Test making changes + publishing them Closes #3588540 --- COMMITS (24h) --- - [f16deaf7](https://git.drupalcode.org/project/canvas/-/commit/f16deaf7fb6a764ea3d91a0f0ddcc8e2541d4289) feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK — wotnak (2026-08-05T06:11:35.000+00:00) - [1a8f69de](https://git.drupalcode.org/project/canvas/-/commit/1a8f69ded1dce78010f8a403e64bfb8953942ae1) fix(Data model): #3591905 `drush config:import` can fail to update a Component whose `active_version` changed — Dave Long (2026-08-04T22:03:13.000+00:00) - [f9b330d2](https://git.drupalcode.org/project/canvas/-/commit/f9b330d21b204f0c33917a343f74d201c27aac0d) feat: #3591851 Allow patterns to be edited — Dave Long (2026-08-04T21:05:42.000+00:00) - [271a612f](https://git.drupalcode.org/project/canvas/-/commit/271a612faa2c4ad5c9862879ccd23e2097bb07ce) refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes — Feliksas Mazeikis (2026-08-04T15:33:37.000+00:00) ======================================================================== ## [8] summariseModule:ai_context:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Context Control Center (CCC) (machine name: ai_context) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Ahmad Khalil (ahmad-khalil-imagex), Juan Correa (jucs7), Kristen Pol (kepol) [3], Rob Loach (robloach), Tekla Aivazashvili (aivazashvilit)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                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). ### [[Discuss] Review context selection ranking factors before 1.0](https://git.drupalcode.org/project/ai_context/-/work_items/3586365) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::plan Description: ## Summary Before we ship 1.0, we should confirm that the current rules for choosing which context items reach an AI feature are the right set — and whether anything important is missing. This issue is a **discussion**. The goal is shared understanding of what the module does today, in plain language, so product/UX and engineering can decide together whether to add ranking factors before release. ## Background When someone uses an AI feature on the site, the module picks a small set of **context items** (brand voice, writing rules, section-specific guidance, etc.) and attaches them to the … ### [[Meta] CCC cleanup and API hardening from code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::plan Description: ## Problem/motivation Follow-up to: #3586294+s ### New docs Since I had fable 5 review both 1.0.x and the MR branch for #3586218+ at the same time, it didn't really differentiate where the problems were. Many of the problems were for #3586218+ which should be fixed in that issue since it's not merged yet. I've added the info to that issue's MR. Here are the new docs for all problems that aren't for #3586218+: [ai_context-beta4-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/69d239d43391b757cc440a9e04b54e57/ai_context-beta4-1.0.x-issues.md) #### Additional findings … ### [Harden CCC context item access checks and document the authoring trust model](https://git.drupalcode.org/project/ai_context/-/work_items/3586356) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !233 [Issue #3586356: Harden CCC context item access checks and document the authoring trust model.](https://git.drupalcode.org/project/ai_context/-/merge_requests/233) | State: opened | Author: Kristen Pol (kepol), 1073 diff lines Description: ## Problem/motivation Parent: #3586309 Related to: #3574937 [#3574937](https://git.drupalcode.org/project/ai_context/-/work_items/3574937) was an early broad permissions inventory (add/remove perms, stale MR !78). This issue is a focused beta4 access/trust package based on later code-review findings: enforce existing permissions correctly, close small disclosure gaps, document the trust boundary, and add an access-control test matrix. Do **not** treat this as a full permission redesign. Optional new permissions (for example `view own unpublished…`) can be separate follow-ups. ### Gaps … ### [CCC beta4 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586374) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, blocker::stable Description: ## Problem/motivation Do this right before beta4 release in case there are any serious issues that need addressing before the release. Beta4 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: - Security issues (these can be noted since we are still in beta) - Important API gaps - Incorrect docs - Code smell that might indicate potential bugs ## Next steps - Run revie… ### [Design an indicator for the CCC UI that conveys subscription limits](https://git.drupalcode.org/project/ai_context/-/work_items/3586337) State: closed | Updated: 2026-08-05 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Summary Follow up to: - #3586320+s - #3586335+s Keep in mind this issue for updating descriptions when doing this design: #3586348+s Design a UI indicator that alerts users when their context-item subscription limits are reached (or nearing), and guides them to one of three troubleshooting actions. This surfaced from a scope sense-check meeting (19/07/26 — Mike, Kristen, Aidan, Emma) where the subscription model was validated as sound: agents subscribe to context items that guide how they maintain, create, and manage content. ## Background The subscription model was reviewed and conf… ### [Persist context-item token counts and show token-budget usage in CCC UI](https://git.drupalcode.org/project/ai_context/-/work_items/3586379) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::task, priority::major, sprint candidate Description: ## Summary Follow-up to: - #3586337+s - #3586348+s Implement the subscription-limit UX decisions from the Emma+Aidan review on #3586337. Persist each context item's estimated token count at save time, base token badges on percentage of the configured token budget, and add budget summary messaging on the agent subscription settings page. This issue implements the indicator behavior. It does not add new warning components beyond text, badges, and tooltips agreed in the design review. ## Problem Token counts on the context item listing are calculated on the fly from item content. That makes… ### [Remove max_items context limit and rely on the token budget](https://git.drupalcode.org/project/ai_context/-/work_items/3586378) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::task, priority::normal, sprint candidate Description: ## Summary Follow-up to: - #3586337+s The **Max context items to inject** setting (`max_items`) adds UX and DX complexity without providing a meaningful limit on its own. Context items vary widely in size, so a token budget is the more accurate control for how much context can reach an agent prompt. Remove `max_items` from configuration, forms, validation, selection logic, documentation, and tests. After this change, the token budget (`max_tokens`) is the primary module-wide limit on injected context. ## Problem Site builders currently configure two overlapping limits: - **Max context i… ### [Create CCC beta3 and status update video](https://git.drupalcode.org/project/ai_context/-/work_items/3586333) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::task Description: Create a video on beta3 and the current status of CCC and what's coming up. ### [Sprint 15 CCC roadmap updates, sprint planning, and issue triage](https://git.drupalcode.org/project/ai_context/-/work_items/3586330) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::plan 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/75 --- ## Target date or deadline 25 July to 7 August 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… ### [[Meta] Possible 1.0 and 1.1 features and UX/DX improvements following TDT questions](https://git.drupalcode.org/project/ai_context/-/work_items/3586363) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, ai::context, category::plan, priority::major Description: ## Problem **_Note that we should minimize the changes for 1.0 at this point so identify the most important items, if any, from the "Before 1.0" list. Also, it would be best if they were in 1 or 2 issues rather than a bunch of new issues._** Follow-up to: #3586362+s When answering questions for a TDT post, it presented possible follow-up features and UX/DX improvements. Note that some of these may already have issues. ## Solution Vet the following for possible action and create follow-up and child issues as needed. Note that some of these may already have issues, so check first before cr… ### [Add Scheduler to CCC Extensions page](https://git.drupalcode.org/project/ai_context/-/work_items/3586353) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !231 [Issue #3586353: Add Scheduler to CCC Extensions page.](https://git.drupalcode.org/project/ai_context/-/merge_requests/231) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 560 diff lines Description: ## Problem Scheduler was made optional in: #3577429+s but it didn't make it onto the Extensions page in that issue /admin/config/ai/context/settings/extensions ## Solution It should have one line with both `scheduler` and `scheduler_content_moderation_integration` modules. It should be the third item in the general section (alphabetical): - Feature = Schedule context items - Description = Allows scheduled publishing and unpublishing of context items - Module = [Scheduler](https://www.drupal.org/project/scheduler) and [Scheduler content moderation integration](https://www.drupal.org/p… ### [[Meta] Prepare demo content and demo context items for the CCC to show how it works](https://git.drupalcode.org/project/ai_context/-/work_items/3586339) State: opened | Updated: 2026-08-05 | Author: Emma Horrell (emma-horrell) | Assigned: Emma Horrell (emma-horrell) | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Problem/motivation _**Note that if we at least get the code with one draft example merged in for beta4 that we can add the additional sample context in rc1 since it would be "documentation" in a sense.**_ Follow-up to: - #3586335 - #3586279 A new Context Control Center (CCC) installation is empty. People unfamiliar with CCC terminology and structure cannot easily see how source content, context items, scopes and consumer subscriptions work together. Provide realistic, optional demo data that lets people explore a complete CCC workflow before configuring it for their own organisation. … ### [Clarify scope eligibility, ranking, and limits in UI help and documentation](https://git.drupalcode.org/project/ai_context/-/work_items/3586348) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, blocker::stable, needs ux review, priority::major Description: ## Summary _**Note that this could be implemented in rc1 because it's docs/help text and no functionality changes.**_ Follow-up to: - #3586281+s - #3586270+s - #3586335+s - #3586337+s Beta testing confirmed that the **subscription** model can remain for beta4, but the UI and documentation do not clearly explain how scope matching, eligibility, ranking, overrides, and limits work together. This issue improves inline help and user-facing documentation without changing scope behavior, configuration storage, selection logic, or subscription semantics. ## Problem The current Context scope de… ### [CCC DX/docs polish before rc1 (api.php, @internal, config/docs, small standards nits)](https://git.drupalcode.org/project/ai_context/-/work_items/3586359) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !234 [Issue #3586359: Polish developer APIs and internal documentation](https://git.drupalcode.org/project/ai_context/-/merge_requests/234) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 1002 diff lines Description: ## Problem/Motivation Follow-up from the beta4/1.0.x analysis triage: #3586309+s Combines remaining developer-experience and docs polish that does not need a separate design track: - analysis item #7 (`ai_context.api.php` + `@internal`) - analysis item #9 (config/docs consistency) - leftover analysis item #8 nits only (`strict_types`, Global scope descriptions, subcontext toggle trait) Related (do not duplicate here): #3586271+s — larger consistency/DX cleanup (final classes, constructor promotion, snake_case, etc.) Already done / out of scope here: - `hook_help()` (already present) … ### [Improve conditional subcontext disabled-state behavior and admin UX](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !226 [Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled.](https://git.drupalcode.org/project/ai_context/-/merge_requests/226) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 1827 diff lines Description: ## Description Follow-up to: #3586207+s ### Summary When **Enable conditional subcontext AI decisions** (`conditional_subcontext_enabled`) is off, conditional subcontext children should not participate in normal context selection. This issue implements that behavior and adds admin UX so editors understand why conditional items are inactive, can reach the setting to re-enable the feature, and get clear warnings when editing affected items. ### Problem / motivation Previously, disabling conditional subcontext AI caused **all conditional children to be included without an AI call**. That wa… ### [Improve disabled conditional subcontext row visibility in the context item listing](https://git.drupalcode.org/project/ai_context/-/work_items/3586377) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: category::task, priority::normal, state::postponed, what::ux Description: ## Problem / motivation _**Note that I'm not sure we will have time for this before 1.0.**_ [#3586292](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) adds ghosting for conditional subcontext children when **Enable conditional subcontext AI decisions** is off. The current treatment de-emphasizes the **label cell only** (italic, reduced opacity via `ai-context-item-list__row--conditional-disabled` styling scoped to the label). During frontend review on [!226](https://git.drupalcode.org/project/ai_context/-/merge_requests/226), @bbruno noted that when scanning the listing … ### [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-08-05 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: 2026Sprint12, 2026Sprint13, 2026Sprint14, 2026Sprint15 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… ### [[Discuss] Integrating content reviews based on context](https://git.drupalcode.org/project/ai_context/-/work_items/3571115) State: closed | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::plan Description: _**Note that we'd like to find an approach that doesn't require any CCC changes for 1.0.**_ Problem/Motivation We are discussing this on 2 Feb 2026 with Kristen+Adriano+Aidan. Adriano created a UI for content reviews at the EU hackathon last week. Aidan and other have also been working in this space. We are comparing notes to figure out how this will work together. Proposed resolution Continue the discussion to figure out its impact on the CCC architecture. Target date or deadline August 2026 Remaining tasks Discuss Create follow-up issues as needed AI usage (if applicable) [ ] AI Assisted … ### [[Discuss] Adding priority to context item to affect ranking](https://git.drupalcode.org/project/ai_context/-/work_items/3586364) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, category::plan, priority::major Description: ## Problem Some context will be more important than others. A simple way to factor this in would be to have a priority level for context items. ## Solution Discuss having a priority level, e.g. - Very high - High - Medium - Low Or - 1 (high) - 2 - 3 - 4 - 5 (low) Then the ranking could sort by priority level so that the highest priority items are more likely to make the cut when factoring in max items and max tokens. ### [Add context item ranking priority field and use for ranking selection logic](https://git.drupalcode.org/project/ai_context/-/work_items/3586376) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::feature, priority::major, sprint candidate Description: ## Problem Follow-up to: #3586364+s Right now, ranking selection is deterministic other than for conditional subcontext. When there are multiple context items that are equally "weighted" in terms of rank, then they are ordered based on when the context item was last edited (freshest first). But, this doesn't make much sense. ## Solution 1. Add a ranking priority field to context item content entities. Show the field in the "Context Scope" section, right above the "Global context" scope plugin. - Machine name: field_ranking - Label: Ranking - Description: Controls the order context items … ### [Install `target_entities` field storage when Dynamic Entity Reference is enabled on existing sites](https://git.drupalcode.org/project/ai_context/-/work_items/3586375) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, category::bug, priority::normal, sprint candidate Description: ## Problem Sites that already have `ai_context` installed can fatal when `dynamic_entity_reference` is enabled (or was enabled without a matching schema update). The context item listing and other entity loads fail with: `Table 'db.ai_context_item__target_entities' doesn't exist` Example stack: `SqlContentEntityStorage->loadFromDedicatedTables()` while `AiContextItemListBuilder->load()` renders `/admin/config/ai/context/items`. ### Root cause `target_entities` is not defined in `AiContextItem::baseFieldDefinitions()`. It is added at runtime via `DynamicEntityReferenceHooks::entityBaseFiel… ### [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-08-04 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !211 [Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/merge_requests/211) | State: opened | Author: Juan Correa (jucs7), 3529 diff lines Description: Follow-up to: #3586192 _**Verify the issue problem and solution before proceeding.**_ ## Title **AI Context: Consistency / DX cleanup (final, constructor promotion, snake_case locals, service interfaces)** --- ## Description Follow-up to #3586192 / naming & DX review. Addresses the remaining **consistency / DX** items that were explicitly out of scope for the naming MR. **No functional or API behavior changes** — style, clarity, and maintainability only. ### Background The naming/DX MR covered route/permission renames, dead code removal, `new self` in final classes, and snake_case fix… ### [Decouple context item form descriptions from scope plugin descriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586361) State: opened | Updated: 2026-08-04 | Author: Kristen Pol (kepol) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !239 [Issue #3586361: Decouple context item form descriptions from scope plugin descriptions.](https://git.drupalcode.org/project/ai_context/-/merge_requests/239) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 438 diff lines Description: ## Problem/motivation Follow-up: #3586359 Scope plugin `getDescription()` text is currently reused in multiple UI contexts: 1. The scope overview page. 2. Individual scope settings pages. 3. Context item scope controls. These contexts can require different guidance. For example, the Global scope’s warning that saving a context item clears other scope settings is useful on the context item form but confusing on the scope overview and settings pages. The existing `getSubscriptionDescription()` method already provides context-specific text for agent subscription forms, but there is no equiv… ### [CCC beta3 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586294) State: closed | Updated: 2026-08-04 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, AI Context Management, AI Initiative Sprint, AI Innovation 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… --- MERGE REQUESTS (24h) --- ### [Issue #3586275: Add ai_context_document_loader submodule for MDXEditor imports.](https://git.drupalcode.org/project/ai_context/-/merge_requests/176) State: merged 2026-06-21 | Author: Kristen Pol (kepol) | Branch: 3586275-doc-loader-submodule | 1571 diff lines Description: Introduce a thin CCC submodule that bundles Document Loader MDXEditor integration for Context Item content fields, with progressive support for PDF and URL source plugins. Register the extension on the settings page, document setup in README and context_items.md, and add kernel tests. Closes #3586275 ### [Issue #3586241: Document Supported vs Internal APIs](https://git.drupalcode.org/project/ai_context/-/merge_requests/186) State: merged 2026-06-21 | Author: Rob Loach (robloach) | Branch: 3586241-document-supported-vs-internal-ccc-apis | 389 diff lines Description: ## Description Adds APIStability notes about internal vs public APIs within Context Control Center. Closes #3586241 ## Testing instructions Read through the new documentation. ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [x] I have performed a self-review of my own code - [x] I have added or updated tests, or explained in the description why this change is not covered by tests - [x] I have updated documentation for any new or changed functionality - [x] I have written … ### [Issue #3586192: Clean up code inconsistencies.](https://git.drupalcode.org/project/ai_context/-/merge_requests/160) State: merged 2026-06-12 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3586192-clean-up-ccc-inconsi | 1554 diff lines Description: Closes #3586192 ## Summary Addresses the non-crossed items from #3586192 / `ai-context-naming-dx-review.md`, applying the reviewer's overrides from note_914050. ## Changes **High** - **1b** — Delete dead `AiContextItemController::revisionOverview()` and orphaned `getRevisionIds()`. The entity.ai_context_item.version_history route uses `AiContextItemRevisionController::revisionOverview()`. **Medium** - **1a** — Reconcile `Hook/` vs `Hooks/`: `AiSchedulerContentModerationSync` is a service helper (not a `#[Hook]` class), so moved it to `src/Service/` and updated its namespace + 3 importer… --- COMMITS (24h) --- - [77c4a639](https://git.drupalcode.org/project/ai_context/-/commit/77c4a639a7ab493babfdefaf79e9e7fdb98c3bf4) Issue #3586353: Add Scheduler to CCC Extensions page. — Kristen Pol (2026-08-05T03:44:21.000+00:00) - [01ccd73b](https://git.drupalcode.org/project/ai_context/-/commit/01ccd73bc46f435a0faa29a8070a976f322f7798) Issue #3586359: Polish developer APIs and internal documentation — Kristen Pol (2026-08-05T03:37:30.000+00:00) - [193544b1](https://git.drupalcode.org/project/ai_context/-/commit/193544b1b0f12831b9a9e38a78cc7ae3976cb9ba) Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled. — Kristen Pol (2026-08-05T02:54:32.000+00:00) ======================================================================== ## [9] summariseModule:ai_search:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a technical developer audience. Focus on: what was merged or shipped, specific bugs fixed, APIs changed, and what is blocking progress. Be specific — mention function names, module names, and MR references where relevant. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                  AI Search

                  then use

                  ,

                  ,

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

                    How can I help on this project?

                    " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Progressive indexing can drop tail chunks](https://git.drupalcode.org/project/ai_search/-/work_items/3584032) State: opened | Updated: 2026-08-05 | Author: Sergiu Nagailic (Nikro) | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: Problem/Motivation The progressive/Long Chunk strategy can mark an item complete before all of its chunks are embedded. computeItemChunks() counts chunks with a hard-coded gpt-3.5 tokenizer, while getEmbedding() uses the tokenizer configured on the Search API s> In one reproducible case, tracking counted 106 chunks while actual chunking produced 370. Search API stopped after its batch beginning at chunk 100, marked the item indexed, and ne> Steps to reproduce Configure the Long Chunk embedding strategy and a tokenizer other than GPT-3.5, such as XLM-RoBERTa (or any other tokenizer). … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [10] summariseModule:ai_translate:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Romero (o0Charly0o), szato (odi)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                    AI translate

                    then use

                    ,

                    ,

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

                      How can I help on this project?

                      " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [InvalidArgumentException: Invalid translation language (und) when translating media entities](https://git.drupalcode.org/project/ai_translate/-/work_items/3585532) State: opened | Updated: 2026-08-05 | Author: szato (odi) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !30 [fix: #3585532 Translation language (und) when translating media entities.](https://git.drupalcode.org/project/ai_translate/-/merge_requests/30) | State: opened | Author: szato (odi), 198 diff lines Description: When using AI Translate to translate a media entity (e.g. media.image), the batch fails with: ``` InvalidArgumentException: Invalid translation language (und) specified. in Drupal\Core\Entity\ContentEntityBase->getTranslation() ``` **Steps to reproduce** - Enable AI Translate, configure an AI provider - Have a media type (e.g. image) with content translation enabled and field sync configured - Go to a media entity's translation overview, click "Translate using AI" for a non-existing language - Batch fails with the above exception **Proposed resolution** ``` --- a/src/Controller/AiTranslateC… ### [Auto-translate referenced taxonomy terms (and other translatable entities) when translating a node](https://git.drupalcode.org/project/ai_translate/-/work_items/3585539) State: opened | Updated: 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: When translating a node via AI Translate, referenced translatable entities (e.g. taxonomy terms) are not automatically translated. Editors must translate each term separately, which is tedious on multilingual sites. Proposed solution Add a batch operation translateReferencedEntities() that runs after insertTranslation(). It scans all entity reference fields of the source entity (including fields marked as non-translatable on the node), and for each referenced ContentEntityInterface that: belongs to a translatable entity type does not yet have a translation in the target language …extracts i… --- MERGE REQUESTS (24h) --- ### [Resolve "InvalidArgumentException: Invalid translation language (und) when translating media entities"](https://git.drupalcode.org/project/ai_translate/-/merge_requests/36) State: opened | Author: Carlos Romero (o0Charly0o) | Branch: 3585532-3585539-auto-translate-referenced-taxonomy | 154 diff lines Description: Closes #3585532 ### [feat: Add batch translation for referenced translatable entities in AiTranslateController](https://git.drupalcode.org/project/ai_translate/-/merge_requests/35) State: opened | Author: Carlos Romero (o0Charly0o) | Branch: 3585539-auto-translate-referenced-taxonomy | 109 diff lines Description: Closes #3585539 --- COMMITS (24h) --- (none) ======================================================================== ## [11] summariseModule:ai_provider_litellm:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: LiteLLM AI Provider (machine name: ai_provider_litellm) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Romero (o0Charly0o), Dan Lemon [3]". 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

                      LiteLLM AI Provider

                      then use

                      ,

                      ,

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

                        How can I help on this project?

                        " aimed at a developer. Suggest 2-3 concrete technical actions a contributor could take right now. Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, check the data for each issue: - If an issue shows a Related MR with state 'opened', do NOT suggest creating a patch or MR — one already exists. Suggest reviewing it instead. - If all Related MRs for an issue are merged, do NOT suggest reviewing them — they are already done. - If an issue is unassigned with no Related MRs, it is a good candidate to pick up. - Only suggest actions that are genuinely still needed given the current state in the data above. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix: enhance model retrieval with fallback for admin key access](https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/25) State: merged 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Branch: 3614791-litellm-provider-fails | 42 diff lines Description: Closes #3614791 ### [feat: add translateText method and support for translation in LiteLlmAiProvider](https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/26) State: merged 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Branch: 3614792-translate-text | 72 diff lines Description: Closes #3614792 --- COMMITS (24h) --- - [c4afe4c0](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/c4afe4c0ec2f09a7328162f6c9b27e22147c92b6) fix: null-safe key loading in settings form validation — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [a6d62074](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/a6d62074f77c21aef1f0e75474e2881514e1ea27) fix: cache model retrieval per request and add request timeout — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [9957ac05](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/9957ac054f919ad54d91adb6c622fa67910fc211) feat: detect vision, tools and structured output support; drop unimplemented video/audio operation types — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [6f1ab815](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/6f1ab8155c26600be8726f754dc8ee2b5af3c121) fix: enhance model retrieval with fallback for admin key access — cromero (2026-08-04T10:38:33.000+02:00) ======================================================================== ## [12] summariseModule:ai_recipe_image_classification:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Image Classification (machine name: ai_recipe_image_classification) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Image Classification

                        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). ### [Error when applying recipe via Drush in Drupal CMS](https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579955) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: Working with a fresh, local, DDEV-based Drupal CMS site, after using `ddev composer require drupal/ai_recipe_image_classification` to get the recipe, I tried to apply it using Drush: ``` ddev drush recipe ../recipes/ai_recipe_image_classification 3/5 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░] Installed 2 modules: Field Widget Actions, AI Automators. In ValidKeysConstraintValidator.php line 33: Expected argument of type "array", "string" given Failed to run drush recipe ../recipes/ai_recipe_im… ### [Error when installing on Drupal CMS](https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579954) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have an up-to-date version of Drupal CMS - this is a local site that was just installed with the _Haven_ site template. After installing the base AI recipe (with Anthropic as the provider), I tried to install this recipe via /admin/config/ai and received this error in a modal: `SandboxException: Failed to run process: The command "'/usr/bin/php' '/var/www/html/vendor/composer/./composer/bin/composer' '--working-dir=/tmp/.package_manager5c7a2d24-e389-4576-aa25-465cc00f8ea5/iEPwgT0vT8LbCaOHyC5Rd0r26mFhNYoi' 'update' '--with-all-dependencies' '--optimize-autoloader' '--minimal-changes' 'drupal… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [13] summariseModule:ai_recipe_content_classification:developer ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Content Classification (machine name: ai_recipe_content_classification) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Content Classification

                          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). ### [Error when applying recipe via Drush in Drupal CMS](https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580679) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: Working with a fresh, local, DDEV-based Drupal CMS site, after using `ddev composer require drupal/ai_recipe_content_classification` to get the recipe, I tried to apply it using Drush: ``` ddev drush recipe ../recipes/ai_recipe_content_classification In RecipeFileException.php line 56: Validation errors were found in ../recipes/ai_recipe_content_classification/recipe.yml: - [install][6]: "token_entity_render" is not a known module or theme. … ### [Error when installing on Drupal CMS](https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580678) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have an up-to-date version of Drupal CMS - this is a local site that was just installed with the _Haven_ site template. After installing the base AI recipe (with Anthropic as the provider), I tried to install this recipe via /admin/config/ai and received this error in a modal: `SandboxException: Failed to run process: The command "'/usr/bin/php' '/var/www/html/vendor/composer/./composer/bin/composer' '--working-dir=/tmp/.package_manager5c7a2d24-e389-4576-aa25-465cc00f8ea5/gWoWPGXxWPkee4xEpyI313GBfwMRN9Mu' 'update' '--with-all-dependencies' '--optimize-autoloader' '--minimal-changes' 'drupal… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [14] 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] Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586639 [2] [Meta] Rich structured chat: adopt MCP content and interaction shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586640 [3] (Optional) Typed context references on user messages via input-side content blocks (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586648 [4] Citations/sources and suggested replies via MCP shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586647 [5] Elicitation round-trip: MCP-shaped request/result objects and pause/resume on ChatProcessor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586646 [6] ChatBlockRenderer plugin type with default renderers and entity cards (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586645 [7] ChatProcessor: structured response channel and block-aware message history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586644 [8] Add MCP content blocks and a _meta bag to ChatMessage (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586643 [9] Add MCP tool annotations to tool definitions and a ContentBlockProducerInterface for rich tool results (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586642 [10] Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586641 [11] 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 [12] Modules should register the AI request tags they can emit, at install time and dynamically (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586638 [13] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [14] `AiReranker::extractItemText()` should prefer chunk text over configured indexed fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586637 [15] ai_provider_configuration renders an empty Configuration widget when the provider has no configuration options (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586636 [16] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [17] Drupal 11.4 DeepChat Block does not work with BigPipe enabled (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586615 [18] AI Balloon Menu throws uncaught TypeError on selection change when user lacks 'use ai ckeditor' permission, breaking media insertion (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586588 [19] Provide proper support for "unconfigured" AI provider state (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3572645 [20] [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 [21] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [22] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [23] Issue #3586539: Add ChatMemory plugin type (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1885 [24] feat: #3586638 Add AI request tag registry with static and dynamic discovery (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1907 [25] Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1815 [26] Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1277 [27] #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [28] Issue #3586636: Don't render an empty Configuration widget (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1906 [29] Resolve #3586539 "Add a ChatMemoryInterface for storing ChatBot chat history" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1904 [30] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [31] Issue#3586558:Preserve-HTML-In-Streamed-Output fixes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1818 [32] QA Meeting - 25th Feb 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3575717 [33] Issue #3605812: Add a setup-provider agent skill to configure the OpenAI provider from an environment variable (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/82 [34] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [35] chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception (ai_provider_amazeeio, Issue) — https://git.drupalcode.org/project/ai_provider_amazeeio/-/work_items/3586239 [36] Expose the agent status stream as MCP-shaped progress to any chat consumer (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586072 [37] Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586071 [38] Preserve structured tool output as content blocks through the agent loop (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586070 [39] Tool settings popup on agent edit form has no visible close/save button (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586066 [40] Give a parent agent possibility to forward request as is (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3550098 [41] No way to limit the size of files passed to an agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586068 [42] AI Agents 1.3.3 release (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586069 [43] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586067 [44] Create implementation of ShortTermMemory (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3546411 [45] Use streamed chat for agents (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3538174 [46] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [47] Configuring the model an agent uses (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586050 [48] Warning: Undefined array key "parameters" en Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() (línea 1038 de /var/www/html/docroot/modules/contrib/ai_agents/src/PluginBase/AiAgentEntityWrapper.php) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586065 [49] Tool settings popup on agent edit form has no visible close/save button (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/335 [50] Resolve ""ai_agent" entity type did not specify a list_builder handler." (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/334 [51] Issue #3586065: Prevent undefined array key warning when parameters is missing (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/331 [52] feat: #3546411 use short term memory plugins in the agent loop (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/321 [53] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/333 [54] Issue#3556533:Normalize-Standalone-Line-Endings-Property_restrictions-Form fixes (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/332 [55] Issue#3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/330 [56] Missing upgrade path: stored `default-relative-url` prop sources written before 1.8 contain `$id` and fail `DefaultRelativeUrlPropSource::parse()` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591904 [57] Replace Lupus CE API with a dedicated Canvas Headless endpoint (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591861 [58] Canvas AI: Run the component agent in the dev chat with setLooped(FALSE), driven by the browser (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591884 [59] [META] Allow Canvas to be used on any content entity type (bundle), as long as it has certain entity type characteristics (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3498525 [60] Content template preview is blank for every non-full view mode (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591908 [61] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [62] Cypress E2E parallel split balances by file count, not runtime — distribute by tagging slow/flaky specs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591907 [63] `drush config:import` can fail to update a Component whose `active_version` changed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591905 [64] Allow patterns to be edited (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591851 [65] Strengthen AutoSaveManager to generate stable hashes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591785 [66] PHPStan bootstrap fails when custom_elements is not installed after merging `canvas_headless` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591906 [67] Media Library widget modal does not open (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3581123 [68] Draft: Resolve "Canvas AI: Add Tools dropdown to chat UI" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1447 [69] feat(CLI Tool): Return flexible codebase files to local environment on canvas pull (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1443 [70] feat(Headless): #3591893 Enable headless previews for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1438 [71] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [72] #3498525 Allow entity types other than node; add feature flag module for taxonomy terms. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1462 [73] Issues/3591884: Run component agnet with setlooped false. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1461 [74] Don't collapse the preview iframe when a view mode's height comes from its content (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1465 [75] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1464 [76] feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1437 [77] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [78] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [79] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [80] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [81] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [82] Resolve #3591907 "Balance cypress E2E parallel split by runtime weight" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1463 [83] #3591905: `drush config:import` can fail to update a Component whose `active_version` changed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1459 [84] #3591851: Allow editing stored patterns (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1403 [85] Draft: #3591838 [PHASE 2] introduce color props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1432 [86] #3591838 brand kit color implementation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1385 [87] Draft: feat(Conflict detection): #3591668 "Text-based Page entity representation via Canvas API" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1241 [88] refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1356 [89] Issue #3591906: define the class in the canvas_headless.services.yml. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1460 [90] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [91] [Discuss] Review context selection ranking factors before 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586365 [92] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [93] Harden CCC context item access checks and document the authoring trust model (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586356 [94] CCC beta4 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586374 [95] Design an indicator for the CCC UI that conveys subscription limits (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586337 [96] Persist context-item token counts and show token-budget usage in CCC UI (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586379 [97] Remove max_items context limit and rely on the token budget (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586378 [98] Create CCC beta3 and status update video (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586333 [99] Sprint 15 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586330 [100] [Meta] Possible 1.0 and 1.1 features and UX/DX improvements following TDT questions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586363 [101] Add Scheduler to CCC Extensions page (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586353 [102] [Meta] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [103] Clarify scope eligibility, ranking, and limits in UI help and documentation (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586348 [104] CCC DX/docs polish before rc1 (api.php, @internal, config/docs, small standards nits) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586359 [105] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [106] Improve disabled conditional subcontext row visibility in the context item listing (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586377 [107] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [108] [Discuss] Integrating content reviews based on context (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3571115 [109] [Discuss] Adding priority to context item to affect ranking (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586364 [110] Add context item ranking priority field and use for ranking selection logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586376 [111] Install `target_entities` field storage when Dynamic Entity Reference is enabled on existing sites (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586375 [112] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [113] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [114] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [115] Issue #3586356: Harden CCC context item access checks and document the authoring trust model. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/233 [116] Issue #3586275: Add ai_context_document_loader submodule for MDXEditor imports. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/176 [117] Issue #3586241: Document Supported vs Internal APIs (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/186 [118] Issue #3586192: Clean up code inconsistencies. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/160 [119] Issue #3586353: Add Scheduler to CCC Extensions page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/231 [120] Issue #3586359: Polish developer APIs and internal documentation (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/234 [121] Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/226 [122] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [123] Issue #3586361: Decouple context item form descriptions from scope plugin descriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/239 [124] Progressive indexing can drop tail chunks (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584032 [125] InvalidArgumentException: Invalid translation language (und) when translating media entities (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585532 [126] Auto-translate referenced taxonomy terms (and other translatable entities) when translating a node (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585539 [127] Resolve "InvalidArgumentException: Invalid translation language (und) when translating media entities" (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/36 [128] feat: Add batch translation for referenced translatable entities in AiTranslateController (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/35 [129] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [130] fix: enhance model retrieval with fallback for admin key access (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/25 [131] feat: add translateText method and support for translation in LiteLlmAiProvider (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/26 [132] Error when applying recipe via Drush in Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579955 [133] Error when installing on Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579954 [134] Error when applying recipe via Drush in Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580679 [135] Error when installing on Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580678 --- MODULE SUMMARIES ---

                              AI (Artificial Intelligence)

                              A comprehensive design proposal for rich structured chat landed this period. The [Meta] Rich structured chat: adopt MCP content and interaction shapes plan — filed as 12 deliberately postponed issues awaiting maintainer approval via Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x — proposes that ChatMessage adopt Model Context Protocol shapes directly. The set covers content blocks, citations, tool output rendering, elicitation, and progress indicators. Foundation issues include Add MCP content blocks and a _meta bag to ChatMessage, Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction, and ChatProcessor: structured response channel and block-aware message history. The plan targets the 1.6.x branch and awaits maintainer approval; no work has begun.

                              Elsewhere, MR !1907 adds an AI request tag registry (ai.tag_registry service, hook_ai_tags_info()) for Modules should register the AI request tags they can emit, at install time and dynamically. `AiReranker::extractItemText()` should prefer chunk text over configured indexed fields was accepted, addressing a search_api_ai regression where chunk-mode reranking reads entity-level text instead of per-chunk content. Chatbot closes itself when adding a modal reached RTBC with MR !1815. ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models was confirmed; streaming requests via gemini-api-php fail with Gemini 2.x while non-streamed requests succeed.

                              How can I help on this project?

                              Review MR !1907 (AI request tag registry and hook_ai_tags_info()). Test MR !1815 (chatbot modal fix) in Drupal 11.4 with BigPipe enabled. Investigate the Gemini 2.x streaming 400 error by tracing gemini-api-php payload differences between streaming and non-streaming endpoints.

                              Contributors: Abhinav Jha (ajabhinavjha30), Abhishek Dhariwal (adaptative), Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511), Marcus Johansson (Marcus_Johansson), Ricardo Castañeda (cadence96), Rob Loach (robloach), Rodel Duterte (rduterte), Shivam Sen (shivamsen_12579) ---

                              Drupal AI Initiative

                              Activity was minimal during this period. A QA Meeting - 25th Feb 2026 work item was closed, reflecting administrative housekeeping rather than technical development.

                              No merge requests were merged and no commits were pushed to the codebase during the reporting window. No API changes, bug fixes, or feature work landed in this 24-hour period.

                              How can I help on this project?

                              Check the issue queue for unassigned issues without open merge requests that need patches. Review open merge requests to provide feedback and help move work forward. Test recent AI module integrations and report compatibility issues.

                              ---

                              OpenAI Provider

                              A new merge request was opened to add an agent skill for configuring the OpenAI provider from the command line. The Add a setup-provider agent skill to configure the OpenAI provider from an environment variable MR introduces a `.agents/skills/setup-provider/SKILL.md` file that enables setting up the provider by reading an API key from an environment variable using `drush key:save` and core config commands. The skill follows the pattern established in AI core, avoiding tool plugins and the `drupal/tool` dependency, with no new PHP code or test requirements.

                              No commits were merged during the reporting period.

                              How can I help on this project?

                              Review the setup-provider agent skill MR to validate the skill definition follows best practices and works correctly with environment variable handling. Test the skill against a live site to ensure the configuration workflow is robust.

                              Contributors: Joshua Fernandes (joshua1234511) ---

                              Anthropic Provider

                              A new merge request was opened to implement token counting, citations, and context management (MR !35). This represents phase 3 of the native SDK integration effort and introduces three opt-in features. Token counting adds a public AnthropicProvider::countTokens() method backed by the SDK's native counting API. Citations and context management (including compaction and editing) are also included. All three features are disabled by default and controlled via new admin form sections, ensuring backward compatibility with the existing chat API when the features are turned off.

                              The merge request includes 1,823 lines of changes and is currently awaiting review.

                              How can I help on this project?

                              • Review MR !35 for token counting and citations, focusing on API design and backward compatibility.
                              • Test the new token counting method with various ChatInput configurations to verify accuracy against Anthropic's SDK.
                              Contributors: Carlos Ospina (camoa) ---

                              amazee.ai Private AI Provider

                              The primary focus this period was on addressing compatibility issues with Drupal's default rendering pipeline. chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception was closed. This issue prevented the provider from executing chat completions when calls were made within PHP Fibers, which occurs routinely in Drupal sites with BigPipe enabled (a core module active by default). The failure manifested as a "stream handler closure" exception from the OpenAI factory, effectively blocking chat functionality in standard production environments.

                              No merge requests were opened or merged during this period, and no commits were pushed to the repository.

                              How can I help on this project?

                              • Test the chat() function in environments with BigPipe enabled to verify the Fiber compatibility fix works across different Drupal configurations.
                              • Review the module's broader streaming implementation to identify any similar Fiber-related edge cases that may not yet have surfaced.
                              ---

                              AI Agents

                              The fix for AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image was merged. The serialization round-trip through toArray() and fromArray() was breaking when chat histories included file attachments; AbstractFileBase::toArray() serialized files correctly, but restoration failed because fromArray() expected file objects and received arrays instead. The fix ensures ChatMessage properly reconstructs file objects during deserialization.

                              Three new feature proposals targeting the postponed Chat Fundamentals plan (pending maintainer approval for 1.6.x branches) were updated: Preserve structured tool output as content blocks through the agent loop, Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation, and Expose the agent status stream as MCP-shaped progress to any chat consumer. These remain blocked on upstream approval.

                              Two UI bugs received patches: Tool settings popup on agent edit form has no visible close/save button (MR !335 open) and Warning: Undefined array key "parameters" in AiAgentEntityWrapper->getDefaultInformationTools() (MR !331 open). A new issue, No way to limit the size of files passed to an agent, proposes per-agent file size configuration.

                              How can I help on this project?

                              Review MR !335 for the Tool settings popup close button fix or MR !331 for the undefined array key warning. Contribute design input on file size limit configuration. Help clarify model selection behavior in Configuring the model an agent uses.

                              Contributors: AKHIL BABU (AkhilBabu) [1], Alexis Martínez (alexismmd), Bharat Kelotra (bharatkelotra), Marcus Johansson (Marcus_Johansson)

                              ---

                              Drupal Canvas

                              Three significant features and fixes were merged in the past 24 hours. Canvas Headless switched from the Lupus CE API to a dedicated Canvas content endpoint, removing the dependency on Lupus Decoupled and giving Canvas full control over the headless response contract. The new /canvas/content-api endpoint provides draft-aware content, document head data, and route information via the fetchPage() client.

                              A critical deployment blocker was resolved: drush config:import can now update Components whose active_version changed. Previously, importing component configuration with a different active version hash would fail with a "loaded version is not the active version" error, breaking the standard drush deploy workflow.

                              The editor gained the ability to edit stored patterns. Patterns can now be opened back into the Canvas editor for modification, addressing a longstanding gap where users had to delete and recreate patterns to make changes.

                              A normalization refactor consolidated duplicated typed-data casting logic from AutoSaveManager::normalizeEntity() and ComponentSourceBase::castRawTypedConfigToPhpTypes() into a single TypedDataHelper::castRawPhpTypes() method, strengthening hash stability for auto-save conflict detection.

                              Open work includes fixing blank content template previews for non-full view modes (iframe stuck at height 0px), an upgrade path for default-relative-url prop sources written before 1.8, and a browser-driven Canvas AI component agent using setLooped(FALSE).

                              How can I help on this project?

                              Review the open MR for fixing blank non-full view mode previews, which updates iframe height handling. Help test or review Cypress E2E parallel balancing by runtime weight, which addresses slow CI nodes. Reproduce and confirm steps for Media Library widget modal not opening.

                              Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), AKHIL BABU (AkhilBabu), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Dave Long (longwave) [2], David Bravo (davidbp), Feliksas Mazeikis (f.mazeikis) [1], Harumi Jang (hooroomoo), Ignacio Sánchez Holgueras (isholgueras), Jakub Piasecki (zaporylie), Lauri Timmanee (lauriii), wotnak [1]

                              ---

                              Context Control Center (CCC)

                              The project merged three improvements focused on cleanup and documentation ahead of the beta4 release. MR !231 added the Scheduler module to the Extensions admin page, surfacing optional scheduled publishing and unpublishing support for context items. MR !234 polished developer-facing APIs by introducing ai_context.api.php, marking internal APIs with @internal, and reconciling configuration and documentation inconsistencies. MR !226 changed conditional subcontext behavior so that when the Enable conditional subcontext AI decisions setting is disabled, conditional children are excluded from selection entirely rather than being unconditionally included.

                              Several new planning and cleanup issues were opened. Review context selection ranking factors before 1.0 calls for shared understanding of how scope matching, eligibility, and ranking work together. Add context item ranking priority field proposes a new priority field to influence selection order. Remove max_items context limit suggests simplifying configuration by relying solely on the token budget. Install target_entities field storage when Dynamic Entity Reference is enabled addresses a database fatal on existing sites.

                              Work is in progress on access hardening (MR !233), demo content preparation, and form description decoupling (MR !239).

                              How can I help on this project?

                              Review MR !233 on access checks and trust model documentation, or MR !239 on scope form descriptions. Help refine the ranking discussion in issue #3586365. Pick up the unassigned Dynamic Entity Reference field storage bug.

                              Contributors: Ahmad Khalil (ahmad-khalil-imagex), Juan Correa (jucs7), Kristen Pol (kepol) [3], Rob Loach (robloach), Tekla Aivazashvili (aivazashvilit)

                              ---

                              AI Search

                              No merge activity occurred during this period. A critical bug was identified in the progressive indexing system: Progressive indexing can drop tail chunks reveals that the Long Chunk embedding strategy can silently fail to index trailing content. The root cause is a mismatch between chunk counting and actual chunking—computeItemChunks() uses a hard-coded GPT-3.5 tokenizer while getEmbedding() uses the tokenizer configured on the Search API server. In one documented case, this discrepancy caused the tracking system to count 106 chunks while actual processing generated 370. Search API marked items as complete after processing only the first 100 chunks, leaving the remainder unindexed. This affects any configuration using a tokenizer other than GPT-3.5, including XLM-RoBERTa and others. The issue remains open and unassigned.

                              How can I help on this project?

                              • Investigate the tokenizer mismatch in Progressive indexing can drop tail chunks and develop a patch ensuring computeItemChunks() and getEmbedding() use consistent tokenization.
                              • Test the reproduction steps with different tokenizer configurations to document the full scope of affected setups.
                              ---

                              AI translate

                              Activity focused on improving translation handling for media entities and referenced content. A fix was proposed for an InvalidArgumentException: Invalid translation language (und) when translating media entities issue, where batch translation of media entities (such as media.image) fails when the translation language is not properly set. Two merge requests addressing this issue were opened: MR !30 and MR !36.

                              Work also advanced on auto-translating referenced taxonomy terms and other translatable entities when translating nodes. The proposed solution adds a batch operation translateReferencedEntities() that scans entity reference fields and automatically translates referenced ContentEntityInterface instances that lack translations in the target language. MR !35 was opened with 109 lines of changes implementing this feature.

                              Both issues remain open with no commits merged during this period. Progress is blocked pending review of the open merge requests.

                              How can I help on this project?

                              • Review and test MR !30 or MR !36 for the media translation language fix
                              • Review MR !35 implementing automatic referenced entity translation
                              Contributors: Carlos Romero (o0Charly0o), szato (odi) ---

                              LiteLLM AI Provider

                              The LiteLLM AI Provider saw significant progress over the past 24 hours, with two merge requests landed and several improvements committed to the codebase.

                              On the feature side, a feat: add translateText method and support for translation in LiteLlmAiProvider merge request was integrated, adding translation capabilities to the provider. This 72-line change introduces the translateText method to the LiteLlmAiProvider class.

                              Several bug fixes were also merged. A fix: enhance model retrieval with fallback for admin key access addressed issues with model retrieval by implementing fallback logic for admin key access. Additional commits introduced null-safe key loading in settings form validation, cache model retrieval per request, and added request timeout handling to improve reliability.

                              The provider also gained enhanced capability detection, with commits adding support for vision, tools, and structured output detection while removing unimplemented video and audio operation types to better reflect actual capabilities.

                              How can I help on this project?

                              The project currently has no open issues or pending merge requests visible in this reporting period. Consider testing the newly added translation features in real-world scenarios, reviewing code quality and test coverage for recent commits, or checking the issue queue for any unresolved bugs.

                              Contributors: Carlos Romero (o0Charly0o), Dan Lemon [3]

                              ---

                              AI Image Classification

                              No merge requests were completed or commits pushed during this period. Two blocking issues were reported that prevent the recipe from being applied on Drupal CMS installations. Error when applying recipe via Drush in Drupal CMS surfaces a ValidKeysConstraintValidator error that halts installation at the 3/5 mark after Field Widget Actions and AI Automators are installed. A separate issue, Error when installing on Drupal CMS, documents a SandboxException during Composer operations when attempting to install via the admin UI on sites using the Haven template. Both issues are unassigned and remain open, blocking adoption on Drupal CMS environments.

                              How can I help on this project?

                              • Reproduce and debug the ValidKeysConstraintValidator error on a fresh Drupal CMS installation to identify which configuration is passing a string instead of an array.
                              • Investigate the Composer process failure in the Package Manager sandbox to determine dependency conflicts with the Haven template.
                              ---

                              AI Content Classification

                              No merge requests or commits were pushed during this reporting period. Two installation issues were opened within the last 24 hours, both affecting fresh Drupal CMS deployments. The first issue, Error when applying recipe via Drush in Drupal CMS, reports a validation error when applying the recipe via Drush, with the recipe.yml file referencing "token_entity_render" as an unknown module or theme. The second issue, Error when installing on Drupal CMS, describes a SandboxException during Composer operations when attempting installation through the admin UI on a site using the Haven site template. Both issues appear to block installation on standard Drupal CMS environments and remain unassigned with no related merge requests.

                              How can I help on this project?

                              ======================================================================== ## [15] factcheck:tldr:developer ======================================================================== Layer-1 corrections: 1 Judge flags: 5 ======================================================================== ## [16] summariseModule:ai:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI (Artificial Intelligence) (machine name: ai) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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), Abhishek Dhariwal (adaptative), Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511), Marcus Johansson (Marcus_Johansson), Ricardo Castañeda (cadence96), Rob Loach (robloach), Rodel Duterte (rduterte), Shivam Sen (shivamsen_12579)". 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). ### [Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x](https://git.drupalcode.org/project/ai/-/work_items/3586639) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Artem Dmitriiev (a.dmitriiev), Christoph Breidert (breidert) | Labels: category::plan, priority::normal, state::accepted Description: ### Problem/Motivation A coordinated set of 12 issues — the **Chat Fundamentals plan** — has been filed across the ai and ai_agents queues, proposing that rich structured chat (content blocks, citations, tool output rendering, forms-in-chat via elicitation, pre-tool confirmation, progress, suggested replies) be built by adopting the Model Context Protocol shapes (spec revision 2025-06-18) directly as the canonical array shapes. All 12 issues are deliberately filed as **`state::postponed`**: they are a design proposal awaiting maintainer approval, not work in progress. Nothing in the set is i… ### [[Meta] Rich structured chat: adopt MCP content and interaction shapes](https://git.drupalcode.org/project/ai/-/work_items/3586640) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::plan, state::postponed Description: > ⚠️ **Postponed pending approval.** This issue set awaits maintainer approval — see the [approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639). It targets the **1.6.x branch once it is created**; nothing here is intended for 1.5.x. ### Problem/Motivation Chat responses in the AI ecosystem are plain text plus one trusted-HTML escape hatch. Concretely, on 1.5.x today: - `ChatMessage` carries only `role`, `text`, `files`, `remoteFiles`, `tools`, `toolId`. There is no metadata bag and no slot for structured payloads. - `ChatOutput::$metadata` is `mixed`, settable only thr… ### [(Optional) Typed context references on user messages via input-side content blocks](https://git.drupalcode.org/project/ai/-/work_items/3586648) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Optional capability** — the output-side issue set stands without it. **Depends on:** [content blocks (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643); history persistence via [structured response channel (#3586644)](https://git.drupalcode.org/project/ai/-/work_items/3586644). ### P… ### [Citations/sources and suggested replies via MCP shapes](https://git.drupalcode.org/project/ai/-/work_items/3586647) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks + `_meta` registry (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643), [structured response channel (#3586644)](https://git.drupalcode.org/project/ai/-/work_items/3586644), [renderers (#3586645)](https://git.drupalcode.org/project/ai/-/work_items/3586645)… ### [Elicitation round-trip: MCP-shaped request/result objects and pause/resume on ChatProcessor](https://git.drupalcode.org/project/ai/-/work_items/3586646) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks + `_meta` conventions (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643); shares the interface-evolution pattern with the structured-response child issue and can be developed in parallel with it. ### Problem/Motivation There is no way for a processor — … ### [ChatBlockRenderer plugin type with default renderers and entity cards](https://git.drupalcode.org/project/ai/-/work_items/3586645) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks on ChatMessage (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643). ### Problem/Motivation Once messages carry MCP content blocks (#3586643), every consumer still needs bespoke code to turn a block into markup. Without a shared rendering path, each chatb… ### [ChatProcessor: structured response channel and block-aware message history](https://git.drupalcode.org/project/ai/-/work_items/3586644) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** [content blocks on ChatMessage (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643) and [streamed metadata fix (#3586641)](https://git.drupalcode.org/project/ai/-/work_items/3586641). ### Problem/Motivation The ChatProcessor plugin type (`Drupal\ai\Plugin\ChatProcessor\C… ### [Add MCP content blocks and a _meta bag to ChatMessage](https://git.drupalcode.org/project/ai/-/work_items/3586643) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640) (conventions). Foundation for the structured-response, renderer, elicitation, agent-loop and citations child issues (see the meta issue's child list). ### Problem/Motivation `ChatMessage` can carry only text, files… ### [Add MCP tool annotations to tool definitions and a ContentBlockProducerInterface for rich tool results](https://git.drupalcode.org/project/ai/-/work_items/3586642) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** nothing (wave 1 of the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640)). Pairs with the content-blocks child issue (03) for block shape validation and the ai_agents pre-tool confirmation child issue (08) for gating — see the meta issue's child list for links. ### Pro… ### [Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction](https://git.drupalcode.org/project/ai/-/work_items/3586641) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::bug, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branch once it is created**. **Depends on:** nothing (wave 1 of the [meta plan](https://git.drupalcode.org/project/ai/-/work_items/3586640)). ### Problem/Motivation `ChatOutput` has a `getMetadata(): mixed` accessor, but the metadata can only be set through the constructor's third argument. There is no `setMetadata()`. This has two c… ### [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-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: AI Initiative Sprint, AI Innovation, Needs manual testing, aiCoreModule 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… ### [Modules should register the AI request tags they can emit, at install time and dynamically](https://git.drupalcode.org/project/ai/-/work_items/3586638) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: aiCoreModule, category::feature, priority::normal, state::needs review Description: ## Summary Modules should **register the AI request tags they can emit**, so the set of possible tags is known before any request is made. Registration should happen at installation/discovery time for static tags, and dynamically for tags that only exist because of site configuration — an agent created as `foo` should register something like `ai_agent_foo_request`. ## Problem Tags are free-form strings passed as the third argument to every operation call, appended to the provider plugin, and only observable once a request has already been executed (line references against 1.5.x): - `ChatIn… ### [Chatbot closes itself when adding a modal](https://git.drupalcode.org/project/ai/-/work_items/3499451) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, Has Testing Steps Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1815 [Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it](https://git.drupalcode.org/project/ai/-/merge_requests/1815) | State: opened | Author: Abhishek Dhariwal (adaptative), 46 diff lines 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 ### [`AiReranker::extractItemText()` should prefer chunk text over configured indexed fields](https://git.drupalcode.org/project/ai/-/work_items/3586637) State: opened | Updated: 2026-08-05 | Author: Abhisek Mazumdar (abhisekmazumdar) | Assigned: Ann Mary Sruthy (annmarysruthy) | Labels: category::bug, priority::normal, state::accepted, v1.5.x-dev Description: ## Problem/Motivation `ai_search`'s chunk-mode retrieval (used by `RagTool` and any other consumer querying with `search_api_ai_get_chunks_result`) carries the actual chunk text in `$item->getExtraData('content')`, not in the item's configured indexed source fields. `AiReranker::extractItemText()` only reads the processor's configured `source_fields` off each result item. For chunk-mode results this means every chunk belonging to the same entity reranks against the same text: the entity's full configured field content, not the individual chunk. Chunk-level rerank quality regresses to entity-… ### [ai_provider_configuration renders an empty Configuration widget when the provider has no configuration options](https://git.drupalcode.org/project/ai/-/work_items/3586636) State: opened | Updated: 2026-08-04 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: category::bug, priority::minor, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1906 [Issue #3586636: Don't render an empty Configuration widget](https://git.drupalcode.org/project/ai/-/merge_requests/1906) | State: opened | Author: Abhinav Jha (ajabhinavjha30), 17 diff lines Description: ### Overview The `ai_provider_configuration` form element renders an empty `Configuration` details widget when the selected provider has no configuration options for the operation type. ### Steps to reproduce 1. Check out the branch of MR https://git.drupalcode.org/project/ai_agents/-/merge_requests/315 in the `ai_agents` project (\[#3535760\]). 2. Open any AI agent and select a provider from the Request settings. 3. The configuration field is empty. Found while testing with the `litellm` provider. ![image.png](https://git.drupalcode.org/-/project/106525/uploads/87d910a86e016b1197f5486c1b8… ### [Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests](https://git.drupalcode.org/project/ai/-/work_items/3582633) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, Has Testing Steps Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !1432 >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests Check-in Date: MM/DD/YYYY [/Tracker] Problem/Motivation The AI module has a system for running FunctionalJavascript tests in CI that relies on two conventions: Every new FJS test class must have a @group annotation with the issue number it belongs to, so the filter script (scripts/filter-functio… ### [Drupal 11.4 DeepChat Block does not work with BigPipe enabled](https://git.drupalcode.org/project/ai/-/work_items/3586615) State: opened | Updated: 2026-08-04 | Author: jesmaster (Jesmaster) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::bug Description: Chatbot was working on Drupal 11.3, I updated to 11.4 and the chatbot doesn't open when clicked anymore, there are no javascript errors in the console log. I deleted the block and re-created it and I'm getting this AJAX error when choosing the assisstant. ### [AI Balloon Menu throws uncaught TypeError on selection change when user lacks 'use ai ckeditor' permission, breaking media insertion](https://git.drupalcode.org/project/ai/-/work_items/3586588) State: opened | Updated: 2026-08-04 | Author: Leandro Luvigne (lluvigne) | Assigned: Leandro Luvigne (lluvigne) | Labels: aiCkeditor, category::bug, state::needsWork Description: ## Summary The AI Balloon Menu (`ai_balloon_menu`) plugin does not check the `hasAccess` flag from the shared `ai_ckeditor_ai` config object, unlike the AI Assistant toolbar plugin (`aickeditor`) which correctly checks it. For users without the `use ai ckeditor` permission, this causes an uncaught `TypeError` on any non-collapsed selection change, which most commonly manifests as media insertion silently failing (the Media Library "Insert selected" AJAX request is aborted client-side). ## Steps to reproduce 1. Fresh Drupal core (Standard profile) + `composer require drupal/ai`, enable `ai` an… ### [Provide proper support for "unconfigured" AI provider state](https://git.drupalcode.org/project/ai/-/work_items/3572645) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: Levente Besenyei (LeventeB) | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [mxr576](https://www.drupal.org/user/315522) >>> [Tracker] Update Summary: [One-line status update for stakeholders] Short Description: [One-line issue summary for stakeholders] Check-in Date: MM/DD/YYYY Metadata is used by the AI Tracker. Docs and additional fields here. [/Tracker] Problem/Motivation This is the second time we have hit a WSOD with the Gemini provider where simply enabling the module can break pages that instantiate AI provider clients. See #3572638: WSOD after module enabled. At the moment, this does not look like something that can… ### [[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: closed | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | 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 … ### [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-08-04 | Author: josecarlosmedero | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside 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… ### [AI Automator Token Replacement with removing unresolved Tokens (Checkbox?)](https://git.drupalcode.org/project/ai/-/work_items/3586535) State: opened | Updated: 2026-08-04 | Author: ro-no-lo | Assigned: Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, Needs review, Quick Win Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1884 [Issue #3586535: AI Automators strip unresolved tokens from prompts](https://git.drupalcode.org/project/ai/-/merge_requests/1884) | State: opened | Author: Rodel Duterte (rduterte), 237 diff lines Description: When we use the Advanced mode with Tokens in the AI Automator settings, Tokens which are not resolved by the Token system stay in the AI Prompt. This is not much text for AI, but everything what can be avoided to send to AI, should be removed. As an example. I have an Entity where I defined a textarea called field_user_prompt which can optionally (!) be used to alter the prompt I setup in the field AI automation. So there is a Token like this: [node:field_user_prompt:value]. This stays when the user left the field empty. It's only replaced when something is filled in. I do think that unresol… --- MERGE REQUESTS (24h) --- ### [Issue #3586539: Add ChatMemory plugin type](https://git.drupalcode.org/project/ai/-/merge_requests/1885) State: opened | Author: Rob Loach (robloach) | Branch: 3586539-chat-memory-interface | 2616 diff lines Description: Adds the ChatMemory plugin type originally from !1835 , without the other changes. Closes #3586539 ### [feat: #3586638 Add AI request tag registry with static and dynamic discovery](https://git.drupalcode.org/project/ai/-/merge_requests/1907) State: opened | Author: Ricardo Castañeda (cadence96) | Branch: 3586638-modules-should-register-the-ai-request-tags-they-can-emit-at-install-time-and-dynamically | 851 diff lines Description: ## Description Adds a tag registry service (`ai.tag_registry`) so modules can declare, up front, which AI request tags they may emit — closing the gap described in #3586638, where tags are free-form strings nobody declares until a request has already run. Two discovery paths feed the registry: - **Static** — a new `hook_ai_tags_info()` (documented in the new `ai.api.php`, this module had none before). Any module — OOP `#[Hook]` class or legacy procedural `.module` function — can implement it. ai core registers its own known tags in `src/Hook/AiTags.php` (operation types pulled from … ### [Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes.](https://git.drupalcode.org/project/ai/-/merge_requests/1277) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3499451-chatbot-closes-itself | 125951 diff lines Description: Closes #3499451 ### [#3582633: Add Functional JavaScript testing conventions and validation script](https://git.drupalcode.org/project/ai/-/merge_requests/1432) State: opened | Author: Shivam Sen (shivamsen_12579) | Branch: 3582633-document-functionaljavascript-test | 237 diff lines Description: (cherry picked from commit 20c8ac18d15a25ffd0db807b6e427e8b41d34cf7) Closes #3582633 ### [Resolve #3586539 "Add a ChatMemoryInterface for storing ChatBot chat history"](https://git.drupalcode.org/project/ai/-/merge_requests/1904) State: closed | Author: Marcus Johansson (Marcus_Johansson) | Branch: 3586539-chatbot-memory-from-1835 | 3029 diff lines Description: Resolves #3586539 ### [Issue#3586558:Preserve-HTML-In-Streamed-Output fixes.](https://git.drupalcode.org/project/ai/-/merge_requests/1818) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3586558-Preserve-HTML-In-Streamed-Output | 468 diff lines Description: ## Description ## Testing instructions 1. 2. ## Checklist - [ ] I have linked the related issue in the MR title or description - [ ] I have performed a self-review of my own code - [ ] I have added or updated tests, or explained in the description why this change is not covered by tests - [ ] I have updated documentation for any new or changed functionality - [ ] I have written testing instructions and verified them locally - [ ] I have noted any required post-merge steps (config imports, cache rebuilds, manual changes) - [ ] This MR contains no breaking API or hook changes, or the… --- COMMITS (24h) --- (none) ======================================================================== ## [17] summariseModule:ai_initiative:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal AI Initiative (machine name: ai_initiative) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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). ### [QA Meeting - 25th Feb 2026](https://git.drupalcode.org/project/ai_initiative/-/work_items/3575717) State: closed | Updated: 2026-08-04 | Author: drupalbot | Assigned: Madeline Tuhey (maddyt) | Labels: category::plan, meetings, priority::normal, state::accepted Description: >>> [!note] Migrated issue Reported by: [maddyt](https://www.drupal.org/user/3843187) >>> Update Summary: QA Meeting - 25th Feb 2026 Check-in Date: 02/25/2026 Problem/Motivation Weekly QA Meeting to discuss updates around Drupal Pod Development and General QA Processes Points Discussed QA compatibility scenario testing start The QA team will begin testing the matrix of different compatibility scenarios for AI modules (e.g., AI context, AI search) starting next Monday. Compatibility scenarios documented in QA issue A list of specific compatibility testing scenarios will be added to th… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [18] summariseModule:ai_provider_openai:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: OpenAI Provider (machine name: ai_provider_openai) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Joshua Fernandes (joshua1234511)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                  OpenAI Provider

                                  then use

                                  ,

                                  ,

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

                                    How can I help on this project?

                                    " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [Issue #3605812: Add a setup-provider agent skill to configure the OpenAI provider from an environment variable](https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/82) State: opened | Author: Joshua Fernandes (joshua1234511) | Branch: 3605812-create-a-skill | 624 diff lines Description: Closes #3605812. Adds `.agents/skills/setup-provider/SKILL.md` — an agent skill that sets up the OpenAI provider on a running site from the CLI, reading the API key from an existing environment variable and never touching the secret itself. Follows the pattern the two AI-core skills settled on (ai#3586561, ai#3586562): a single `SKILL.md`, driven by `drush key:save` plus core config commands. No tool plugins, no `drupal/tool` dependency, no PHP added — so there is nothing here to unit test and no new dependency to carry. ### What the skill does 1. Blocking clarification step — asks for the… --- COMMITS (24h) --- (none) ======================================================================== ## [19] 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-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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) ======================================================================== ## [20] summariseModule:ai_provider_amazeeio:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: amazee.ai Private AI Provider (machine name: ai_provider_amazeeio) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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

                                      amazee.ai Private AI 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). ### [chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception](https://git.drupalcode.org/project/ai_provider_amazeeio/-/work_items/3586239) State: closed | Updated: 2026-08-04 | Author: Nik LePage (niklp) | Assigned: unassigned | Labels: Description: Apologies this is AI generated, but it's outside my remit. I encountered this while trying to generate some text. Didn't understand it, Claude seems to... Any chat() call made through ai_provider_amazeeio fails with: To use stream requests you must provide an stream handler closure via the OpenAI factory.whenever the call happens to execute inside an active PHP Fiber — which, on a default Drupal install with BigPipe enabled (core, on by default), is a routine occurrence, not an edge case. In practice this means the provider cannot currently be used for chat completions from most real request… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [21] summariseModule:ai_agents:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Agents (machine name: ai_agents) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: AKHIL BABU (AkhilBabu) [1], Alexis Martínez (alexismmd), Bharat Kelotra (bharatkelotra), 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 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). ### [Expose the agent status stream as MCP-shaped progress to any chat consumer](https://git.drupalcode.org/project/ai_agents/-/work_items/3586072) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. Opt-in. **Depends on:** the [meta plan's conventions](https://git.drupalcode.org/project/ai/-/work_items/3586640); soft-depends on the [`_meta` key registry (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643). Independent of the ChatProcessor child issues. ### Problem/Mo… ### [Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation](https://git.drupalcode.org/project/ai_agents/-/work_items/3586071) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. Strictly opt-in. **Depends on (ai project):** [tool annotations (#3586642)](https://git.drupalcode.org/project/ai/-/work_items/3586642), [elicitation contract (#3586646)](https://git.drupalcode.org/project/ai/-/work_items/3586646). ### Problem/Motivation `AgentToolPreExecuteEvent` (`ai_age… ### [Preserve structured tool output as content blocks through the agent loop](https://git.drupalcode.org/project/ai_agents/-/work_items/3586070) State: opened | Updated: 2026-08-05 | Author: Marcus Johansson (Marcus_Johansson) | Assigned: unassigned | Labels: category::feature, state::postponed Description: > ⚠️ **Postponed pending approval.** Part of the [Chat Fundamentals plan](https://git.drupalcode.org/project/ai/-/work_items/3586640); awaits maintainer approval ([approval issue](https://git.drupalcode.org/project/ai/-/work_items/3586639)). Targets the **1.6.x branches of ai and ai_agents once created**. **Depends on (ai project):** [ContentBlockProducerInterface + tool annotations (#3586642)](https://git.drupalcode.org/project/ai/-/work_items/3586642), [content blocks (#3586643)](https://git.drupalcode.org/project/ai/-/work_items/3586643), [structured response channel (#3586644)](https://gi… ### [Tool settings popup on agent edit form has no visible close/save button](https://git.drupalcode.org/project/ai_agents/-/work_items/3586066) State: opened | Updated: 2026-08-05 | Author: Abhisek Mazumdar (abhisekmazumdar) | Assigned: Abhisek Mazumdar (abhisekmazumdar) | Labels: Novice, Quick Win, category::bug, priority::minor Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !335 [Tool settings popup on agent edit form has no visible close/save button](https://git.drupalcode.org/project/ai_agents/-/merge_requests/335) | State: opened | Author: AKHIL BABU (AkhilBabu), 95 diff lines Description: ## Problem/Motivation The tool-configuration popup on the agent edit form (`/admin/config/ai/tools-automation/agents/{agent}/edit/form`, click **Configure** under a tool) has no visible way to close or save it. The popup is a MicroModal (`css/micromodal.css`, `js/agents_form.js`) introduced in #3559183 / !213. Its header renders a close control: ```php // src/Form/AiAgentForm.php, createToolUsageForm() '' ``` `data-micromodal-close` makes it functional, but nothing renders it visibly. `css/micromodal.css` only draws the "✕" glyph on `.ai-modal__close:before`: ```css .ai-modal__header .ai-m… ### [Give a parent agent possibility to forward request as is](https://git.drupalcode.org/project/ai_agents/-/work_items/3550098) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: Marcus Johansson (Marcus_Johansson), Rodel Duterte (rduterte) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) >>> Problem/Motivation Many time a user is actually asking an orchestration agent just one instruction for one specific agent. Depending on how well the prompt is, there might be loss of information when this is forwarded to the subagent. If the parent knows that it should just forward the request as is, then it should be able to give this as a token instead. This helps both with consistency, but also costs and speed, since it will just output one token. Proposed resolution Create a token that th… ### [No way to limit the size of files passed to an agent](https://git.drupalcode.org/project/ai_agents/-/work_items/3586068) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: why::needsInfo Description: ## Problem Agents accept files onto the chat history, and no path applies a size limit. There is no configuration for a maximum size, and no check anywhere in the module. A site that needs one has to validate file sizes itself, before the file ever reaches the agent, and every integration has to reimplement that. Files are also carried in chat history and base64-encoded on every serialization, so the cost is not limited to the single request that introduced them. ## Proposed solution Would it make sense to make this a config on the agent, alongside the other per-agent limits? A per-agent… ### [AI Agents 1.3.3 release](https://git.drupalcode.org/project/ai_agents/-/work_items/3586069) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: category::task, priority::normal, state::accepted ### [AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image](https://git.drupalcode.org/project/ai_agents/-/work_items/3586067) State: closed | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::bug Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !333 [AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image](https://git.drupalcode.org/project/ai_agents/-/merge_requests/333) | State: merged 2026-08-05 | Author: AKHIL BABU (AkhilBabu), 212 diff lines Description: ## Problem `AiAgentEntityWrapper::toArray()` and `::fromArray()` do not round-trip a chat history containing files. Restoring an agent whose stored history includes an image throws: ``` Error: Call to a member function toArray() on array in Drupal\ai\OperationType\Chat\ChatMessage->toArray() (line 301 of modules/contrib/ai/src/OperationType/Chat/ChatMessage.php) Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getContextTools() Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->fromArray() ``` `ChatMessage::toArray()` serializes each file through `AbstractFileBase::toArray()`, so the store… ### [Create implementation of ShortTermMemory](https://git.drupalcode.org/project/ai_agents/-/work_items/3546411) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::feature Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !183 >>> Problem/Motivation Short term memory is now available here: #3528730: Create ShortTermMemoryPlugin We should add an integration with it. Proposed resolution Add a parameter to the agent config to save the short term memory config. Add a subform integration for saving the configuration, while editing the AI Agent. Assume no ShortTermMemory by default. Trigger ShortTermMemory after the request event. ### [Use streamed chat for agents](https://git.drupalcode.org/project/ai_agents/-/work_items/3538174) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !165 >>> Problem/Motivation We are making streamed chat possible in #3528549: Allow tool calling in streamed chat. This should make it possible to use it with agents. Steps to reproduce Proposed resolution Implement a solution based on #3528549: Allow tool calling in streamed chat Remaining tasks User interface changes API changes Data model changes ### [Add limits on how often a tool can run](https://git.drupalcode.org/project/ai_agents/-/work_items/3547995) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: >>> [!note] Migrated issue Reported by: [marcus_johansson](https://www.drupal.org/user/385947) Related to !224 >>> Problem/Motivation Right now we have to tell the system prompt how often it is allowed to use a specific tool. But there should also be a determenistic way, where if the tool gets stuck in a loop or searches to no awail in a RAG database for instance, we need to be able to programatically say how many times a tool can run. Proposed resolution Add a form value of how many times a tool can run. Add a form for setting the error message when this happens. If the tool has run tha… ### [Configuring the model an agent uses](https://git.drupalcode.org/project/ai_agents/-/work_items/3586050) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: category::support, priority::minor, state::accepted Description: I recently had some questions from students about why when configuring an agent, there isn't the opportunity to select which model the agent uses. I've been assuming that agents use the model selected on the assistant configuration - is this correct? Or do agents use whatever the default model is for the "Chat with Tools/Function Calling" capability (via /admin/config/ai/settings) If I have an orchestration agent that uses multiple subagents, it is also safe to assume that they all use the same model based on the assistant configuration? Is there any (non-code) way to have different subagen… ### [Warning: Undefined array key "parameters" en Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() (línea 1038 de /var/www/html/docroot/modules/contrib/ai_agents/src/PluginBase/AiAgentEntityWrapper.php)](https://git.drupalcode.org/project/ai_agents/-/work_items/3586065) State: opened | Updated: 2026-08-04 | Author: Alexis Martínez (alexismmd) | Assigned: unassigned | Labels: Novice, Quick Win, category::bug, priority::minor Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !331 [Issue #3586065: Prevent undefined array key warning when parameters is missing](https://git.drupalcode.org/project/ai_agents/-/merge_requests/331) | State: opened | Author: Alexis Martínez (alexismmd), 21 diff lines Description: ### Problem The following warning is triggered: ```text Warning: Undefined array key "parameters" in Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() ``` ### Cause The code accesses `$values['parameters']` without first checking whether the `parameters` key exists in the `$values` array. If the key is missing, PHP emits an `Undefined array key` warning. ### Suggested fix Before accessing `$values['parameters']`, check that the key exists (for example using `isset()` or `!empty()`) to avoid the warning when `parameters` is not defined. --- MERGE REQUESTS (24h) --- ### [Resolve ""ai_agent" entity type did not specify a list_builder handler."](https://git.drupalcode.org/project/ai_agents/-/merge_requests/334) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3563198-ai_agent-entity-type-did-not-specify-list_builder-handler | 87 diff lines Description: Closes #3563198 ### [feat: #3546411 use short term memory plugins in the agent loop](https://git.drupalcode.org/project/ai_agents/-/merge_requests/321) State: opened | Author: Marcus Johansson (Marcus_Johansson) | Branch: short-term-memory-1-4 | 1499 diff lines Description: Agents can now pick one of the AI modules short term memory plugins and configure it, so that a long running agent can summarize or truncate the conversation instead of running out of context. The plugin only decides what a single request looks like. The agent keeps its complete conversation in $chatHistory, since it needs it to keep track of tool calls and their results, and hands that over as the original history. What the plugin produced on the previous loop is handed back as the current history, so plugins like the summarizer can build on their own earlier work, and it is serialized along… ### [Issue#3556533:Normalize-Standalone-Line-Endings-Property_restrictions-Form fixes](https://git.drupalcode.org/project/ai_agents/-/merge_requests/332) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3556533-Normalize-Standalone-Line-Endings-Property_restrictions-Form | 2214 diff lines Description: Closes #3556533 ### [Issue#3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set fixes.](https://git.drupalcode.org/project/ai_agents/-/merge_requests/330) State: opened | Author: Bharat Kelotra (bharatkelotra) | Branch: 3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set | 4077 diff lines Description: Closes #3552641 --- COMMITS (24h) --- - [60dcae14](https://git.drupalcode.org/project/ai_agents/-/commit/60dcae14547930d74327aa5d02682d2374aa3c5c) bug: #3586067 AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image — AKHIL BABU (2026-08-05T06:54:14.000+00:00) ======================================================================== ## [22] summariseModule:canvas:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Drupal Canvas (machine name: canvas) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), AKHIL BABU (AkhilBabu), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Dave Long (longwave) [2], David Bravo (davidbp), Feliksas Mazeikis (f.mazeikis) [1], Harumi Jang (hooroomoo), Ignacio Sánchez Holgueras (isholgueras), Jakub Piasecki (zaporylie), Lauri Timmanee (lauriii), wotnak [1]". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                          Drupal Canvas

                                          then use

                                          ,

                                          ,

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

                                            How can I help on this project?

                                            " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Missing upgrade path: stored `default-relative-url` prop sources written before 1.8 contain `$id` and fail `DefaultRelativeUrlPropSource::parse()`](https://git.drupalcode.org/project/canvas/-/work_items/3591904) State: opened | Updated: 2026-08-05 | Author: Marco (marco.nett) | Assigned: unassigned | Labels: AI-accelerated, Needs update path, Regression, category::bug Description: ## Problem / Motivation After updating Canvas 1.4.1 → 1.8.0, opening the editor for any page whose component tree contains a `default-relative-url` prop source returns a 500 from `/canvas/api/v0/layout/{entity_type}/{id}`: ``` LogicException: Extraneous JSON Schema information detected: { "$id": "json-schema-definitions://canvas.module/image", ... } should have been just { ... } ``` ## Root cause - Canvas ≤ 1.4 stored the resolved JSON schema of `default-relative-url` prop sources including the `$id` keys the schema resolver emits (e.g. `json-schema-definitions://canvas.module/imag… ### [Replace Lupus CE API with a dedicated Canvas Headless endpoint](https://git.drupalcode.org/project/canvas/-/work_items/3591861) State: closed | Updated: 2026-08-05 | Author: wotnak | Assigned: wotnak | Labels: headless Description: Canvas Headless relies on the Lupus CE API `/ce-api` endpoint to retrieve routed content for decoupled frontends. This adds an unnecessary dependency on [Lupus Decoupled](https://www.drupal.org/project/lupus_decoupled) and limits Canvas control over the response contract. ### Proposed resolution Implement an equivalent routed-content endpoint in Canvas Headless using Custom Elements. Update the headless SDK to use the new endpoint and remove the Lupus dependency. ### User interface changes n/a ### [Canvas AI: Run the component agent in the dev chat with setLooped(FALSE), driven by the browser](https://git.drupalcode.org/project/canvas/-/work_items/3591884) State: opened | Updated: 2026-08-05 | Author: AKHIL BABU (AkhilBabu) | Assigned: unassigned | Labels: 1.x-dev, 2026Sprint15, AI Initiative Sprint, ai Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1461 [Issues/3591884: Run component agnet with setlooped false.](https://git.drupalcode.org/project/canvas/-/merge_requests/1461) | State: opened | Author: AKHIL BABU (AkhilBabu), 3103 diff lines Description: ## Summary `CanvasDevAiBuilder::render()` returns a hard-coded mocked response. Replace it with a copy of the live `CanvasBuilder::render()` that runs the Canvas component agent with **`$agent->setLooped(FALSE)`**, so the agent stops after each model decision instead of looping to completion inside one request. The controller serializes the paused agent to the tempstore, returns `should_continue`, and `AiWizardDev.tsx` re-POSTs with a freshly built page context until `should_continue` is `FALSE`. ## Why With looping on (the `ai_agents` default), one HTTP request runs the agent until it is f… ### [[META] Allow Canvas to be used on any content entity type (bundle), as long as it has certain entity type characteristics](https://git.drupalcode.org/project/canvas/-/work_items/3498525) State: opened | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: Configuration schema, Needs ADR, blocker, category::plan Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1462 [#3498525 Allow entity types other than node; add feature flag module for taxonomy terms.](https://git.drupalcode.org/project/canvas/-/merge_requests/1462) | State: closed | Author: Dave Long (longwave), 1190 diff lines Description: >>> [!note] Migrated issue Reported by: [longwave](https://www.drupal.org/user/246492) Related to !526 >>> Overview Since the prototype XB has only worked on article node types and there are hardcoded assumptions about this. We now have the Page entity as well but we should allow XB to work on all node types (and open the possibility for other entity types in the future as well). There is no design/UX for this yet but we know we will need to allow opting in for each bundle so we can start the work on this. Proposed resolution Eligibility criteria: a "title" field (entity key: label)) Ent… ### [Content template preview is blank for every non-full view mode](https://git.drupalcode.org/project/canvas/-/work_items/3591908) State: opened | Updated: 2026-08-05 | Author: Jakub Piasecki (zaporylie) | Assigned: unassigned | Labels: category::bug, priority::major Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1465 [Don't collapse the preview iframe when a view mode's height comes from its content](https://git.drupalcode.org/project/canvas/-/merge_requests/1465) | State: opened | Author: Jakub Piasecki (zaporylie), 49 diff lines Description: iframe stuck at inline height: 0px since #3588074 Editing a content template for any view mode other than `full` (teaser, card, search index, or any custom view mode) shows a blank white preview. The component tree renders correctly and the overlay/layers UI is fully functional - components can be selected, the geometry is correct, and the layers panel shows the real tree - but nothing is visible in the preview canvas. The `full` view mode is unaffected. … ### [Dependency Dashboard](https://git.drupalcode.org/project/canvas/-/work_items/3591657) State: opened | Updated: 2026-08-05 | 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: No github.com token has been configured. Skipping release notes retrieval - ⚠️ 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. ## Deprecations / Replacements > ⚠️ **Warning** > The foll… ### [Cypress E2E parallel split balances by file count, not runtime — distribute by tagging slow/flaky specs](https://git.drupalcode.org/project/canvas/-/work_items/3591907) State: opened | Updated: 2026-08-04 | Author: Christian López Espínola (penyaskito) | Assigned: unassigned | Labels: DX (Developer Experience), category::task, flaky tests, priority::normal Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1463 [Resolve #3591907 "Balance cypress E2E parallel split by runtime weight"](https://git.drupalcode.org/project/canvas/-/merge_requests/1463) | State: opened | Author: Christian López Espínola (penyaskito), 279 diff lines Description: ### Overview The `cypress E2E` CI job runs with `parallel: 4`, but the four nodes finish at very different times. Across the last 5 `1.x` pipelines that ran it, the slowest node took **12:54–27:36** while the fastest finished in **4:55–8:00** — a 2–3× spread. Because a parallel stage only completes when its slowest node does, the whole E2E stage is paced by one overloaded node while others sit idle. The cause is the spec-distribution logic in `ui/tests/support/parallel.js`. It sorts the 46 spec files alphabetically and deals them round-robin (`index % CI_NODE_TOTAL`), which balances the **nu… ### [`drush config:import` can fail to update a Component whose `active_version` changed](https://git.drupalcode.org/project/canvas/-/work_items/3591905) State: closed | Updated: 2026-08-04 | Author: Dave Long (longwave) | Assigned: unassigned | Labels: category::bug, dataModel, priority::major, state::rtbc Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1459 [#3591905: `drush config:import` can fail to update a Component whose `active_version` changed](https://git.drupalcode.org/project/canvas/-/merge_requests/1459) | State: merged 2026-08-04 | Author: Dave Long (longwave), 286 diff lines Description: Importing configuration for an existing `canvas.component.*` config entity can fail when its `active_version` differs from the one in the target database: ``` Unexpected error during import with operation update for canvas.component.extjs.my_component: 'component' entity is a versioned config entity, and its loaded version is not the active version. ``` This blocks the standard `drush deploy` workflow: change a component's props in one environment, export, then deploy to another. Any deploy that bumps a version hash can fail, unless a cache clear takes place immediately before importing confi… ### [Allow patterns to be edited](https://git.drupalcode.org/project/canvas/-/work_items/3591851) State: closed | Updated: 2026-08-04 | Author: Dave Long (longwave) | Assigned: unassigned | Labels: category::feature, pageBuilder, priority::normal, state::fixed Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1403 [#3591851: Allow editing stored patterns](https://git.drupalcode.org/project/canvas/-/merge_requests/1403) | State: merged 2026-08-04 | Author: Dave Long (longwave), 1757 diff lines Description: Once a user creates a Pattern in the Canvas editor, there is no way to edit it. The library menu for a pattern offers only Insert and Delete — there is no "Edit", "Open", or "Rename". If a pattern was created with a mistake, or needs to evolve, the only option is to delete it and recreate it from scratch. This is surprising because the backend already fully supports updating a pattern — the gap is entirely on the client, plus one missing architectural piece (a round-trip to load a pattern back into the editor). - Backend UPDATE already works. Pattern is a config entity storing a component_tr… ### [Strengthen AutoSaveManager to generate stable hashes](https://git.drupalcode.org/project/canvas/-/work_items/3591785) State: opened | Updated: 2026-08-04 | Author: Feliksas Mazeikis (f.mazeikis) | Assigned: Feliksas Mazeikis (f.mazeikis) | Labels: 1.x-dev, Conflict resolution, auto-save, autoSave Description: When AutoSaveManager normalizes entity, it is doing so without using strictly casted values. The set of normalized entity calues is used for `data_hash` hash computation. As the contents of the normalized entities are not strictly casted, the resulting hashes cannot be relied upon. The aim of this issue is to strengthen, simplify and standardise normalization and hashing processes happening in AutoSaveManager. ### [PHPStan bootstrap fails when custom_elements is not installed after merging `canvas_headless`](https://git.drupalcode.org/project/canvas/-/work_items/3591906) State: closed | Updated: 2026-08-04 | Author: Ignacio Sánchez Holgueras (isholgueras) | Assigned: unassigned | Labels: priority::normal, projectManagement, state::closed, v1.x-dev Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !1460 [Issue #3591906: define the class in the canvas_headless.services.yml.](https://git.drupalcode.org/project/canvas/-/merge_requests/1460) | State: closed | Author: Ignacio Sánchez Holgueras (isholgueras), 12 diff lines Description: # PHPStan bootstrap fails when custom_elements is not installed ## Problem/Motivation `canvas_headless.services.yml` defines the render converter with shorthand syntax: ``` Drupal\canvas_headless\RenderConverter\JsComponentCanvasRenderConverter: decorates: custom_elements.canvas_render_converter decoration_on_invalid: ignore ``` `mglaman/phpstan-drupal` calls `class_exists()` on shorthand service IDs during bootstrap (`DrupalAutoloader.php:240`). That autoloads the class, which extends `Drupal\custom_elements\RenderConverter\CanvasRenderConverter`. PHP resolves parent class… ### [Media Library widget modal does not open](https://git.drupalcode.org/project/canvas/-/work_items/3581123) State: opened | Updated: 2026-08-04 | Author: drupalbot | Assigned: unassigned | Labels: Needs steps to reproduce, category::bug, priority::normal, reduxIntegratedFieldWidgets Description: >>> [!note] Migrated issue Reported by: [bartnelissen](https://www.drupal.org/user/3489703) >>> When attempting to open the Media Library widget, the modal dialog does not open. At pageload I see these JS errors: dialog.ajax.js?v=11.3.3:135 Uncaught TypeError: Cannot read properties of undefined (reading 'prototype') at dialog.ajax.js?v=11.3.3:135:23 at dialog.ajax.js?v=11.3.3:303:3 Uncaught TypeError: Cannot read properties of undefined (reading 'prototype') at ajax.command.customizations.js?tceawu:583:45 at ajax.command.customizations.js?tceawu:623:3 Environment: Drupal v… --- MERGE REQUESTS (24h) --- ### [Draft: Resolve "Canvas AI: Add Tools dropdown to chat UI"](https://git.drupalcode.org/project/canvas/-/merge_requests/1447) State: opened | Author: David Bravo (davidbp) | Branch: 3591856-canvas-ai-add-tools-dropdown-to-chat-ui | 530 diff lines Description: [Description of changes] ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591856 ### [feat(CLI Tool): Return flexible codebase files to local environment on canvas pull](https://git.drupalcode.org/project/canvas/-/merge_requests/1443) State: opened | Author: Harumi Jang (hooroomoo) | Branch: 3591862-issue-branch | 2524 diff lines Description: **AI Disclosure:** Yes. Used Claude to help develop and document this change. Closes #3591862 ### Summary Extends the Canvas CLI push/pull to include the flexible codebase files a project needs to be reconstructed on disk. On push, in addition to component code, the CLI now stores and later restores: - **`package.json`** — pushed to and stored on the asset library, restored on pull. A terminal note prompts running `npm install` when it changes. - **Local helper modules** a component imports via the `@/…` alias — overwritten on pull. - **Binary assets** (images, video, SVG) imported via `@/… ### [feat(Headless): #3591893 Enable headless previews for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/1438) State: opened | Author: wotnak | Branch: 3591893-enable-headless-previews-for-content-templates | 1061 diff lines Description: Closes #3591893 - enables headless previews for content templates ## Testing - build ui and packages and enable canvas_headless - `npm run build` - `npm run packages:build` - `ddev drush cr` - `npm link -ws` - `ddev drush en canvas_headless` - create a headless app: `npx @drupal-canvas/create@latest --experimental-headless --template nextjs` - start headless app - `npm link @drupal-canvas/headless @drupal-canvas/headless-next @drupal-canvas/headless-react` (if using a template other than the nextjs, link `@drupal-canvas/headless` and framework adapter matching the template) - … ### [feat: #3518272 support all entity types with configurable displays for content templates](https://git.drupalcode.org/project/canvas/-/merge_requests/791) State: opened | Author: Adam G-H (phenaproxima) | Branch: 3518272-field-ui-base-route | 1977 diff lines Description: Closes #3518272 ### [chore: version packages](https://git.drupalcode.org/project/canvas/-/merge_requests/1464) State: opened | Author: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010) | Branch: changeset-release/1.x | 449 diff lines Description: Automated merge request created from pending changesets. Merging it publishes the new package versions to npm. Do not commit to this branch manually; it is force-pushed on every push to 1.x. ### [feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK](https://git.drupalcode.org/project/canvas/-/merge_requests/1437) State: merged 2026-08-05 | Author: wotnak | Branch: 3591861-headless-sdk-new-canvas-content-api-endpoint | 2758 diff lines Description: #3591861 - Switches the headless SDK's draft-aware `fetchPage()` client from `/ce-api/{path}` to `/canvas/content-api`. - Adopts the Canvas endpoint's content, document-head, route, and redirect response contract. - Removes the now obsolete Lupus endpoint dependencies and the `/ce-api` auto-save controller override. ## SDK response handling `fetchPage(requestUri)` now returns: - `Page`, containing Canvas-rendered content when available, document-head data, and normalized route information. `route.managedByCanvas` indicates whether Canvas manages the route's complete component tree. - `ro… ### [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 | 55 diff lines Description: This MR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) | [`4.11.1` → `4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.12.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.12.1?slim=true) | | [@babel/parser](… ### [chore(deps): update mysql docker tag to v8.4](https://git.drupalcode.org/project/canvas/-/merge_requests/1272) State: opened | Author: **** (project_19391_bot_cb443e60680723bba08a5351bf595251) | Branch: renovate/mysql-8.x | 13 diff lines Description: This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [mysql](https://hub.docker.com/_/mysql) ([source](https://github.com/docker-library/mysql)) | service-image | minor | `8.0` → `8.4` | > :exclamation: **Important** > > Release Notes retrieval for this MR were skipped because no github.com credentials were available. > If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes). --- ### Configuration 📅 **Schedule**: (UTC) - Br… ### [Draft: #3591838 [PHASE 2] introduce color props](https://git.drupalcode.org/project/canvas/-/merge_requests/1432) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-phase-2-color-props | 11378 diff lines Description: \[Description of changes\] Pending... ## Testing instructions - [ ] First step for someone to test the changes in this MR Closes #3591838 ### [#3591838 brand kit color implementation](https://git.drupalcode.org/project/canvas/-/merge_requests/1385) State: opened | Author: Ben Mullins (bnjmnm) | Branch: 3591838-brand-kit-color-support | 7619 diff lines Description: \[Description of changes\]TK AI Disclosure: Had Opencode + Kimi/Claude implement much of the work in several discrete stages. For the UI code, the prompts were detailed & granular enough that it can largely be viewed as my work aided by a robo-proofreader. Parts of the PHP side, however, could be accurately described as "Generated". I've looked though it but there's a bit of blind trust, and a Backend reviewer should keep that in mind. ## Testing instructions - [ ] enable 'canvas_dev_mode' module - [ ] Run DB updates to add Color entity type - [ ] (optional) enable 'canvas_test_code_compone… ### [Draft: feat(Conflict detection): #3591668 "Text-based Page entity representation via Canvas API"](https://git.drupalcode.org/project/canvas/-/merge_requests/1241) State: opened | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591668-text-based-comparison-of-entities | 659 diff lines Description: **TL;DR:** Adds a new endpoint and related infra that serves Page entities using textual in YAML format, using only fields that can be stored in auto-save item. For people with attention span or AI summary tools: ### :robot: Summary Adds a GET `/canvas/api/v0/content/canvas_page/values-as-text/{canvas_page}` endpoint that returns a Page entity's storable field values encoded as YAML text. The primary use case is client-side comparison of published and draft Page entities using text-based representation of values that can be stored in an auto-save item. The endpoint accepts an `?autoSaved=tr… ### [refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes](https://git.drupalcode.org/project/canvas/-/merge_requests/1356) State: merged 2026-08-04 | Author: Feliksas Mazeikis (f.mazeikis) | Branch: 3591785-strengthen-autosave-normalization | 977 diff lines Description: ## Summary This branch consolidates the typed-data normalization logic that `AutoSaveManager` and `ComponentSourceBase` previously duplicated into a single method, `TypedDataHelper::castRawPhpTypes()`. ## What changed and why `AutoSaveManager::normalizeEntity()` (hash source) and `ComponentSourceBase::castRawTypedConfigToPhpTypes()` (component-shape normalization) each contained their own primitive-casting and traversal logic. These are merged into `TypedDataHelper::castRawPhpTypes()`, which already existed for the config typed-data path but was not wired into `toStorableArray()`. During c… ### [Draft: Stage Canvas autosaves in a dedicated Workspace](https://git.drupalcode.org/project/canvas/-/merge_requests/1056) State: closed | Author: Lauri Timmanee (lauriii) | Branch: 3588540-stage-canvas-autosaves | 6692 diff lines Description: AI-Generated: Yes, Cursor was used to assist with the creation of this MR. ## Testing instructions * [ ] Apply MR + Run update hooks * [ ] Test making changes + publishing them Closes #3588540 --- COMMITS (24h) --- - [f16deaf7](https://git.drupalcode.org/project/canvas/-/commit/f16deaf7fb6a764ea3d91a0f0ddcc8e2541d4289) feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK — wotnak (2026-08-05T06:11:35.000+00:00) - [1a8f69de](https://git.drupalcode.org/project/canvas/-/commit/1a8f69ded1dce78010f8a403e64bfb8953942ae1) fix(Data model): #3591905 `drush config:import` can fail to update a Component whose `active_version` changed — Dave Long (2026-08-04T22:03:13.000+00:00) - [f9b330d2](https://git.drupalcode.org/project/canvas/-/commit/f9b330d21b204f0c33917a343f74d201c27aac0d) feat: #3591851 Allow patterns to be edited — Dave Long (2026-08-04T21:05:42.000+00:00) - [271a612f](https://git.drupalcode.org/project/canvas/-/commit/271a612faa2c4ad5c9862879ccd23e2097bb07ce) refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes — Feliksas Mazeikis (2026-08-04T15:33:37.000+00:00) ======================================================================== ## [23] summariseModule:ai_context:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: Context Control Center (CCC) (machine name: ai_context) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. End your section with a single line listing the people who were active this period, exactly in this form (plain text, no ): "Contributors: Ahmad Khalil (ahmad-khalil-imagex), Juan Correa (jucs7), Kristen Pol (kepol) [3], Rob Loach (robloach), Tekla Aivazashvili (aivazashvilit)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                            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). ### [[Discuss] Review context selection ranking factors before 1.0](https://git.drupalcode.org/project/ai_context/-/work_items/3586365) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::plan Description: ## Summary Before we ship 1.0, we should confirm that the current rules for choosing which context items reach an AI feature are the right set — and whether anything important is missing. This issue is a **discussion**. The goal is shared understanding of what the module does today, in plain language, so product/UX and engineering can decide together whether to add ranking factors before release. ## Background When someone uses an AI feature on the site, the module picks a small set of **context items** (brand voice, writing rules, section-specific guidance, etc.) and attaches them to the … ### [[Meta] CCC cleanup and API hardening from code review findings for beta4](https://git.drupalcode.org/project/ai_context/-/work_items/3586309) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::plan Description: ## Problem/motivation Follow-up to: #3586294+s ### New docs Since I had fable 5 review both 1.0.x and the MR branch for #3586218+ at the same time, it didn't really differentiate where the problems were. Many of the problems were for #3586218+ which should be fixed in that issue since it's not merged yet. I've added the info to that issue's MR. Here are the new docs for all problems that aren't for #3586218+: [ai_context-beta4-1.0.x-issues.md](https://git.drupalcode.org/-/project/191993/uploads/69d239d43391b757cc440a9e04b54e57/ai_context-beta4-1.0.x-issues.md) #### Additional findings … ### [Harden CCC context item access checks and document the authoring trust model](https://git.drupalcode.org/project/ai_context/-/work_items/3586356) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !233 [Issue #3586356: Harden CCC context item access checks and document the authoring trust model.](https://git.drupalcode.org/project/ai_context/-/merge_requests/233) | State: opened | Author: Kristen Pol (kepol), 1073 diff lines Description: ## Problem/motivation Parent: #3586309 Related to: #3574937 [#3574937](https://git.drupalcode.org/project/ai_context/-/work_items/3574937) was an early broad permissions inventory (add/remove perms, stale MR !78). This issue is a focused beta4 access/trust package based on later code-review findings: enforce existing permissions correctly, close small disclosure gaps, document the trust boundary, and add an access-control test matrix. Do **not** treat this as a full permission redesign. Optional new permissions (for example `view own unpublished…`) can be separate follow-ups. ### Gaps … ### [CCC beta4 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586374) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, blocker::stable Description: ## Problem/motivation Do this right before beta4 release in case there are any serious issues that need addressing before the release. Beta4 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: - Security issues (these can be noted since we are still in beta) - Important API gaps - Incorrect docs - Code smell that might indicate potential bugs ## Next steps - Run revie… ### [Design an indicator for the CCC UI that conveys subscription limits](https://git.drupalcode.org/project/ai_context/-/work_items/3586337) State: closed | Updated: 2026-08-05 | Author: Emma Horrell (emma-horrell) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Summary Follow up to: - #3586320+s - #3586335+s Keep in mind this issue for updating descriptions when doing this design: #3586348+s Design a UI indicator that alerts users when their context-item subscription limits are reached (or nearing), and guides them to one of three troubleshooting actions. This surfaced from a scope sense-check meeting (19/07/26 — Mike, Kristen, Aidan, Emma) where the subscription model was validated as sound: agents subscribe to context items that guide how they maintain, create, and manage content. ## Background The subscription model was reviewed and conf… ### [Persist context-item token counts and show token-budget usage in CCC UI](https://git.drupalcode.org/project/ai_context/-/work_items/3586379) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::task, priority::major, sprint candidate Description: ## Summary Follow-up to: - #3586337+s - #3586348+s Implement the subscription-limit UX decisions from the Emma+Aidan review on #3586337. Persist each context item's estimated token count at save time, base token badges on percentage of the configured token budget, and add budget summary messaging on the agent subscription settings page. This issue implements the indicator behavior. It does not add new warning components beyond text, badges, and tooltips agreed in the design review. ## Problem Token counts on the context item listing are calculated on the fly from item content. That makes… ### [Remove max_items context limit and rely on the token budget](https://git.drupalcode.org/project/ai_context/-/work_items/3586378) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::task, priority::normal, sprint candidate Description: ## Summary Follow-up to: - #3586337+s The **Max context items to inject** setting (`max_items`) adds UX and DX complexity without providing a meaningful limit on its own. Context items vary widely in size, so a token budget is the more accurate control for how much context can reach an agent prompt. Remove `max_items` from configuration, forms, validation, selection logic, documentation, and tests. After this change, the token budget (`max_tokens`) is the primary module-wide limit on injected context. ## Problem Site builders currently configure two overlapping limits: - **Max context i… ### [Create CCC beta3 and status update video](https://git.drupalcode.org/project/ai_context/-/work_items/3586333) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::task Description: Create a video on beta3 and the current status of CCC and what's coming up. ### [Sprint 15 CCC roadmap updates, sprint planning, and issue triage](https://git.drupalcode.org/project/ai_context/-/work_items/3586330) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint15, AI Initiative Sprint, ai::context, category::plan 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/75 --- ## Target date or deadline 25 July to 7 August 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… ### [[Meta] Possible 1.0 and 1.1 features and UX/DX improvements following TDT questions](https://git.drupalcode.org/project/ai_context/-/work_items/3586363) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, ai::context, category::plan, priority::major Description: ## Problem **_Note that we should minimize the changes for 1.0 at this point so identify the most important items, if any, from the "Before 1.0" list. Also, it would be best if they were in 1 or 2 issues rather than a bunch of new issues._** Follow-up to: #3586362+s When answering questions for a TDT post, it presented possible follow-up features and UX/DX improvements. Note that some of these may already have issues. ## Solution Vet the following for possible action and create follow-up and child issues as needed. Note that some of these may already have issues, so check first before cr… ### [Add Scheduler to CCC Extensions page](https://git.drupalcode.org/project/ai_context/-/work_items/3586353) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !231 [Issue #3586353: Add Scheduler to CCC Extensions page.](https://git.drupalcode.org/project/ai_context/-/merge_requests/231) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 560 diff lines Description: ## Problem Scheduler was made optional in: #3577429+s but it didn't make it onto the Extensions page in that issue /admin/config/ai/context/settings/extensions ## Solution It should have one line with both `scheduler` and `scheduler_content_moderation_integration` modules. It should be the third item in the general section (alphabetical): - Feature = Schedule context items - Description = Allows scheduled publishing and unpublishing of context items - Module = [Scheduler](https://www.drupal.org/project/scheduler) and [Scheduler content moderation integration](https://www.drupal.org/p… ### [[Meta] Prepare demo content and demo context items for the CCC to show how it works](https://git.drupalcode.org/project/ai_context/-/work_items/3586339) State: opened | Updated: 2026-08-05 | Author: Emma Horrell (emma-horrell) | Assigned: Emma Horrell (emma-horrell) | Labels: 2026Sprint15, AI Initiative Sprint, AI UX, ai::inside Description: ## Problem/motivation _**Note that if we at least get the code with one draft example merged in for beta4 that we can add the additional sample context in rc1 since it would be "documentation" in a sense.**_ Follow-up to: - #3586335 - #3586279 A new Context Control Center (CCC) installation is empty. People unfamiliar with CCC terminology and structure cannot easily see how source content, context items, scopes and consumer subscriptions work together. Provide realistic, optional demo data that lets people explore a complete CCC workflow before configuring it for their own organisation. … ### [Clarify scope eligibility, ranking, and limits in UI help and documentation](https://git.drupalcode.org/project/ai_context/-/work_items/3586348) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, blocker::stable, needs ux review, priority::major Description: ## Summary _**Note that this could be implemented in rc1 because it's docs/help text and no functionality changes.**_ Follow-up to: - #3586281+s - #3586270+s - #3586335+s - #3586337+s Beta testing confirmed that the **subscription** model can remain for beta4, but the UI and documentation do not clearly explain how scope matching, eligibility, ranking, overrides, and limits work together. This issue improves inline help and user-facing documentation without changing scope behavior, configuration storage, selection logic, or subscription semantics. ## Problem The current Context scope de… ### [CCC DX/docs polish before rc1 (api.php, @internal, config/docs, small standards nits)](https://git.drupalcode.org/project/ai_context/-/work_items/3586359) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !234 [Issue #3586359: Polish developer APIs and internal documentation](https://git.drupalcode.org/project/ai_context/-/merge_requests/234) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 1002 diff lines Description: ## Problem/Motivation Follow-up from the beta4/1.0.x analysis triage: #3586309+s Combines remaining developer-experience and docs polish that does not need a separate design track: - analysis item #7 (`ai_context.api.php` + `@internal`) - analysis item #9 (config/docs consistency) - leftover analysis item #8 nits only (`strict_types`, Global scope descriptions, subcontext toggle trait) Related (do not duplicate here): #3586271+s — larger consistency/DX cleanup (final classes, constructor promotion, snake_case, etc.) Already done / out of scope here: - `hook_help()` (already present) … ### [Improve conditional subcontext disabled-state behavior and admin UX](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !226 [Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled.](https://git.drupalcode.org/project/ai_context/-/merge_requests/226) | State: merged 2026-08-05 | Author: Kristen Pol (kepol), 1827 diff lines Description: ## Description Follow-up to: #3586207+s ### Summary When **Enable conditional subcontext AI decisions** (`conditional_subcontext_enabled`) is off, conditional subcontext children should not participate in normal context selection. This issue implements that behavior and adds admin UX so editors understand why conditional items are inactive, can reach the setting to re-enable the feature, and get clear warnings when editing affected items. ### Problem / motivation Previously, disabling conditional subcontext AI caused **all conditional children to be included without an AI call**. That wa… ### [Improve disabled conditional subcontext row visibility in the context item listing](https://git.drupalcode.org/project/ai_context/-/work_items/3586377) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: category::task, priority::normal, state::postponed, what::ux Description: ## Problem / motivation _**Note that I'm not sure we will have time for this before 1.0.**_ [#3586292](https://git.drupalcode.org/project/ai_context/-/work_items/3586292) adds ghosting for conditional subcontext children when **Enable conditional subcontext AI decisions** is off. The current treatment de-emphasizes the **label cell only** (italic, reduced opacity via `ai-context-item-list__row--conditional-disabled` styling scoped to the label). During frontend review on [!226](https://git.drupalcode.org/project/ai_context/-/merge_requests/226), @bbruno noted that when scanning the listing … ### [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-08-05 | Author: Kristen Pol (kepol) | Assigned: Daniel Rodriguez (danrod) | Labels: 2026Sprint12, 2026Sprint13, 2026Sprint14, 2026Sprint15 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… ### [[Discuss] Integrating content reviews based on context](https://git.drupalcode.org/project/ai_context/-/work_items/3571115) State: closed | Updated: 2026-08-05 | Author: drupalbot | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::plan Description: _**Note that we'd like to find an approach that doesn't require any CCC changes for 1.0.**_ Problem/Motivation We are discussing this on 2 Feb 2026 with Kristen+Adriano+Aidan. Adriano created a UI for content reviews at the EU hackathon last week. Aidan and other have also been working in this space. We are comparing notes to figure out how this will work together. Proposed resolution Continue the discussion to figure out its impact on the CCC architecture. Target date or deadline August 2026 Remaining tasks Discuss Create follow-up issues as needed AI usage (if applicable) [ ] AI Assisted … ### [[Discuss] Adding priority to context item to affect ranking](https://git.drupalcode.org/project/ai_context/-/work_items/3586364) State: closed | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, category::plan, priority::major Description: ## Problem Some context will be more important than others. A simple way to factor this in would be to have a priority level for context items. ## Solution Discuss having a priority level, e.g. - Very high - High - Medium - Low Or - 1 (high) - 2 - 3 - 4 - 5 (low) Then the ranking could sort by priority level so that the highest priority items are more likely to make the cut when factoring in max items and max tokens. ### [Add context item ranking priority field and use for ranking selection logic](https://git.drupalcode.org/project/ai_context/-/work_items/3586376) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint16, category::feature, priority::major, sprint candidate Description: ## Problem Follow-up to: #3586364+s Right now, ranking selection is deterministic other than for conditional subcontext. When there are multiple context items that are equally "weighted" in terms of rank, then they are ordered based on when the context item was last edited (freshest first). But, this doesn't make much sense. ## Solution 1. Add a ranking priority field to context item content entities. Show the field in the "Context Scope" section, right above the "Global context" scope plugin. - Machine name: field_ranking - Label: Ranking - Description: Controls the order context items … ### [Install `target_entities` field storage when Dynamic Entity Reference is enabled on existing sites](https://git.drupalcode.org/project/ai_context/-/work_items/3586375) State: opened | Updated: 2026-08-05 | Author: Kristen Pol (kepol) | Assigned: Kristen Pol (kepol) | Labels: 2026Sprint16, category::bug, priority::normal, sprint candidate Description: ## Problem Sites that already have `ai_context` installed can fatal when `dynamic_entity_reference` is enabled (or was enabled without a matching schema update). The context item listing and other entity loads fail with: `Table 'db.ai_context_item__target_entities' doesn't exist` Example stack: `SqlContentEntityStorage->loadFromDedicatedTables()` while `AiContextItemListBuilder->load()` renders `/admin/config/ai/context/items`. ### Root cause `target_entities` is not defined in `AiContextItem::baseFieldDefinitions()`. It is added at runtime via `DynamicEntityReferenceHooks::entityBaseFiel… ### [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-08-04 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, 2026Sprint14, 2026Sprint15, AI Initiative Sprint Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !211 [Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3)](https://git.drupalcode.org/project/ai_context/-/merge_requests/211) | State: opened | Author: Juan Correa (jucs7), 3529 diff lines Description: Follow-up to: #3586192 _**Verify the issue problem and solution before proceeding.**_ ## Title **AI Context: Consistency / DX cleanup (final, constructor promotion, snake_case locals, service interfaces)** --- ## Description Follow-up to #3586192 / naming & DX review. Addresses the remaining **consistency / DX** items that were explicitly out of scope for the naming MR. **No functional or API behavior changes** — style, clarity, and maintainability only. ### Background The naming/DX MR covered route/permission renames, dead code removal, `new self` in final classes, and snake_case fix… ### [Decouple context item form descriptions from scope plugin descriptions](https://git.drupalcode.org/project/ai_context/-/work_items/3586361) State: opened | Updated: 2026-08-04 | Author: Kristen Pol (kepol) | Assigned: Tekla Aivazashvili (aivazashvilit) | Labels: 2026Sprint15, AI Initiative Sprint, ai::inside, category::task Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !239 [Issue #3586361: Decouple context item form descriptions from scope plugin descriptions.](https://git.drupalcode.org/project/ai_context/-/merge_requests/239) | State: opened | Author: Tekla Aivazashvili (aivazashvilit), 438 diff lines Description: ## Problem/motivation Follow-up: #3586359 Scope plugin `getDescription()` text is currently reused in multiple UI contexts: 1. The scope overview page. 2. Individual scope settings pages. 3. Context item scope controls. These contexts can require different guidance. For example, the Global scope’s warning that saving a context item clears other scope settings is useful on the context item form but confusing on the scope overview and settings pages. The existing `getSubscriptionDescription()` method already provides context-specific text for agent subscription forms, but there is no equiv… ### [CCC beta3 codebase review (pre-release)](https://git.drupalcode.org/project/ai_context/-/work_items/3586294) State: closed | Updated: 2026-08-04 | Author: Kristen Pol (kepol) | Assigned: unassigned | Labels: 2026Sprint13, AI Context Management, AI Initiative Sprint, AI Innovation 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… --- MERGE REQUESTS (24h) --- ### [Issue #3586275: Add ai_context_document_loader submodule for MDXEditor imports.](https://git.drupalcode.org/project/ai_context/-/merge_requests/176) State: merged 2026-06-21 | Author: Kristen Pol (kepol) | Branch: 3586275-doc-loader-submodule | 1571 diff lines Description: Introduce a thin CCC submodule that bundles Document Loader MDXEditor integration for Context Item content fields, with progressive support for PDF and URL source plugins. Register the extension on the settings page, document setup in README and context_items.md, and add kernel tests. Closes #3586275 ### [Issue #3586241: Document Supported vs Internal APIs](https://git.drupalcode.org/project/ai_context/-/merge_requests/186) State: merged 2026-06-21 | Author: Rob Loach (robloach) | Branch: 3586241-document-supported-vs-internal-ccc-apis | 389 diff lines Description: ## Description Adds APIStability notes about internal vs public APIs within Context Control Center. Closes #3586241 ## Testing instructions Read through the new documentation. ## Checklist - [x] I have updated the MR title to use format: `Issue #1234: My issue title.` - [x] I have updated the MR description to include: `Closes #1234` - [x] I have performed a self-review of my own code - [x] I have added or updated tests, or explained in the description why this change is not covered by tests - [x] I have updated documentation for any new or changed functionality - [x] I have written … ### [Issue #3586192: Clean up code inconsistencies.](https://git.drupalcode.org/project/ai_context/-/merge_requests/160) State: merged 2026-06-12 | Author: Ahmad Khalil (ahmad-khalil-imagex) | Branch: 3586192-clean-up-ccc-inconsi | 1554 diff lines Description: Closes #3586192 ## Summary Addresses the non-crossed items from #3586192 / `ai-context-naming-dx-review.md`, applying the reviewer's overrides from note_914050. ## Changes **High** - **1b** — Delete dead `AiContextItemController::revisionOverview()` and orphaned `getRevisionIds()`. The entity.ai_context_item.version_history route uses `AiContextItemRevisionController::revisionOverview()`. **Medium** - **1a** — Reconcile `Hook/` vs `Hooks/`: `AiSchedulerContentModerationSync` is a service helper (not a `#[Hook]` class), so moved it to `src/Service/` and updated its namespace + 3 importer… --- COMMITS (24h) --- - [77c4a639](https://git.drupalcode.org/project/ai_context/-/commit/77c4a639a7ab493babfdefaf79e9e7fdb98c3bf4) Issue #3586353: Add Scheduler to CCC Extensions page. — Kristen Pol (2026-08-05T03:44:21.000+00:00) - [01ccd73b](https://git.drupalcode.org/project/ai_context/-/commit/01ccd73bc46f435a0faa29a8070a976f322f7798) Issue #3586359: Polish developer APIs and internal documentation — Kristen Pol (2026-08-05T03:37:30.000+00:00) - [193544b1](https://git.drupalcode.org/project/ai_context/-/commit/193544b1b0f12831b9a9e38a78cc7ae3976cb9ba) Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled. — Kristen Pol (2026-08-05T02:54:32.000+00:00) ======================================================================== ## [24] summariseModule:ai_search:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Search (machine name: ai_search) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+00:00) You are writing for a non-technical executive audience (CEO/leadership level). Focus on: business impact, strategic progress, risks, and what is being delivered. Avoid technical jargon. Do not mention branch names, function names, or API details. Explain what each piece of work means for users or the project's goals. Keep risk language proportionate to the stage of the software. For alpha or beta modules, unassigned bugs or open issues are normal and expected — do not describe them as 'reputational risks' or use alarmist framing. Reserve strong risk language for issues that are genuinely critical or blocking a stable release. Focus your report on activity that occurred within the reporting period (comments, MRs merged, commits pushed, status changes). Use the issue description to understand what each issue is about and provide context, but do not report on the description itself as news — it is background information only. Do not list every issue/MR individually — synthesise into prose. Keep it under 200 words. Do not use emoticons or mdashes. Do not wrap usernames or contributor names in tags — mention them as plain text. When mentioning a specific issue or MR, always hyperlink it using the URL provided in the data (e.g. Issue Title or the Markdown equivalent). Do not reference issues or MRs by number alone — always use their title as the link text. Do NOT attribute any action to a named individual. Do not say who merged, fixed, reviewed, authored, or opened anything. The "Author" and "Assigned" labels in the data are context only — never surface them as "X did Y". Describe the work itself in the passive voice (e.g. "the provider refactor was merged"), not the person who did it. The author of a merge request is often not the person who completed or merged the work, so naming them is misleading. Do not name any individual people in this section. No one was active enough this period to list. Format your response as an HTML fragment. Start with

                                              AI Search

                                              then use

                                              ,

                                              ,

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

                                                How can I help on this project?

                                                " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [Progressive indexing can drop tail chunks](https://git.drupalcode.org/project/ai_search/-/work_items/3584032) State: opened | Updated: 2026-08-05 | Author: Sergiu Nagailic (Nikro) | Assigned: unassigned | Labels: 2026Sprint14, 2026Sprint15, AI Initiative Sprint, ai::inside Description: Problem/Motivation The progressive/Long Chunk strategy can mark an item complete before all of its chunks are embedded. computeItemChunks() counts chunks with a hard-coded gpt-3.5 tokenizer, while getEmbedding() uses the tokenizer configured on the Search API s> In one reproducible case, tracking counted 106 chunks while actual chunking produced 370. Search API stopped after its batch beginning at chunk 100, marked the item indexed, and ne> Steps to reproduce Configure the Long Chunk embedding strategy and a tokenizer other than GPT-3.5, such as XLM-RoBERTa (or any other tokenizer). … --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [25] summariseModule:ai_translate:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI translate (machine name: ai_translate) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Romero (o0Charly0o), szato (odi)". Use only the names from that list, verbatim, keeping any trailing "[N]" commit count exactly as shown. Do not introduce any other names. Format your response as an HTML fragment. Start with

                                                AI translate

                                                then use

                                                ,

                                                ,

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

                                                  How can I help on this project?

                                                  " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). ### [InvalidArgumentException: Invalid translation language (und) when translating media entities](https://git.drupalcode.org/project/ai_translate/-/work_items/3585532) State: opened | Updated: 2026-08-05 | Author: szato (odi) | Assigned: unassigned | Labels: 2026Sprint15, AI Initiative Sprint, Quick Win, ai::inside Related MRs (already exist for this issue — check state before suggesting new contributions): - MR !30 [fix: #3585532 Translation language (und) when translating media entities.](https://git.drupalcode.org/project/ai_translate/-/merge_requests/30) | State: opened | Author: szato (odi), 198 diff lines Description: When using AI Translate to translate a media entity (e.g. media.image), the batch fails with: ``` InvalidArgumentException: Invalid translation language (und) specified. in Drupal\Core\Entity\ContentEntityBase->getTranslation() ``` **Steps to reproduce** - Enable AI Translate, configure an AI provider - Have a media type (e.g. image) with content translation enabled and field sync configured - Go to a media entity's translation overview, click "Translate using AI" for a non-existing language - Batch fails with the above exception **Proposed resolution** ``` --- a/src/Controller/AiTranslateC… ### [Auto-translate referenced taxonomy terms (and other translatable entities) when translating a node](https://git.drupalcode.org/project/ai_translate/-/work_items/3585539) State: opened | Updated: 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Assigned: unassigned | Labels: category::feature, priority::normal, state::accepted Description: When translating a node via AI Translate, referenced translatable entities (e.g. taxonomy terms) are not automatically translated. Editors must translate each term separately, which is tedious on multilingual sites. Proposed solution Add a batch operation translateReferencedEntities() that runs after insertTranslation(). It scans all entity reference fields of the source entity (including fields marked as non-translatable on the node), and for each referenced ContentEntityInterface that: belongs to a translatable entity type does not yet have a translation in the target language …extracts i… --- MERGE REQUESTS (24h) --- ### [Resolve "InvalidArgumentException: Invalid translation language (und) when translating media entities"](https://git.drupalcode.org/project/ai_translate/-/merge_requests/36) State: opened | Author: Carlos Romero (o0Charly0o) | Branch: 3585532-3585539-auto-translate-referenced-taxonomy | 154 diff lines Description: Closes #3585532 ### [feat: Add batch translation for referenced translatable entities in AiTranslateController](https://git.drupalcode.org/project/ai_translate/-/merge_requests/35) State: opened | Author: Carlos Romero (o0Charly0o) | Branch: 3585539-auto-translate-referenced-taxonomy | 109 diff lines Description: Closes #3585539 --- COMMITS (24h) --- (none) ======================================================================== ## [26] summariseModule:ai_provider_litellm:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: LiteLLM AI Provider (machine name: ai_provider_litellm) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Romero (o0Charly0o), Dan Lemon [3]". 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

                                                  LiteLLM AI Provider

                                                  then use

                                                  ,

                                                  ,

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

                                                    How can I help on this project?

                                                    " aimed at a non-technical executive. Suggest 2-3 concrete, high-level ways a leader could support or unblock progress (e.g. resourcing, stakeholder alignment, decision-making, funding, advocacy). Keep it under 60 words. Do not add any other 'How can I help' text anywhere else in the section. CRITICAL: Before writing each suggestion, verify it against the issue data. Do not suggest actions that are already in progress or covered by an existing MR — for example, do not suggest that work needs to be started if an issue already has a Related MR. --- ISSUES UPDATED IN LAST 24h --- Each issue includes its description (for context) and the most recent comments from the last 24h (or last 5 if fewer than 5 occurred in that window). (none) --- MERGE REQUESTS (24h) --- ### [fix: enhance model retrieval with fallback for admin key access](https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/25) State: merged 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Branch: 3614791-litellm-provider-fails | 42 diff lines Description: Closes #3614791 ### [feat: add translateText method and support for translation in LiteLlmAiProvider](https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/26) State: merged 2026-08-04 | Author: Carlos Romero (o0Charly0o) | Branch: 3614792-translate-text | 72 diff lines Description: Closes #3614792 --- COMMITS (24h) --- - [c4afe4c0](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/c4afe4c0ec2f09a7328162f6c9b27e22147c92b6) fix: null-safe key loading in settings form validation — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [a6d62074](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/a6d62074f77c21aef1f0e75474e2881514e1ea27) fix: cache model retrieval per request and add request timeout — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [9957ac05](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/9957ac054f919ad54d91adb6c622fa67910fc211) feat: detect vision, tools and structured output support; drop unimplemented video/audio operation types — Dan Lemon (2026-08-04T17:45:18.000+02:00) - [6f1ab815](https://git.drupalcode.org/project/ai_provider_litellm/-/commit/6f1ab8155c26600be8726f754dc8ee2b5af3c121) fix: enhance model retrieval with fallback for admin key access — cromero (2026-08-04T10:38:33.000+02:00) ======================================================================== ## [27] summariseModule:ai_recipe_image_classification:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Image Classification (machine name: ai_recipe_image_classification) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Image Classification

                                                    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). ### [Error when applying recipe via Drush in Drupal CMS](https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579955) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: Working with a fresh, local, DDEV-based Drupal CMS site, after using `ddev composer require drupal/ai_recipe_image_classification` to get the recipe, I tried to apply it using Drush: ``` ddev drush recipe ../recipes/ai_recipe_image_classification 3/5 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░] Installed 2 modules: Field Widget Actions, AI Automators. In ValidKeysConstraintValidator.php line 33: Expected argument of type "array", "string" given Failed to run drush recipe ../recipes/ai_recipe_im… ### [Error when installing on Drupal CMS](https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579954) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have an up-to-date version of Drupal CMS - this is a local site that was just installed with the _Haven_ site template. After installing the base AI recipe (with Anthropic as the provider), I tried to install this recipe via /admin/config/ai and received this error in a modal: `SandboxException: Failed to run process: The command "'/usr/bin/php' '/var/www/html/vendor/composer/./composer/bin/composer' '--working-dir=/tmp/.package_manager5c7a2d24-e389-4576-aa25-465cc00f8ea5/iEPwgT0vT8LbCaOHyC5Rd0r26mFhNYoi' 'update' '--with-all-dependencies' '--optimize-autoloader' '--minimal-changes' 'drupal… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [28] summariseModule:ai_recipe_content_classification:executive ======================================================================== You are a technical writer producing a newsletter section about recent Drupal module activity. Module: AI Content Classification (machine name: ai_recipe_content_classification) Reporting period: last 24h (2026-08-04T09:18:17+00:00 to 2026-08-05T09:18:17+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 Content Classification

                                                      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). ### [Error when applying recipe via Drush in Drupal CMS](https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580679) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: Working with a fresh, local, DDEV-based Drupal CMS site, after using `ddev composer require drupal/ai_recipe_content_classification` to get the recipe, I tried to apply it using Drush: ``` ddev drush recipe ../recipes/ai_recipe_content_classification In RecipeFileException.php line 56: Validation errors were found in ../recipes/ai_recipe_content_classification/recipe.yml: - [install][6]: "token_entity_render" is not a known module or theme. … ### [Error when installing on Drupal CMS](https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580678) State: opened | Updated: 2026-08-04 | Author: Michael Anello (ultimike) | Assigned: unassigned | Labels: Description: I have an up-to-date version of Drupal CMS - this is a local site that was just installed with the _Haven_ site template. After installing the base AI recipe (with Anthropic as the provider), I tried to install this recipe via /admin/config/ai and received this error in a modal: `SandboxException: Failed to run process: The command "'/usr/bin/php' '/var/www/html/vendor/composer/./composer/bin/composer' '--working-dir=/tmp/.package_manager5c7a2d24-e389-4576-aa25-465cc00f8ea5/gWoWPGXxWPkee4xEpyI313GBfwMRN9Mu' 'update' '--with-all-dependencies' '--optimize-autoloader' '--minimal-changes' 'drupal… --- MERGE REQUESTS (24h) --- (none) --- COMMITS (24h) --- (none) ======================================================================== ## [29] 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] Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586639 [2] [Meta] Rich structured chat: adopt MCP content and interaction shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586640 [3] (Optional) Typed context references on user messages via input-side content blocks (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586648 [4] Citations/sources and suggested replies via MCP shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586647 [5] Elicitation round-trip: MCP-shaped request/result objects and pause/resume on ChatProcessor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586646 [6] ChatBlockRenderer plugin type with default renderers and entity cards (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586645 [7] ChatProcessor: structured response channel and block-aware message history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586644 [8] Add MCP content blocks and a _meta bag to ChatMessage (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586643 [9] Add MCP tool annotations to tool definitions and a ContentBlockProducerInterface for rich tool results (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586642 [10] Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586641 [11] 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 [12] Modules should register the AI request tags they can emit, at install time and dynamically (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586638 [13] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [14] `AiReranker::extractItemText()` should prefer chunk text over configured indexed fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586637 [15] ai_provider_configuration renders an empty Configuration widget when the provider has no configuration options (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586636 [16] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [17] Drupal 11.4 DeepChat Block does not work with BigPipe enabled (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586615 [18] AI Balloon Menu throws uncaught TypeError on selection change when user lacks 'use ai ckeditor' permission, breaking media insertion (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586588 [19] Provide proper support for "unconfigured" AI provider state (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3572645 [20] [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 [21] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [22] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [23] Issue #3586539: Add ChatMemory plugin type (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1885 [24] feat: #3586638 Add AI request tag registry with static and dynamic discovery (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1907 [25] Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1815 [26] Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1277 [27] #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [28] Issue #3586636: Don't render an empty Configuration widget (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1906 [29] Resolve #3586539 "Add a ChatMemoryInterface for storing ChatBot chat history" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1904 [30] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [31] Issue#3586558:Preserve-HTML-In-Streamed-Output fixes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1818 [32] QA Meeting - 25th Feb 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3575717 [33] Issue #3605812: Add a setup-provider agent skill to configure the OpenAI provider from an environment variable (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/82 [34] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [35] chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception (ai_provider_amazeeio, Issue) — https://git.drupalcode.org/project/ai_provider_amazeeio/-/work_items/3586239 [36] Expose the agent status stream as MCP-shaped progress to any chat consumer (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586072 [37] Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586071 [38] Preserve structured tool output as content blocks through the agent loop (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586070 [39] Tool settings popup on agent edit form has no visible close/save button (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586066 [40] Give a parent agent possibility to forward request as is (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3550098 [41] No way to limit the size of files passed to an agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586068 [42] AI Agents 1.3.3 release (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586069 [43] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586067 [44] Create implementation of ShortTermMemory (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3546411 [45] Use streamed chat for agents (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3538174 [46] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [47] Configuring the model an agent uses (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586050 [48] Warning: Undefined array key "parameters" en Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() (línea 1038 de /var/www/html/docroot/modules/contrib/ai_agents/src/PluginBase/AiAgentEntityWrapper.php) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586065 [49] Tool settings popup on agent edit form has no visible close/save button (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/335 [50] Resolve ""ai_agent" entity type did not specify a list_builder handler." (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/334 [51] Issue #3586065: Prevent undefined array key warning when parameters is missing (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/331 [52] feat: #3546411 use short term memory plugins in the agent loop (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/321 [53] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/333 [54] Issue#3556533:Normalize-Standalone-Line-Endings-Property_restrictions-Form fixes (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/332 [55] Issue#3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/330 [56] Missing upgrade path: stored `default-relative-url` prop sources written before 1.8 contain `$id` and fail `DefaultRelativeUrlPropSource::parse()` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591904 [57] Replace Lupus CE API with a dedicated Canvas Headless endpoint (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591861 [58] Canvas AI: Run the component agent in the dev chat with setLooped(FALSE), driven by the browser (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591884 [59] [META] Allow Canvas to be used on any content entity type (bundle), as long as it has certain entity type characteristics (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3498525 [60] Content template preview is blank for every non-full view mode (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591908 [61] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [62] Cypress E2E parallel split balances by file count, not runtime — distribute by tagging slow/flaky specs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591907 [63] `drush config:import` can fail to update a Component whose `active_version` changed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591905 [64] Allow patterns to be edited (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591851 [65] Strengthen AutoSaveManager to generate stable hashes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591785 [66] PHPStan bootstrap fails when custom_elements is not installed after merging `canvas_headless` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591906 [67] Media Library widget modal does not open (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3581123 [68] Draft: Resolve "Canvas AI: Add Tools dropdown to chat UI" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1447 [69] feat(CLI Tool): Return flexible codebase files to local environment on canvas pull (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1443 [70] feat(Headless): #3591893 Enable headless previews for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1438 [71] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [72] #3498525 Allow entity types other than node; add feature flag module for taxonomy terms. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1462 [73] Issues/3591884: Run component agnet with setlooped false. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1461 [74] Don't collapse the preview iframe when a view mode's height comes from its content (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1465 [75] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1464 [76] feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1437 [77] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [78] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [79] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [80] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [81] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [82] Resolve #3591907 "Balance cypress E2E parallel split by runtime weight" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1463 [83] #3591905: `drush config:import` can fail to update a Component whose `active_version` changed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1459 [84] #3591851: Allow editing stored patterns (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1403 [85] Draft: #3591838 [PHASE 2] introduce color props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1432 [86] #3591838 brand kit color implementation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1385 [87] Draft: feat(Conflict detection): #3591668 "Text-based Page entity representation via Canvas API" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1241 [88] refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1356 [89] Issue #3591906: define the class in the canvas_headless.services.yml. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1460 [90] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [91] [Discuss] Review context selection ranking factors before 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586365 [92] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [93] Harden CCC context item access checks and document the authoring trust model (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586356 [94] CCC beta4 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586374 [95] Design an indicator for the CCC UI that conveys subscription limits (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586337 [96] Persist context-item token counts and show token-budget usage in CCC UI (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586379 [97] Remove max_items context limit and rely on the token budget (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586378 [98] Create CCC beta3 and status update video (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586333 [99] Sprint 15 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586330 [100] [Meta] Possible 1.0 and 1.1 features and UX/DX improvements following TDT questions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586363 [101] Add Scheduler to CCC Extensions page (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586353 [102] [Meta] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [103] Clarify scope eligibility, ranking, and limits in UI help and documentation (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586348 [104] CCC DX/docs polish before rc1 (api.php, @internal, config/docs, small standards nits) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586359 [105] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [106] Improve disabled conditional subcontext row visibility in the context item listing (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586377 [107] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [108] [Discuss] Integrating content reviews based on context (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3571115 [109] [Discuss] Adding priority to context item to affect ranking (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586364 [110] Add context item ranking priority field and use for ranking selection logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586376 [111] Install `target_entities` field storage when Dynamic Entity Reference is enabled on existing sites (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586375 [112] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [113] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [114] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [115] Issue #3586356: Harden CCC context item access checks and document the authoring trust model. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/233 [116] Issue #3586275: Add ai_context_document_loader submodule for MDXEditor imports. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/176 [117] Issue #3586241: Document Supported vs Internal APIs (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/186 [118] Issue #3586192: Clean up code inconsistencies. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/160 [119] Issue #3586353: Add Scheduler to CCC Extensions page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/231 [120] Issue #3586359: Polish developer APIs and internal documentation (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/234 [121] Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/226 [122] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [123] Issue #3586361: Decouple context item form descriptions from scope plugin descriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/239 [124] Progressive indexing can drop tail chunks (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584032 [125] InvalidArgumentException: Invalid translation language (und) when translating media entities (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585532 [126] Auto-translate referenced taxonomy terms (and other translatable entities) when translating a node (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585539 [127] Resolve "InvalidArgumentException: Invalid translation language (und) when translating media entities" (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/36 [128] feat: Add batch translation for referenced translatable entities in AiTranslateController (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/35 [129] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [130] fix: enhance model retrieval with fallback for admin key access (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/25 [131] feat: add translateText method and support for translation in LiteLlmAiProvider (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/26 [132] Error when applying recipe via Drush in Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579955 [133] Error when installing on Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579954 [134] Error when applying recipe via Drush in Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580679 [135] Error when installing on Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580678 --- MODULE SUMMARIES ---

                                                          AI (Artificial Intelligence)

                                                          The module received a major architectural proposal this period. A coordinated set of twelve issues was filed, collectively called the "Chat Fundamentals plan," proposing to adopt Model Context Protocol shapes as the canonical format for rich structured chat. The proposal would introduce content blocks, citations, progress indicators, suggested replies, and forms-within-chat capabilities. The entire set is currently in postponed state, awaiting formal maintainer approval via the approval issue. Once approved, this work would target a new 1.6.x branch, not the current 1.5.x release line.

                                                          Active development continued on existing features. Work advanced on a setup-guardrails agent skill to let agents configure site guardrails without manual UI work. The request tag registry feature received a draft implementation allowing modules to declare which AI request tags they emit. A fix for the chatbot closing when adding media remained in review. Several bug fixes progressed: a correction to prevent rendering empty configuration widgets reached ready-to-be-committed status, and an issue affecting chunk text extraction during reranking was identified and assigned.

                                                          Two compatibility issues were reported: the DeepChat block no longer works under BigPipe after upgrading to Drupal 11.4, and streaming content generation fails with Gemini 2.x models, producing 400 errors.

                                                          How can I help on this project?

                                                          Review and decide on the Chat Fundamentals proposal awaiting approval — this twelve-issue architectural plan will shape the roadmap for 1.6.x. Ensure the team has bandwidth to address the newly reported Drupal 11.4 and Gemini 2.x compatibility issues, as these affect current production usage.

                                                          Contributors: Abhinav Jha (ajabhinavjha30), Abhishek Dhariwal (adaptative), Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511), Marcus Johansson (Marcus_Johansson), Ricardo Castañeda (cadence96), Rob Loach (robloach), Rodel Duterte (rduterte), Shivam Sen (shivamsen_12579)

                                                          ---

                                                          Drupal AI Initiative

                                                          Activity this period was limited to project coordination. A quality assurance meeting from February 2026 was closed, reflecting completion of historical administrative tasks. No feature development, bug fixes, or code integration occurred during this 24-hour window.

                                                          The initiative appears to be in a quiet phase with no active development or testing work visible in this reporting period.

                                                          How can I help on this project?

                                                          • Assess whether the project has sufficient allocated resources to maintain development momentum
                                                          • Clarify strategic priority and timeline expectations with the team to ensure alignment with organizational goals
                                                          ---

                                                          OpenAI Provider

                                                          A new capability was opened for review that would allow the OpenAI provider to be configured automatically from the command line. The setup-provider agent skill is designed to simplify initial setup by reading API credentials from an environment variable without exposing secrets directly. This reduces manual configuration steps and supports more streamlined deployment workflows, particularly in automated or team environments.

                                                          No issues were updated and no code was merged during this period. Development activity remains focused on this configuration improvement.

                                                          How can I help on this project?

                                                          • Prioritize review and approval of the setup automation work to accelerate deployment ease for teams adopting the module.
                                                          • Clarify whether simplified onboarding is a strategic priority, and if so, allocate resources to expand similar capabilities across other providers.

                                                          Contributors: Joshua Fernandes (joshua1234511)

                                                          ---

                                                          Anthropic Provider

                                                          A new merge request was opened to add token counting, citations, and context management capabilities to the Anthropic integration. This work represents the third phase of migrating the module to use Anthropic's native software development kit.

                                                          The enhancement introduces three opt-in features that give site administrators more control over how their AI conversations are handled: the ability to track and limit the size of conversations (token counting), automatic citation of source materials in responses, and tools to manage conversation length by compacting or editing chat history. All three features are turned off by default, ensuring existing deployments continue to work exactly as they did before.

                                                          The merge request is currently under review. No issues were updated during this period.

                                                          How can I help on this project?

                                                          • Prioritize review and testing resources for the open merge request to accelerate delivery of new capabilities to users.
                                                          • Clarify strategic priority for token management features if cost control or usage monitoring is a business objective.

                                                          Contributors: Carlos Ospina (camoa)

                                                          ---

                                                          amazee.ai Private AI Provider

                                                          The module reached an important milestone this period: a critical blocking issue preventing the chat feature from working on standard Drupal installations has been resolved. The problem affected sites using default page rendering optimizations, meaning the chat functionality was previously unusable in the most common deployment scenario. With chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception now closed, the provider can reliably deliver AI-powered chat completions to users across typical production environments. This fix removes a significant barrier to adoption and ensures the module performs as expected in real-world usage.

                                                          How can I help on this project?

                                                          • Prioritize user testing in production-like environments to identify deployment issues earlier in the development cycle.
                                                          • Consider allocating resources to accelerate the module toward a stable release if it supports strategic business objectives.
                                                          ---

                                                          AI Agents

                                                          The AI Agents module made measurable progress on core stability this period. A critical bug that caused the system to crash when restoring an agent with images in its conversation history was resolved and merged. The fix for serialization errors ensures that agents can now reliably save and restore sessions containing file attachments, removing a barrier to production use.

                                                          Work is underway to address usability issues in the agent configuration interface. A missing close button on the tool settings popup has a solution in review, and a warning message when configuring default tools is being addressed.

                                                          Three new feature proposals were documented, all currently postponed pending maintainer approval of a broader architectural plan. These would enable agents to expose real-time progress updates, request user confirmation before executing sensitive actions, and preserve richer output from tools. While these features remain on hold, their specification work represents strategic planning for future capabilities.

                                                          Two new issues were raised regarding operational limits: file size controls and clarification of model selection behaviour for agents and sub-agents.

                                                          How can I help on this project?

                                                          Prioritise maintainer review of the pending architectural plan to unblock three proposed features. Clarify documentation or provide decision-making on whether file size limits and per-tool execution limits should be configurable at the agent level.

                                                          Contributors: AKHIL BABU (AkhilBabu) [1], Alexis Martínez (alexismmd), Bharat Kelotra (bharatkelotra), Marcus Johansson (Marcus_Johansson)

                                                          ---

                                                          Drupal Canvas

                                                          Over the past 24 hours, Canvas achieved several significant improvements to workflow stability and feature completeness.

                                                          Two user-facing gaps were closed. Patterns can now be edited after creation; previously users had to delete and recreate them to correct mistakes or evolve designs. The Allow patterns to be edited feature was completed and merged. A data integrity issue that prevented standard deployment workflows was also resolved: `drush config:import` can fail to update a Component whose `active_version` changed was fixed, unblocking configuration synchronization across environments when component versions differ.

                                                          The headless architecture took a step toward independence. Canvas Headless now uses a dedicated endpoint instead of relying on the Lupus CE API, reducing external dependencies and giving the project tighter control over response contracts. This work (Replace Lupus CE API with a dedicated Canvas Headless endpoint) was merged.

                                                          Internal reliability improved through consolidated data normalization logic, strengthening the auto-save system's ability to generate stable hashes for detecting content changes.

                                                          Several issues remain open with active merge requests, including a view-mode preview rendering bug and ongoing work to support Canvas on entity types beyond nodes. A regression affecting older installations that stored certain metadata has been identified and requires an upgrade path.

                                                          How can I help on this project?

                                                          • Prioritize review and merge of the view-mode preview fix to restore editing for non-full templates.
                                                          • Support scoping and resourcing the upgrade path needed for the default-relative-url data migration to prevent further 500 errors on existing sites.

                                                          Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), AKHIL BABU (AkhilBabu), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Dave Long (longwave) [2], David Bravo (davidbp), Feliksas Mazeikis (f.mazeikis) [1], Harumi Jang (hooroomoo), Ignacio Sánchez Holgueras (isholgueras), Jakub Piasecki (zaporylie), Lauri Timmanee (lauriii), wotnak [1]

                                                          ---

                                                          Context Control Center (CCC)

                                                          The Context Control Center continued work toward its first stable release this period, with a focus on hardening the product before beta4 and clarifying its subscription model for users.

                                                          Three significant merge requests landed. Work to add Scheduler to the CCC Extensions page was completed, making scheduled publishing and unpublishing of context items visible to administrators. A merge request that polishes developer APIs and internal documentation was merged, improving clarity for developers extending the module. The largest change was to improve conditional subcontext disabled-state behavior and admin UX, ensuring that when conditional AI decisions are turned off, the relevant context items are excluded from selection and editors receive clear guidance about why those items are inactive.

                                                          Two discussions concluded. A review of whether to add priority to context items to affect ranking ended, with the decision to proceed captured in a follow-up implementation issue. A separate discussion about integrating content reviews based on context was closed, with the goal of avoiding CCC changes for version 1.0.

                                                          Planning issues were opened to prepare for the next sprint, including a pre-release codebase review for beta4 and a discussion to review context selection ranking factors before 1.0. Work continued on hardening access checks and documenting the trust model, with a merge request already in review. Refinement of the user experience continues, including preparation of demo content to show how the module works and efforts to clarify scope eligibility and limits in UI help.

                                                          Several issues were created to simplify the module's configuration model. One proposes to remove the max items context limit and rely solely on the token budget, reducing overlapping controls. Another will persist token counts and show budget usage in the UI, helping site builders understand when they are nearing capacity. A third addresses a bug where sites enabling Dynamic Entity Reference after CCC installation can experience errors due to missing field storage.

                                                          How can I help on this project?

                                                          Prioritize user-experience and documentation review capacity before the release candidate. Ensure the team has time budgeted to finalize demo content and help text refinements. If scope eligibility decisions require product sign-off, schedule that review early in the next sprint to avoid blocking the stable release.

                                                          Contributors: Ahmad Khalil (ahmad-khalil-imagex), Juan Correa (jucs7), Kristen Pol (kepol) [3], Rob Loach (robloach), Tekla Aivazashvili (aivazashvilit)

                                                          ---

                                                          AI Search

                                                          The AI Search module experienced no commits or completed work during this period. One issue was updated: Progressive indexing can drop tail chunks, which describes a scenario where content indexing may stop prematurely when using certain tokenizer configurations. This means some portions of long documents could be excluded from search results, potentially impacting search completeness for users.

                                                          The issue remains open with no merge request in progress. This represents typical alpha-stage refinement as the module evolves to support different configuration combinations.

                                                          How can I help on this project?

                                                          • Consider allocating development resources to address the progressive indexing issue, which could affect search reliability in production scenarios.
                                                          • Support prioritization discussions to determine whether this issue should block a stable release or be addressed in a later version.
                                                          ---

                                                          AI translate

                                                          The AI translate project saw focused activity on two features that will improve the translation workflow for content editors on multilingual sites.

                                                          Work began on a fix for a translation failure affecting media entities. When editors attempt to translate images or other media items, the system currently encounters an error that prevents the batch operation from completing. A solution has been proposed to resolve this blocking issue.

                                                          In parallel, a new capability is under development to auto-translate referenced taxonomy terms when translating content. Currently, editors must manually translate each referenced term separately, adding time and effort to multilingual publishing workflows. The proposed enhancement would automatically translate taxonomy terms and other linked content entities during the main translation batch, streamlining the editorial process. Two merge requests have been opened for this feature.

                                                          Both pieces of work are in the early review stage and have not yet been integrated into the module.

                                                          How can I help on this project?

                                                          • Ensure code review capacity is available to evaluate and merge the pending translation fixes, particularly the media entity issue which blocks a key workflow.
                                                          • Consider resourcing for user acceptance testing of the referenced entity auto-translation feature once merged, to validate time savings for editorial teams.

                                                          Contributors: Carlos Romero (o0Charly0o), szato (odi)

                                                          ---

                                                          LiteLLM AI Provider

                                                          The LiteLLM AI Provider module made meaningful progress in the last 24 hours, with two improvements merged to strengthen reliability and expand functionality.

                                                          A fix to enhance model retrieval with fallback for admin key access was merged, improving the module's ability to retrieve available models even when configuration challenges arise. This makes the system more resilient during setup and administration.

                                                          Additionally, support for translation was added, enabling the provider to handle text translation tasks. This expands the range of use cases the module can support, making it more versatile for multilingual content workflows.

                                                          Behind the scenes, several refinements were made to improve how the module detects model capabilities, handles caching, and validates configuration settings. These changes help ensure the module operates smoothly and efficiently in production environments.

                                                          How can I help on this project?

                                                          • Ensure sufficient testing resources are available to validate translation features across different language pairs and content types.
                                                          • Support community outreach to gather feedback from early adopters on real-world use cases and pain points.

                                                          Contributors: Carlos Romero (o0Charly0o), Dan Lemon [3]

                                                          ---

                                                          AI Image Classification

                                                          Two installation issues were reported affecting users attempting to deploy the recipe on Drupal CMS sites. The first issue, Error when installing on Drupal CMS, involves a failure when installing through the administrative interface, preventing the recipe from being added to sites using the Haven template. The second, Error when applying recipe via Drush in Drupal CMS, blocks command-line installation, which is a common deployment method for development teams.

                                                          These issues prevent new users from successfully adopting the recipe, which limits the module's reach and delays delivery of automated image classification capabilities to content teams. Both issues remain unassigned and require investigation to determine root causes. As this is an early-stage module, some installation friction is expected during initial adoption, but resolving these blockers is important for expanding the user base and gathering broader feedback.

                                                          How can I help on this project?

                                                          • Allocate developer time to investigate and resolve the two open installation issues, which are currently preventing user adoption.
                                                          • Consider prioritizing testing resources to validate the recipe across different Drupal CMS configurations before broader release.
                                                          ---

                                                          AI Content Classification

                                                          No development activity occurred during this period. Two installation issues were reported when attempting to use the recipe with Drupal CMS. The first involves a validation error related to a dependency (Error when applying recipe via Drush in Drupal CMS), while the second concerns a failure during the automated installation process through the administrative interface (Error when installing on Drupal CMS). Both issues prevent users from successfully deploying the recipe in Drupal CMS environments, which limits its practical adoption. These are typical integration challenges for a developing module and do not indicate systemic problems, but they do block immediate usability for the target platform. Resolution of these compatibility issues would enable smoother deployment and testing by early adopters.

                                                          How can I help on this project?

                                                          • Allocate developer time to investigate and resolve the two reported Drupal CMS installation blockers, which are preventing the recipe from being deployed by users.
                                                          • Consider establishing a testing environment for Drupal CMS compatibility to catch integration issues earlier in the development cycle.
                                                          ======================================================================== ## [30] factcheck:tldr:executive ======================================================================== Layer-1 corrections: 0 Judge flags: 4 ======================================================================== ## [31] 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] Approve the Chat Fundamentals (MCP-shaped rich chat) issue set for 1.6.x (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586639 [2] [Meta] Rich structured chat: adopt MCP content and interaction shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586640 [3] (Optional) Typed context references on user messages via input-side content blocks (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586648 [4] Citations/sources and suggested replies via MCP shapes (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586647 [5] Elicitation round-trip: MCP-shaped request/result objects and pause/resume on ChatProcessor (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586646 [6] ChatBlockRenderer plugin type with default renderers and entity cards (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586645 [7] ChatProcessor: structured response channel and block-aware message history (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586644 [8] Add MCP content blocks and a _meta bag to ChatMessage (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586643 [9] Add MCP tool annotations to tool definitions and a ContentBlockProducerInterface for rich tool results (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586642 [10] Add ChatOutput::setMetadata() and stop discarding chunk metadata in streamed reconstruction (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586641 [11] 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 [12] Modules should register the AI request tags they can emit, at install time and dynamically (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586638 [13] Chatbot closes itself when adding a modal (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3499451 [14] `AiReranker::extractItemText()` should prefer chunk text over configured indexed fields (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586637 [15] ai_provider_configuration renders an empty Configuration widget when the provider has no configuration options (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586636 [16] Document FunctionalJavascript test conventions and add CI check for ungrouped/unrecorded tests (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3582633 [17] Drupal 11.4 DeepChat Block does not work with BigPipe enabled (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586615 [18] AI Balloon Menu throws uncaught TypeError on selection change when user lacks 'use ai ckeditor' permission, breaking media insertion (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586588 [19] Provide proper support for "unconfigured" AI provider state (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3572645 [20] [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 [21] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586425 [22] AI Automator Token Replacement with removing unresolved Tokens (Checkbox?) (ai, Issue) — https://git.drupalcode.org/project/ai/-/work_items/3586535 [23] Issue #3586539: Add ChatMemory plugin type (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1885 [24] feat: #3586638 Add AI request tag registry with static and dynamic discovery (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1907 [25] Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1815 [26] Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1277 [27] #3582633: Add Functional JavaScript testing conventions and validation script (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1432 [28] Issue #3586636: Don't render an empty Configuration widget (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1906 [29] Resolve #3586539 "Add a ChatMemoryInterface for storing ChatBot chat history" (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1904 [30] Issue #3586535: AI Automators strip unresolved tokens from prompts (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1884 [31] Issue#3586558:Preserve-HTML-In-Streamed-Output fixes. (ai, MR) — https://git.drupalcode.org/project/ai/-/merge_requests/1818 [32] QA Meeting - 25th Feb 2026 (ai_initiative, Issue) — https://git.drupalcode.org/project/ai_initiative/-/work_items/3575717 [33] Issue #3605812: Add a setup-provider agent skill to configure the OpenAI provider from an environment variable (ai_provider_openai, MR) — https://git.drupalcode.org/project/ai_provider_openai/-/merge_requests/82 [34] Issue #3607960: Add token counting, citations, and context management (ai_provider_anthropic, MR) — https://git.drupalcode.org/project/ai_provider_anthropic/-/merge_requests/35 [35] chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception (ai_provider_amazeeio, Issue) — https://git.drupalcode.org/project/ai_provider_amazeeio/-/work_items/3586239 [36] Expose the agent status stream as MCP-shaped progress to any chat consumer (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586072 [37] Vetoable AgentToolPreExecuteEvent and annotation-driven pre-tool confirmation via elicitation (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586071 [38] Preserve structured tool output as content blocks through the agent loop (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586070 [39] Tool settings popup on agent edit form has no visible close/save button (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586066 [40] Give a parent agent possibility to forward request as is (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3550098 [41] No way to limit the size of files passed to an agent (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586068 [42] AI Agents 1.3.3 release (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586069 [43] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586067 [44] Create implementation of ShortTermMemory (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3546411 [45] Use streamed chat for agents (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3538174 [46] Add limits on how often a tool can run (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3547995 [47] Configuring the model an agent uses (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586050 [48] Warning: Undefined array key "parameters" en Drupal\ai_agents\PluginBase\AiAgentEntityWrapper->getDefaultInformationTools() (línea 1038 de /var/www/html/docroot/modules/contrib/ai_agents/src/PluginBase/AiAgentEntityWrapper.php) (ai_agents, Issue) — https://git.drupalcode.org/project/ai_agents/-/work_items/3586065 [49] Tool settings popup on agent edit form has no visible close/save button (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/335 [50] Resolve ""ai_agent" entity type did not specify a list_builder handler." (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/334 [51] Issue #3586065: Prevent undefined array key warning when parameters is missing (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/331 [52] feat: #3546411 use short term memory plugins in the agent loop (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/321 [53] AiAgentEntityWrapper::fromArray() fatals when the serialized chat history contains an image (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/333 [54] Issue#3556533:Normalize-Standalone-Line-Endings-Property_restrictions-Form fixes (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/332 [55] Issue#3552641-DetermineSolvability-Fails-When-No-Provider-Is-Set fixes. (ai_agents, MR) — https://git.drupalcode.org/project/ai_agents/-/merge_requests/330 [56] Missing upgrade path: stored `default-relative-url` prop sources written before 1.8 contain `$id` and fail `DefaultRelativeUrlPropSource::parse()` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591904 [57] Replace Lupus CE API with a dedicated Canvas Headless endpoint (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591861 [58] Canvas AI: Run the component agent in the dev chat with setLooped(FALSE), driven by the browser (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591884 [59] [META] Allow Canvas to be used on any content entity type (bundle), as long as it has certain entity type characteristics (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3498525 [60] Content template preview is blank for every non-full view mode (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591908 [61] Dependency Dashboard (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591657 [62] Cypress E2E parallel split balances by file count, not runtime — distribute by tagging slow/flaky specs (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591907 [63] `drush config:import` can fail to update a Component whose `active_version` changed (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591905 [64] Allow patterns to be edited (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591851 [65] Strengthen AutoSaveManager to generate stable hashes (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591785 [66] PHPStan bootstrap fails when custom_elements is not installed after merging `canvas_headless` (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3591906 [67] Media Library widget modal does not open (canvas, Issue) — https://git.drupalcode.org/project/canvas/-/work_items/3581123 [68] Draft: Resolve "Canvas AI: Add Tools dropdown to chat UI" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1447 [69] feat(CLI Tool): Return flexible codebase files to local environment on canvas pull (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1443 [70] feat(Headless): #3591893 Enable headless previews for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1438 [71] feat: #3518272 support all entity types with configurable displays for content templates (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/791 [72] #3498525 Allow entity types other than node; add feature flag module for taxonomy terms. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1462 [73] Issues/3591884: Run component agnet with setlooped false. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1461 [74] Don't collapse the preview iframe when a view mode's height comes from its content (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1465 [75] chore: version packages (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1464 [76] feat(Headless): #3591861 Use the new Canvas content API endpoint in the headless SDK (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1437 [77] chore(deps): update dependency cspell to v10 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1273 [78] chore(deps): update dependency @eslint/compat to v2 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1306 [79] chore(deps): update dependency @chromatic-com/storybook to v5 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1305 [80] fix(deps): update npm minor and patch (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1238 [81] chore(deps): update mysql docker tag to v8.4 (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1272 [82] Resolve #3591907 "Balance cypress E2E parallel split by runtime weight" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1463 [83] #3591905: `drush config:import` can fail to update a Component whose `active_version` changed (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1459 [84] #3591851: Allow editing stored patterns (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1403 [85] Draft: #3591838 [PHASE 2] introduce color props (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1432 [86] #3591838 brand kit color implementation (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1385 [87] Draft: feat(Conflict detection): #3591668 "Text-based Page entity representation via Canvas API" (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1241 [88] refactor(Conflict resolution): #3591785 Strengthen AutoSaveManager to generate stable hashes (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1356 [89] Issue #3591906: define the class in the canvas_headless.services.yml. (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1460 [90] Draft: Stage Canvas autosaves in a dedicated Workspace (canvas, MR) — https://git.drupalcode.org/project/canvas/-/merge_requests/1056 [91] [Discuss] Review context selection ranking factors before 1.0 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586365 [92] [Meta] CCC cleanup and API hardening from code review findings for beta4 (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586309 [93] Harden CCC context item access checks and document the authoring trust model (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586356 [94] CCC beta4 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586374 [95] Design an indicator for the CCC UI that conveys subscription limits (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586337 [96] Persist context-item token counts and show token-budget usage in CCC UI (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586379 [97] Remove max_items context limit and rely on the token budget (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586378 [98] Create CCC beta3 and status update video (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586333 [99] Sprint 15 CCC roadmap updates, sprint planning, and issue triage (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586330 [100] [Meta] Possible 1.0 and 1.1 features and UX/DX improvements following TDT questions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586363 [101] Add Scheduler to CCC Extensions page (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586353 [102] [Meta] Prepare demo content and demo context items for the CCC to show how it works (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586339 [103] Clarify scope eligibility, ranking, and limits in UI help and documentation (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586348 [104] CCC DX/docs polish before rc1 (api.php, @internal, config/docs, small standards nits) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586359 [105] Improve conditional subcontext disabled-state behavior and admin UX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586292 [106] Improve disabled conditional subcontext row visibility in the context item listing (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586377 [107] Rename entity bundle and target entity scope plugins for better DX (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586276 [108] [Discuss] Integrating content reviews based on context (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3571115 [109] [Discuss] Adding priority to context item to affect ranking (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586364 [110] Add context item ranking priority field and use for ranking selection logic (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586376 [111] Install `target_entities` field storage when Dynamic Entity Reference is enabled on existing sites (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586375 [112] Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586271 [113] Decouple context item form descriptions from scope plugin descriptions (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586361 [114] CCC beta3 codebase review (pre-release) (ai_context, Issue) — https://git.drupalcode.org/project/ai_context/-/work_items/3586294 [115] Issue #3586356: Harden CCC context item access checks and document the authoring trust model. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/233 [116] Issue #3586275: Add ai_context_document_loader submodule for MDXEditor imports. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/176 [117] Issue #3586241: Document Supported vs Internal APIs (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/186 [118] Issue #3586192: Clean up code inconsistencies. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/160 [119] Issue #3586353: Add Scheduler to CCC Extensions page. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/231 [120] Issue #3586359: Polish developer APIs and internal documentation (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/234 [121] Issue #3586292: Exclude conditional subcontext items when AI decisions are disabled. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/226 [122] Issue #3586271: Clean up CCC inconsistencies and DX issues before rc1 (part 3) (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/211 [123] Issue #3586361: Decouple context item form descriptions from scope plugin descriptions. (ai_context, MR) — https://git.drupalcode.org/project/ai_context/-/merge_requests/239 [124] Progressive indexing can drop tail chunks (ai_search, Issue) — https://git.drupalcode.org/project/ai_search/-/work_items/3584032 [125] InvalidArgumentException: Invalid translation language (und) when translating media entities (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585532 [126] Auto-translate referenced taxonomy terms (and other translatable entities) when translating a node (ai_translate, Issue) — https://git.drupalcode.org/project/ai_translate/-/work_items/3585539 [127] Resolve "InvalidArgumentException: Invalid translation language (und) when translating media entities" (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/36 [128] feat: Add batch translation for referenced translatable entities in AiTranslateController (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/35 [129] fix: #3585532 Translation language (und) when translating media entities. (ai_translate, MR) — https://git.drupalcode.org/project/ai_translate/-/merge_requests/30 [130] fix: enhance model retrieval with fallback for admin key access (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/25 [131] feat: add translateText method and support for translation in LiteLlmAiProvider (ai_provider_litellm, MR) — https://git.drupalcode.org/project/ai_provider_litellm/-/merge_requests/26 [132] Error when applying recipe via Drush in Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579955 [133] Error when installing on Drupal CMS (ai_recipe_image_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_image_classification/-/work_items/3579954 [134] Error when applying recipe via Drush in Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580679 [135] Error when installing on Drupal CMS (ai_recipe_content_classification, Issue) — https://git.drupalcode.org/project/ai_recipe_content_classification/-/work_items/3580678 --- TODAY'S MODULE SUMMARIES ---

                                                            AI (Artificial Intelligence)

                                                            The module received a major architectural proposal this period. A coordinated set of twelve issues was filed, collectively called the "Chat Fundamentals plan," proposing to adopt Model Context Protocol shapes as the canonical format for rich structured chat. The proposal would introduce content blocks, citations, progress indicators, suggested replies, and forms-within-chat capabilities. The entire set is currently in postponed state, awaiting formal maintainer approval via the approval issue. Once approved, this work would target a new 1.6.x branch, not the current 1.5.x release line.

                                                            Active development continued on existing features. Work advanced on a setup-guardrails agent skill to let agents configure site guardrails without manual UI work. The request tag registry feature received a draft implementation allowing modules to declare which AI request tags they emit. A fix for the chatbot closing when adding media remained in review. Several bug fixes progressed: a correction to prevent rendering empty configuration widgets reached ready-to-be-committed status, and an issue affecting chunk text extraction during reranking was identified and assigned.

                                                            Two compatibility issues were reported: the DeepChat block no longer works under BigPipe after upgrading to Drupal 11.4, and streaming content generation fails with Gemini 2.x models, producing 400 errors.

                                                            How can I help on this project?

                                                            Review and decide on the Chat Fundamentals proposal awaiting approval — this twelve-issue architectural plan will shape the roadmap for 1.6.x. Ensure the team has bandwidth to address the newly reported Drupal 11.4 and Gemini 2.x compatibility issues, as these affect current production usage.

                                                            Contributors: Abhinav Jha (ajabhinavjha30), Abhishek Dhariwal (adaptative), Bharat Kelotra (bharatkelotra), Joshua Fernandes (joshua1234511), Marcus Johansson (Marcus_Johansson), Ricardo Castañeda (cadence96), Rob Loach (robloach), Rodel Duterte (rduterte), Shivam Sen (shivamsen_12579)

                                                            ---

                                                            Drupal AI Initiative

                                                            Activity this period was limited to project coordination. A quality assurance meeting from February 2026 was closed, reflecting completion of historical administrative tasks. No feature development, bug fixes, or code integration occurred during this 24-hour window.

                                                            The initiative appears to be in a quiet phase with no active development or testing work visible in this reporting period.

                                                            How can I help on this project?

                                                            • Assess whether the project has sufficient allocated resources to maintain development momentum
                                                            • Clarify strategic priority and timeline expectations with the team to ensure alignment with organizational goals
                                                            ---

                                                            OpenAI Provider

                                                            A new capability was opened for review that would allow the OpenAI provider to be configured automatically from the command line. The setup-provider agent skill is designed to simplify initial setup by reading API credentials from an environment variable without exposing secrets directly. This reduces manual configuration steps and supports more streamlined deployment workflows, particularly in automated or team environments.

                                                            No issues were updated and no code was merged during this period. Development activity remains focused on this configuration improvement.

                                                            How can I help on this project?

                                                            • Prioritize review and approval of the setup automation work to accelerate deployment ease for teams adopting the module.
                                                            • Clarify whether simplified onboarding is a strategic priority, and if so, allocate resources to expand similar capabilities across other providers.

                                                            Contributors: Joshua Fernandes (joshua1234511)

                                                            ---

                                                            Anthropic Provider

                                                            A new merge request was opened to add token counting, citations, and context management capabilities to the Anthropic integration. This work represents the third phase of migrating the module to use Anthropic's native software development kit.

                                                            The enhancement introduces three opt-in features that give site administrators more control over how their AI conversations are handled: the ability to track and limit the size of conversations (token counting), automatic citation of source materials in responses, and tools to manage conversation length by compacting or editing chat history. All three features are turned off by default, ensuring existing deployments continue to work exactly as they did before.

                                                            The merge request is currently under review. No issues were updated during this period.

                                                            How can I help on this project?

                                                            • Prioritize review and testing resources for the open merge request to accelerate delivery of new capabilities to users.
                                                            • Clarify strategic priority for token management features if cost control or usage monitoring is a business objective.

                                                            Contributors: Carlos Ospina (camoa)

                                                            ---

                                                            amazee.ai Private AI Provider

                                                            The module reached an important milestone this period: a critical blocking issue preventing the chat feature from working on standard Drupal installations has been resolved. The problem affected sites using default page rendering optimizations, meaning the chat functionality was previously unusable in the most common deployment scenario. With chat() fails under Fiber-based rendering (BigPipe) — "stream handler closure" exception now closed, the provider can reliably deliver AI-powered chat completions to users across typical production environments. This fix removes a significant barrier to adoption and ensures the module performs as expected in real-world usage.

                                                            How can I help on this project?

                                                            • Prioritize user testing in production-like environments to identify deployment issues earlier in the development cycle.
                                                            • Consider allocating resources to accelerate the module toward a stable release if it supports strategic business objectives.
                                                            ---

                                                            AI Agents

                                                            The AI Agents module made measurable progress on core stability this period. A critical bug that caused the system to crash when restoring an agent with images in its conversation history was resolved and merged. The fix for serialization errors ensures that agents can now reliably save and restore sessions containing file attachments, removing a barrier to production use.

                                                            Work is underway to address usability issues in the agent configuration interface. A missing close button on the tool settings popup has a solution in review, and a warning message when configuring default tools is being addressed.

                                                            Three new feature proposals were documented, all currently postponed pending maintainer approval of a broader architectural plan. These would enable agents to expose real-time progress updates, request user confirmation before executing sensitive actions, and preserve richer output from tools. While these features remain on hold, their specification work represents strategic planning for future capabilities.

                                                            Two new issues were raised regarding operational limits: file size controls and clarification of model selection behaviour for agents and sub-agents.

                                                            How can I help on this project?

                                                            Prioritise maintainer review of the pending architectural plan to unblock three proposed features. Clarify documentation or provide decision-making on whether file size limits and per-tool execution limits should be configurable at the agent level.

                                                            Contributors: AKHIL BABU (AkhilBabu) [1], Alexis Martínez (alexismmd), Bharat Kelotra (bharatkelotra), Marcus Johansson (Marcus_Johansson)

                                                            ---

                                                            Drupal Canvas

                                                            Over the past 24 hours, Canvas achieved several significant improvements to workflow stability and feature completeness.

                                                            Two user-facing gaps were closed. Patterns can now be edited after creation; previously users had to delete and recreate them to correct mistakes or evolve designs. The Allow patterns to be edited feature was completed and merged. A data integrity issue that prevented standard deployment workflows was also resolved: `drush config:import` can fail to update a Component whose `active_version` changed was fixed, unblocking configuration synchronization across environments when component versions differ.

                                                            The headless architecture took a step toward independence. Canvas Headless now uses a dedicated endpoint instead of relying on the Lupus CE API, reducing external dependencies and giving the project tighter control over response contracts. This work (Replace Lupus CE API with a dedicated Canvas Headless endpoint) was merged.

                                                            Internal reliability improved through consolidated data normalization logic, strengthening the auto-save system's ability to generate stable hashes for detecting content changes.

                                                            Several issues remain open with active merge requests, including a view-mode preview rendering bug and ongoing work to support Canvas on entity types beyond nodes. A regression affecting older installations that stored certain metadata has been identified and requires an upgrade path.

                                                            How can I help on this project?

                                                            • Prioritize review and merge of the view-mode preview fix to restore editing for non-full templates.
                                                            • Support scoping and resourcing the upgrade path needed for the default-relative-url data migration to prevent further 500 errors on existing sites.

                                                            Contributors: **** (project_19391_bot_17a61b0edeafd5a3db3e8b2462b6c010), **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Adam G-H (phenaproxima), AKHIL BABU (AkhilBabu), Ben Mullins (bnjmnm), Christian López Espínola (penyaskito), Dave Long (longwave) [2], David Bravo (davidbp), Feliksas Mazeikis (f.mazeikis) [1], Harumi Jang (hooroomoo), Ignacio Sánchez Holgueras (isholgueras), Jakub Piasecki (zaporylie), Lauri Timmanee (lauriii), wotnak [1]

                                                            ---

                                                            Context Control Center (CCC)

                                                            The Context Control Center continued work toward its first stable release this period, with a focus on hardening the product before beta4 and clarifying its subscription model for users.

                                                            Three significant merge requests landed. Work to add Scheduler to the CCC Extensions page was completed, making scheduled publishing and unpublishing of context items visible to administrators. A merge request that polishes developer APIs and internal documentation was merged, improving clarity for developers extending the module. The largest change was to improve conditional subcontext disabled-state behavior and admin UX, ensuring that when conditional AI decisions are turned off, the relevant context items are excluded from selection and editors receive clear guidance about why those items are inactive.

                                                            Two discussions concluded. A review of whether to add priority to context items to affect ranking ended, with the decision to proceed captured in a follow-up implementation issue. A separate discussion about integrating content reviews based on context was closed, with the goal of avoiding CCC changes for version 1.0.

                                                            Planning issues were opened to prepare for the next sprint, including a pre-release codebase review for beta4 and a discussion to review context selection ranking factors before 1.0. Work continued on hardening access checks and documenting the trust model, with a merge request already in review. Refinement of the user experience continues, including preparation of demo content to show how the module works and efforts to clarify scope eligibility and limits in UI help.

                                                            Several issues were created to simplify the module's configuration model. One proposes to remove the max items context limit and rely solely on the token budget, reducing overlapping controls. Another will persist token counts and show budget usage in the UI, helping site builders understand when they are nearing capacity. A third addresses a bug where sites enabling Dynamic Entity Reference after CCC installation can experience errors due to missing field storage.

                                                            How can I help on this project?

                                                            Prioritize user-experience and documentation review capacity before the release candidate. Ensure the team has time budgeted to finalize demo content and help text refinements. If scope eligibility decisions require product sign-off, schedule that review early in the next sprint to avoid blocking the stable release.

                                                            Contributors: Ahmad Khalil (ahmad-khalil-imagex), Juan Correa (jucs7), Kristen Pol (kepol) [3], Rob Loach (robloach), Tekla Aivazashvili (aivazashvilit)

                                                            ---

                                                            AI Search

                                                            The AI Search module experienced no commits or completed work during this period. One issue was updated: Progressive indexing can drop tail chunks, which describes a scenario where content indexing may stop prematurely when using certain tokenizer configurations. This means some portions of long documents could be excluded from search results, potentially impacting search completeness for users.

                                                            The issue remains open with no merge request in progress. This represents typical alpha-stage refinement as the module evolves to support different configuration combinations.

                                                            How can I help on this project?

                                                            • Consider allocating development resources to address the progressive indexing issue, which could affect search reliability in production scenarios.
                                                            • Support prioritization discussions to determine whether this issue should block a stable release or be addressed in a later version.
                                                            ---

                                                            AI translate

                                                            The AI translate project saw focused activity on two features that will improve the translation workflow for content editors on multilingual sites.

                                                            Work began on a fix for a translation failure affecting media entities. When editors attempt to translate images or other media items, the system currently encounters an error that prevents the batch operation from completing. A solution has been proposed to resolve this blocking issue.

                                                            In parallel, a new capability is under development to auto-translate referenced taxonomy terms when translating content. Currently, editors must manually translate each referenced term separately, adding time and effort to multilingual publishing workflows. The proposed enhancement would automatically translate taxonomy terms and other linked content entities during the main translation batch, streamlining the editorial process. Two merge requests have been opened for this feature.

                                                            Both pieces of work are in the early review stage and have not yet been integrated into the module.

                                                            How can I help on this project?

                                                            • Ensure code review capacity is available to evaluate and merge the pending translation fixes, particularly the media entity issue which blocks a key workflow.
                                                            • Consider resourcing for user acceptance testing of the referenced entity auto-translation feature once merged, to validate time savings for editorial teams.

                                                            Contributors: Carlos Romero (o0Charly0o), szato (odi)

                                                            ---

                                                            LiteLLM AI Provider

                                                            The LiteLLM AI Provider module made meaningful progress in the last 24 hours, with two improvements merged to strengthen reliability and expand functionality.

                                                            A fix to enhance model retrieval with fallback for admin key access was merged, improving the module's ability to retrieve available models even when configuration challenges arise. This makes the system more resilient during setup and administration.

                                                            Additionally, support for translation was added, enabling the provider to handle text translation tasks. This expands the range of use cases the module can support, making it more versatile for multilingual content workflows.

                                                            Behind the scenes, several refinements were made to improve how the module detects model capabilities, handles caching, and validates configuration settings. These changes help ensure the module operates smoothly and efficiently in production environments.

                                                            How can I help on this project?

                                                            • Ensure sufficient testing resources are available to validate translation features across different language pairs and content types.
                                                            • Support community outreach to gather feedback from early adopters on real-world use cases and pain points.

                                                            Contributors: Carlos Romero (o0Charly0o), Dan Lemon [3]

                                                            ---

                                                            AI Image Classification

                                                            Two installation issues were reported affecting users attempting to deploy the recipe on Drupal CMS sites. The first issue, Error when installing on Drupal CMS, involves a failure when installing through the administrative interface, preventing the recipe from being added to sites using the Haven template. The second, Error when applying recipe via Drush in Drupal CMS, blocks command-line installation, which is a common deployment method for development teams.

                                                            These issues prevent new users from successfully adopting the recipe, which limits the module's reach and delays delivery of automated image classification capabilities to content teams. Both issues remain unassigned and require investigation to determine root causes. As this is an early-stage module, some installation friction is expected during initial adoption, but resolving these blockers is important for expanding the user base and gathering broader feedback.

                                                            How can I help on this project?

                                                            • Allocate developer time to investigate and resolve the two open installation issues, which are currently preventing user adoption.
                                                            • Consider prioritizing testing resources to validate the recipe across different Drupal CMS configurations before broader release.
                                                            ---

                                                            AI Content Classification

                                                            No development activity occurred during this period. Two installation issues were reported when attempting to use the recipe with Drupal CMS. The first involves a validation error related to a dependency (Error when applying recipe via Drush in Drupal CMS), while the second concerns a failure during the automated installation process through the administrative interface (Error when installing on Drupal CMS). Both issues prevent users from successfully deploying the recipe in Drupal CMS environments, which limits its practical adoption. These are typical integration challenges for a developing module and do not indicate systemic problems, but they do block immediate usability for the target platform. Resolution of these compatibility issues would enable smoother deployment and testing by early adopters.

                                                            How can I help on this project?

                                                            • Allocate developer time to investigate and resolve the two reported Drupal CMS installation blockers, which are preventing the recipe from being deployed by users.
                                                            • Consider establishing a testing environment for Drupal CMS compatibility to catch integration issues earlier in the development cycle.
                                                            ======================================================================== ## [32] factcheck:capabilities:executive ======================================================================== Layer-1 corrections: 0 Judge flags: 11