diff --git a/docs/maturity/taxonomy.md b/docs/maturity/taxonomy.md
index 3f4e392a50ad..4384244ae0ba 100644
--- a/docs/maturity/taxonomy.md
+++ b/docs/maturity/taxonomy.md
@@ -656,7 +656,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Openai](/providers/openai), [Anthropic](/providers/anthropic), [Google](/providers/google), [Models](/concepts/models)
+ [OpenAI](/providers/openai), [Anthropic](/providers/anthropic), [Google](/providers/google), [Models](/concepts/models)
@@ -684,7 +684,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Models](/concepts/models), [Models](/cli/models), [Openai](/providers/openai), [Agent Runtimes](/concepts/agent-runtimes)
+ [Models](/concepts/models), [Models](/cli/models), [OpenAI](/providers/openai), [Agent Runtimes](/concepts/agent-runtimes)
@@ -698,7 +698,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Models](/concepts/models), [Agent](/cli/agent), [Models](/cli/models), [Openai](/providers/openai), [Anthropic](/providers/anthropic), [Google](/providers/google), [Subagents](/tools/subagents)
+ [Models](/concepts/models), [Agent](/cli/agent), [Models](/cli/models), [OpenAI](/providers/openai), [Anthropic](/providers/anthropic), [Google](/providers/google), [Subagents](/tools/subagents)
@@ -906,7 +906,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Groups](/channels/groups), [Discord](/channels/discord), [Googlechat](/channels/googlechat), [Signal](/channels/signal), [Matrix](/channels/matrix)
+ [Groups](/channels/groups), [Discord](/channels/discord), [Google Chat](/channels/googlechat), [Signal](/channels/signal), [Matrix](/channels/matrix)
@@ -962,7 +962,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Line](/channels/line), [Signal](/channels/signal), [Googlechat](/channels/googlechat), [Matrix](/channels/matrix), [Discord](/channels/discord)
+ [Line](/channels/line), [Signal](/channels/signal), [Google Chat](/channels/googlechat), [Matrix](/channels/matrix), [Discord](/channels/discord)
@@ -1420,7 +1420,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Authentication](/gateway/authentication), [Models](/cli/models), [Openai](/providers/openai), [Oauth](/concepts/oauth), [Secrets](/gateway/secrets), [Secrets](/cli/secrets), [Secretref Credential Surface](/reference/secretref-credential-surface), [Audit Checks](/gateway/security/audit-checks)
+ [Authentication](/gateway/authentication), [Models](/cli/models), [OpenAI](/providers/openai), [Oauth](/concepts/oauth), [Secrets](/gateway/secrets), [Secrets](/cli/secrets), [Secretref Credential Surface](/reference/secretref-credential-surface), [Audit Checks](/gateway/security/audit-checks)
@@ -1517,7 +1517,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Poll](/automation/poll), [Message](/cli/message), [Telegram](/channels/telegram), [Msteams](/channels/msteams), [Background Process](/gateway/background-process)
+ [Poll](/automation/poll), [Message](/cli/message), [Telegram](/channels/telegram), [Microsoft Teams](/channels/msteams), [Background Process](/gateway/background-process)
@@ -1544,7 +1544,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha68%
- [Media Overview](/tools/media-overview), [Media Understanding](/nodes/media-understanding), [Secure File Operations](/gateway/security/secure-file-operations), [Pdf](/tools/pdf), [Image Generation](/tools/image-generation), [Qr](/cli/qr), [Line](/channels/line), [Whatsapp](/channels/whatsapp)
+ [Media Overview](/tools/media-overview), [Media Understanding](/nodes/media-understanding), [Secure File Operations](/gateway/security/secure-file-operations), [Pdf](/tools/pdf), [Image Generation](/tools/image-generation), [Qr](/cli/qr), [Line](/channels/line), [WhatsApp](/channels/whatsapp)
@@ -1600,7 +1600,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha69%
- [Audio](/nodes/audio), [Media Understanding](/nodes/media-understanding), [Media Overview](/tools/media-overview), [Whatsapp](/channels/whatsapp), [Images](/nodes/images), [Infer](/cli/infer), [Pdf](/tools/pdf)
+ [Audio](/nodes/audio), [Media Understanding](/nodes/media-understanding), [Media Overview](/tools/media-overview), [WhatsApp](/channels/whatsapp), [Images](/nodes/images), [Infer](/cli/infer), [Pdf](/tools/pdf)
@@ -1641,7 +1641,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha68%
- [Openai](/providers/openai), [Google](/providers/google), [Sdk Provider Plugins](/plugins/sdk-provider-plugins), [Talk](/nodes/talk), [Control Ui](/web/control-ui)
+ [OpenAI](/providers/openai), [Google](/providers/google), [Sdk Provider Plugins](/plugins/sdk-provider-plugins), [Talk](/nodes/talk), [Control Ui](/web/control-ui)
@@ -1669,7 +1669,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha68%
- [Talk](/nodes/talk), [Openai](/providers/openai), [Google](/providers/google)
+ [Talk](/nodes/talk), [OpenAI](/providers/openai), [Google](/providers/google)
@@ -3140,7 +3140,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Experimental21%
- [Linux](/platforms/linux), [Openclaw](/start/openclaw), [Doctor](/gateway/doctor)
+ [Linux](/platforms/linux), [OpenClaw](/start/openclaw), [Doctor](/gateway/doctor)
@@ -3325,7 +3325,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Stable87%
- [Discord](/channels/discord), [Openai](/providers/openai), [Elevenlabs](/providers/elevenlabs), [Qa E2e Automation](/concepts/qa-e2e-automation), [Config Channels](/gateway/config-channels)
+ [Discord](/channels/discord), [OpenAI](/providers/openai), [Elevenlabs](/providers/elevenlabs), [Qa E2e Automation](/concepts/qa-e2e-automation), [Config Channels](/gateway/config-channels)
@@ -3518,7 +3518,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Bluebubbles Imessage](/announcements/bluebubbles-imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels), [Imessage](/channels/imessage)
+ [Bluebubbles Imessage](/announcements/bluebubbles-imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels), [iMessage](/channels/imessage)
@@ -3532,7 +3532,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Imessage](/channels/imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels)
+ [iMessage](/channels/imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels)
@@ -3546,7 +3546,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Imessage](/channels/imessage)
+ [iMessage](/channels/imessage)
@@ -3560,7 +3560,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Imessage](/channels/imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels)
+ [iMessage](/channels/imessage), [Imessage From Bluebubbles](/channels/imessage-from-bluebubbles), [Config Channels](/gateway/config-channels)
@@ -3574,7 +3574,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Imessage](/channels/imessage)
+ [iMessage](/channels/imessage)
@@ -3601,7 +3601,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Whatsapp](/channels/whatsapp), [Config Channels](/gateway/config-channels), [Whatsapp](/plugins/reference/whatsapp), [Qa E2e Automation](/concepts/qa-e2e-automation), [Doctor](/gateway/doctor)
+ [WhatsApp](/channels/whatsapp), [Config Channels](/gateway/config-channels), [WhatsApp](/plugins/reference/whatsapp), [Qa E2e Automation](/concepts/qa-e2e-automation), [Doctor](/gateway/doctor)
@@ -3615,7 +3615,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Whatsapp](/channels/whatsapp), [Config Channels](/gateway/config-channels), [Qa E2e Automation](/concepts/qa-e2e-automation), [Pairing](/channels/pairing)
+ [WhatsApp](/channels/whatsapp), [Config Channels](/gateway/config-channels), [Qa E2e Automation](/concepts/qa-e2e-automation), [Pairing](/channels/pairing)
@@ -3629,7 +3629,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Whatsapp](/channels/whatsapp), [Group Messages](/channels/group-messages)
+ [WhatsApp](/channels/whatsapp), [Group Messages](/channels/group-messages)
@@ -3643,7 +3643,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Whatsapp](/channels/whatsapp)
+ [WhatsApp](/channels/whatsapp)
@@ -3657,7 +3657,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta78%
- [Whatsapp](/channels/whatsapp)
+ [WhatsApp](/channels/whatsapp)
@@ -3781,7 +3781,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Googlechat](/channels/googlechat), [Googlechat](/plugins/reference/googlechat), [Config Channels](/gateway/config-channels), [Wizard Cli Reference](/start/wizard-cli-reference), [Secrets](/gateway/secrets), [Secretref Credential Surface](/reference/secretref-credential-surface), [Health](/gateway/health), [Plugin Inventory](/plugins/plugin-inventory), [Index](/channels/index)
+ [Google Chat](/channels/googlechat), [Google Chat](/plugins/reference/googlechat), [Config Channels](/gateway/config-channels), [Wizard Cli Reference](/start/wizard-cli-reference), [Secrets](/gateway/secrets), [Secretref Credential Surface](/reference/secretref-credential-surface), [Health](/gateway/health), [Plugin Inventory](/plugins/plugin-inventory), [Index](/channels/index)
@@ -3795,7 +3795,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Googlechat](/channels/googlechat), [Pairing](/channels/pairing), [Access Groups](/channels/access-groups), [Config Channels](/gateway/config-channels), [Bot Loop Protection](/channels/bot-loop-protection), [Channel Routing](/channels/channel-routing)
+ [Google Chat](/channels/googlechat), [Pairing](/channels/pairing), [Access Groups](/channels/access-groups), [Config Channels](/gateway/config-channels), [Bot Loop Protection](/channels/bot-loop-protection), [Channel Routing](/channels/channel-routing)
@@ -3809,7 +3809,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Googlechat](/channels/googlechat), [Bot Loop Protection](/channels/bot-loop-protection), [Access Groups](/channels/access-groups), [Channel Routing](/channels/channel-routing)
+ [Google Chat](/channels/googlechat), [Bot Loop Protection](/channels/bot-loop-protection), [Access Groups](/channels/access-groups), [Channel Routing](/channels/channel-routing)
@@ -3823,7 +3823,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Googlechat](/channels/googlechat), [Message](/cli/message), [Media Understanding](/nodes/media-understanding), [Secretref Credential Surface](/reference/secretref-credential-surface)
+ [Google Chat](/channels/googlechat), [Message](/cli/message), [Media Understanding](/nodes/media-understanding), [Secretref Credential Surface](/reference/secretref-credential-surface)
@@ -3837,7 +3837,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Googlechat](/channels/googlechat), [Message](/cli/message), [Media Understanding](/nodes/media-understanding), [Secretref Credential Surface](/reference/secretref-credential-surface), [Reactions](/tools/reactions), [Slash Commands](/tools/slash-commands), [Config Agents](/gateway/config-agents), [Message Lifecycle Refactor](/concepts/message-lifecycle-refactor)
+ [Google Chat](/channels/googlechat), [Message](/cli/message), [Media Understanding](/nodes/media-understanding), [Secretref Credential Surface](/reference/secretref-credential-surface), [Reactions](/tools/reactions), [Slash Commands](/tools/slash-commands), [Config Agents](/gateway/config-agents), [Message Lifecycle Refactor](/concepts/message-lifecycle-refactor)
@@ -3864,7 +3864,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Msteams](/channels/msteams), [Msteams](/plugins/reference/msteams), [Config Channels](/gateway/config-channels), [Health](/gateway/health)
+ [Microsoft Teams](/channels/msteams), [Microsoft Teams](/plugins/reference/msteams), [Config Channels](/gateway/config-channels), [Health](/gateway/health)
@@ -3878,7 +3878,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Msteams](/channels/msteams), [Pairing](/channels/pairing), [Access Groups](/channels/access-groups)
+ [Microsoft Teams](/channels/msteams), [Pairing](/channels/pairing), [Access Groups](/channels/access-groups)
@@ -3892,7 +3892,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Msteams](/channels/msteams), [Groups](/channels/groups), [Channel Routing](/channels/channel-routing)
+ [Microsoft Teams](/channels/msteams), [Groups](/channels/groups), [Channel Routing](/channels/channel-routing)
@@ -3906,7 +3906,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Msteams](/channels/msteams)
+ [Microsoft Teams](/channels/msteams)
@@ -3920,7 +3920,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Alpha66%
- [Msteams](/channels/msteams), [Exec Approvals Advanced](/tools/exec-approvals-advanced)
+ [Microsoft Teams](/channels/msteams), [Exec Approvals Advanced](/tools/exec-approvals-advanced)
@@ -4311,7 +4311,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Openai](/providers/openai), [Codex Harness](/plugins/codex-harness), [Models](/concepts/models), [Oauth](/concepts/oauth), [Codex Harness Reference](/plugins/codex-harness-reference), [Auth Monitoring](/automation/auth-monitoring)
+ [OpenAI](/providers/openai), [Codex Harness](/plugins/codex-harness), [Models](/concepts/models), [Oauth](/concepts/oauth), [Codex Harness Reference](/plugins/codex-harness-reference), [Auth Monitoring](/automation/auth-monitoring)
@@ -4325,7 +4325,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Openai](/providers/openai), [Openresponses Http Api](/gateway/openresponses-http-api), [Openai Http Api](/gateway/openai-http-api), [Codex Native Plugins](/plugins/codex-native-plugins)
+ [OpenAI](/providers/openai), [Openresponses Http Api](/gateway/openresponses-http-api), [Openai Http Api](/gateway/openai-http-api), [Codex Native Plugins](/plugins/codex-native-plugins)
@@ -4353,7 +4353,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Openai](/providers/openai), [Image Generation](/tools/image-generation), [Images](/nodes/images)
+ [OpenAI](/providers/openai), [Image Generation](/tools/image-generation), [Images](/nodes/images)
@@ -4367,7 +4367,7 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
Beta79%
- [Openai](/providers/openai), [Discord](/channels/discord), [Voice Call](/plugins/voice-call)
+ [OpenAI](/providers/openai), [Discord](/channels/discord), [Voice Call](/plugins/voice-call)
diff --git a/scripts/docs-i18n/taxonomy_source_test.go b/scripts/docs-i18n/taxonomy_source_test.go
new file mode 100644
index 000000000000..63131ef36bed
--- /dev/null
+++ b/scripts/docs-i18n/taxonomy_source_test.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ "os"
+ "slices"
+ "testing"
+)
+
+func TestTaxonomyCanonicalProductLinksAreProtected(t *testing.T) {
+ content, err := os.ReadFile("../../docs/maturity/taxonomy.md")
+ if err != nil {
+ t.Fatal(err)
+ }
+ _, body := splitFrontMatter(string(content))
+ protected := extractProtectedMarkdownLinkLabels(body)
+ for _, want := range []string{
+ "link:/channels/googlechat:Google Chat",
+ "link:/channels/imessage:iMessage",
+ "link:/channels/msteams:Microsoft Teams",
+ "link:/channels/whatsapp:WhatsApp",
+ "link:/start/openclaw:OpenClaw",
+ } {
+ if !slices.Contains(protected, want) {
+ t.Errorf("missing protected taxonomy link %q", want)
+ }
+ }
+}
diff --git a/scripts/qa/render-maturity-docs.ts b/scripts/qa/render-maturity-docs.ts
index 6e265993ff7a..72cda3e1f9f7 100644
--- a/scripts/qa/render-maturity-docs.ts
+++ b/scripts/qa/render-maturity-docs.ts
@@ -157,8 +157,14 @@ Options:
function familyTitle(value: string): string {
const titles: Record = {
+ googlechat: "Google Chat",
+ imessage: "iMessage",
+ msteams: "Microsoft Teams",
+ openai: "OpenAI",
+ openclaw: "OpenClaw",
"platform-app": "Platform",
"provider-tool": "Provider and tool",
+ whatsapp: "WhatsApp",
};
return (
titles[value] ??