Hotspot GitLab Duo Chat during Trial
What does this MR do and why?
Full experiment context is in https://gitlab.com/groups/gitlab-org/-/epics/18106
Test adding a hotspot element to GitLab Duo Chat button in the top navigation for net new trial (Ultimate + GItLab Duo Enterprise) signups.
References
Screenshots or screen recordings
| control | candidate |
|---|---|
![]() |
![]() |
| Screen Recording |
|---|
| Screen_Recording_2025-07-08_at_16.34.29 |
How to set up and validate locally
bin/rails c
Feature.enable(:hotspot_duo_chat_during_trial)
- Setup gdk to simulate SaaS - https://docs.gitlab.com/ee/development/ee_features.html#simulate-a-saas-instance and restart GDK
- Sign out. Register new user.
- Create a group with a project.
- Visit that project.
- Have duo setup or apply this patch:
Patch
diff --git a/app/views/layouts/nav/_top_bar.html.haml b/app/views/layouts/nav/_top_bar.html.haml
index c833bf01704c..a6400cddb193 100644
--- a/app/views/layouts/nav/_top_bar.html.haml
+++ b/app/views/layouts/nav/_top_bar.html.haml
@@ -5,6 +5,6 @@
.gl-grow.gl-basis-0.gl-flex.gl-items-center.gl-justify-start.gl-gap-3
= render Pajamas::ButtonComponent.new(icon: 'sidebar', category: :tertiary, button_options: { class: 'js-super-sidebar-toggle-expand super-sidebar-toggle -gl-ml-3', aria: { controls: 'super-sidebar', expanded: 'false', label: _('Primary navigation sidebar') } })
= render "layouts/nav/breadcrumbs/breadcrumbs"
- - if duo_button_enabled
+ - if true
.gl-flex-none.gl-flex.gl-items-center.gl-justify-center.gl-gap-3
= render "layouts/nav/ask_duo_button"
diff --git a/ee/app/views/layouts/_tanuki_bot_chat.html.haml b/ee/app/views/layouts/_tanuki_bot_chat.html.haml
index b9d81cde556e..02dd3527803f 100644
--- a/ee/app/views/layouts/_tanuki_bot_chat.html.haml
+++ b/ee/app/views/layouts/_tanuki_bot_chat.html.haml
@@ -1,4 +1,4 @@
-- return unless ::Gitlab::Llm::TanukiBot.enabled_for?(user: current_user, container: nil)
+/ - return unless ::Gitlab::Llm::TanukiBot.enabled_for?(user: current_user, container: nil)
- resource_id = Gitlab::Llm::TanukiBot.resource_id
- project_id = Gitlab::Llm::TanukiBot.project_id
- root_namespace_id = Gitlab::Llm::TanukiBot.root_namespace_id
diff --git a/ee/app/views/layouts/nav/_ask_duo_button.html.haml b/ee/app/views/layouts/nav/_ask_duo_button.html.haml
index a4391c8d47fb..166998f26b76 100644
--- a/ee/app/views/layouts/nav/_ask_duo_button.html.haml
+++ b/ee/app/views/layouts/nav/_ask_duo_button.html.haml
@@ -12,7 +12,7 @@
size: 'medium',
button_options: { class: 'enabled-button js-duo-agentic-chat-toggle', aria: { label: duo_agentic_chat }})
-- if chat_disabled_reason.present?
+- if false
- translated_project = s_('DuoChat|project')
- translated_group = s_('DuoChat|group')
- translated_reason = chat_disabled_reason == 'project' ? translated_project : translated_group
- Reload the page.
- Hover the hotspot.
- Click the hotspot.
- Click Ask GitLab Duo.
- Make sure tracking events are generated.
Tracking
| Variant | Activity | action | label |
|---|---|---|---|
| Control and Candidate | Click on GitLab Duo Chat
|
click_button |
tanuki_bot_breadcrumbs_button |
| Candidate | Hotspot is rendered | render_ask_gitlab_duo_hotspot |
- |
| Candidate | Click on Hotspot Element | click_ask_gitlab_duo_hotspot |
- |
| Control and Candidate | Popover is rendered | render_duo_chat_callout |
- |
| Control and Candidate | Click on Ask GitLab Duo in GitLab Duo Chat popover |
click_ask_gitlab_duo |
- |
| Control and Candidate | Click on x in GitLab Duo Chat popover |
dismiss_duo_chat_callout |
- |
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Related to #550757
Edited by Serhii Yarynovskyi

