Skip to content

Drupal Capability Ownership Map

Capability → owner. The answer to "who owns this, so I do not build it?" Owners are ordered by the implementation precedence that governs every Drupal decision at Bluefly:

Drupal Core → Drupal Contrib → Contrib Configuration → Recipes / Config Actions
→ Canvas / SDC → Views → ECA / FlowDrop → Drupal AI → Tool API / MCP
→ Existing Bluefly Reusable Package → New Custom Code Last

The precedence is normative in drupal-standard.md section 12 (Drupal ownership ladder) and how-we-build-in-drupal.md section 2 (decision tree); the site-building order is in drupal-site-building-standard.md section 2. This map applies them. Module-level detail is in module-ownership-matrix.md; package-level detail in bluefly-package-map.md. Owner names below are the owning layer; a module in parentheses is the current contrib owner as of the linked matrix.


Content and data

Capability Owner Governing standard
Business objects (Service, Work, Product, Person, Insight, Evidence, Organization, ...) Core content entities and bundles drupal-component-dry-standard.md section 12; site-building section 1
Facts about a business object Fields on the entity (not prose, not Canvas props) DRY section 12; DRY section 51
Classification Taxonomy (core) DRY section 48
Relationships between business objects Entity reference fields (core) DRY sections 15, 16, 52
Reusable assets (image, document, remote video, logo) Media (core) with Media Library; crop and focal point (contrib crop); SVG (svg_image) DRY section 50; matrix rows E
Alt text assistance Drupal AI (ai_image_alt_text), editorial review retained matrix row E; site-building section 4a
Reference usage and orphan detection Contrib (entity_usage) matrix row G
Automatic entity labels Contrib (auto_entitylabel), only when a bundle needs it matrix row G
Text-format restriction per field Core (formerly allowed_formats) matrix row G
Editorial form architecture (Core / Story / Relationships / Media / Discovery / Promotion / Governance sections) Configuration: form displays, field groups, Drupal CMS form-display capabilities specification section 9; site-building section 4a
Display modes (full, teaser, card, featured, compact, related, search_result, ...) Configuration: entity view modes and displays, mapped to SDCs by Canvas content templates DRY section 23; specification section 10
Configuration itself Git-tracked config export; Recipes and Config Actions for reusable composition how-we-build section 6; DRUPAL-RECIPE-FACTORY-PLAYBOOK.md
Site assembly and package sets Recipes (capability = module, composition = recipe) drupal-standard section 12; DRUPAL-FACTORY-CONVERGENCE-PLAYBOOK.md

Collections, composition, presentation

Capability Owner Governing standard
Collections, listings, related content, directories, search results Views (core); exposed filters via better_exposed_filters when needed DRY sections 19, 46, 47; matrix row H
Bulk actions on collections Contrib (views_bulk_operations), only with a consuming View matrix row H
Page composition, section order, CTA placement, Views blocks, content templates, global regions Canvas site-building section 3; how-we-build section 16
Reusable visual patterns (hero, card, card grid, metric panel, CTA cluster, person card, ...) SDC in the theme or the shared component library; Canvas Code Components where Canvas-native composition is required site-building sections 7, 15, 16; DRY
Design tokens and primitives Shared library (Studio UI) consumed by the theme site-building ownership boundary table
Drupal chrome: html.html.twig, page.html.twig, regions, messages, forms Theme site-building section 16
Navigation blocks Core menus and blocks; menu_block only once the theme renders regions matrix row H
Local code-component workflow Canvas CLI DRUPAL-CANVAS-CLI-PLAYBOOK.md

SEO, URLs, discovery

Capability Owner Governing standard
Metadata Contrib (metatag, with token) matrix row C
URL aliases Contrib (pathauto, with token) matrix row C
Redirects and redirect maps Contrib (redirect) matrix row C; migration-factory-drupal.md REDIRECTS
AI meta generation Drupal AI extension (metatag_ai) when content exists matrix row C
AI SEO analysis Drupal AI extension (ai_seo); one such module only matrix row C
Analytics tracker One contrib owner (Drupal CMS ships google_tag); decision open matrix, found rows
Agent-readable content (Markdown, llms.txt) Contrib (markdownify + llms_txt) matrix row A; bluefly-package-map.md
Agent and service discovery (/.well-known/duadp.json) Bluefly package duadp (protocol Bluefly authors), enabled by configuration bluefly-package-map.md

Workflow, tools, AI

Capability Owner Governing standard
Event-driven internal workflow ECA how-we-build section 12; DRUPAL-ECA-AUTOMATION-PLAYBOOK.md
Workflow and model abstraction Modeler API (modeler_api); Bluefly integrates via ModelOwner plugins matrix row F
Visual and data pipelines FlowDrop — only with an actual pipeline consumer matrix, found rows; drupal-standard section 10
External orchestration bridge orchestration — only when a bridge to Activepieces / n8n / Zapier exists drupal-standard section 10; matrix, found rows
Typed executable capabilities Tool API (tool); Bluefly registers #[Tool] plugins, never a second registry drupal-standard section 7; how-we-build section 8
Atomic Drupal operations as tools tool_belt how-we-build section 9
Protocol exposure of tools (MCP, JSON-RPC, REST) Adapters over Tool API: mcp_server + tool bridge; never a capability owner drupal-standard section 7.3
Model and provider abstraction Drupal AI (ai); providers are ai_provider_* plugins; LiteLLM as proxy where adopted drupal-ai-architecture.md; drupal-standard section 10
Bounded reasoning agents AI Agents (ai_agents); OSSA manifests derive them via ai_agents_ossa core drupal-ai-architecture.md; bluefly-package-map.md
Editorial AI suggestions and CKEditor AI Drupal AI extensions (ai_content_suggestions, ai_ckeditor); one CKEditor AI plugin only matrix row D
AI administration, metering, logging Drupal AI (ai_dashboard, ai_metering, ai_logging / ai_observability) matrix row B
AI usage quotas ai_metering matrix row K
Context plumbing: providers, scoring, caching, scopes, items, budgets ai_context (Context Control Center) DRUPAL-AI-CONTEXT-PLAYBOOK.md; how-we-build section 10
Context governance: Cedar-gated writes, DUADP attestation, GAID provenance Bluefly package kb_cache (governance extension only) bluefly-package-map.md
Policy decision Thin PDP client (Tool plugin + ECA condition) to the compliance engine; never inline evaluation in Drupal bluefly-package-map.md, cedar_policy
Compliance baselines drupal.org secure_drupal recipe bluefly-package-map.md
OpenAPI → managed data source → Tool API Bluefly package api_normalization core bluefly-package-map.md
External REST integration (generic) api_orchestrator / http_client_manager before custom HTTP clients how-we-build section 13
Gas City bridge Bluefly Tool API plugins in one package bluefly-package-map.md; drupal-standard section 7.4
Conventional and semantic search Search API; AI Search + vector store as a pilot drupal-ai-architecture.md

Migration, identity, operations

Capability Owner Governing standard
Content migration (sources, processes, destinations, groups, rollbacks) Core Migrate + migrate_plus (+ migrate_tools) as configuration migration-factory-drupal.md; matrix row I
Feed-style ingestion feeds — only with a consuming feed; otherwise not installed matrix, found rows
External authentication and SSO externalauth + openid_connect, configuration only matrix row J
Secrets Key + 1Password Connect 1password-drupal-secrets.md
Cache backend One stack: redis via environment configuration matrix row K
Mail One path via mailsystem (decision open) matrix row K
Cron and monitoring Core automated cron and status report unless a consumer needs more matrix, found rows
Local runtime DDEV ddev-standard.md
Project tracking Beads, never a Drupal node type bluefly-package-map.md, kb_cache

What no layer above owns

New custom code is the last rung. It requires a PROVEN_GAP classification (site-building section 25), the upstream discovery proof in how-we-build section 2, and — for a new Bluefly module — a Bluefly-specific reason listed in how-we-build section 30. A capability that appears in this map already has an owner; extend the owner.