From 6c3bf92eeb7c7ff7eeaac4d8cc9cad7dc821b4d5 Mon Sep 17 00:00:00 2001 From: Jonas Larsen Date: Wed, 8 Oct 2025 17:23:16 +0200 Subject: [PATCH 1/4] Add classification support to CLI --- scripts/internal_events/cli/event.rb | 3 ++- .../cli/flows/event_definer.rb | 19 +++++++++++++++++ .../internal_events/cli/text/event_definer.rb | 21 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/scripts/internal_events/cli/event.rb b/scripts/internal_events/cli/event.rb index 88f53a29aba799..e954334ea5666e 100755 --- a/scripts/internal_events/cli/event.rb +++ b/scripts/internal_events/cli/event.rb @@ -15,7 +15,8 @@ module InternalEventsCli :product_categories, :milestone, :introduced_by_url, - :tiers + :tiers, + :classification ].freeze EVENT_DEFAULTS = { diff --git a/scripts/internal_events/cli/flows/event_definer.rb b/scripts/internal_events/cli/flows/event_definer.rb index 347292a641297f..361f6c99904e07 100644 --- a/scripts/internal_events/cli/flows/event_definer.rb +++ b/scripts/internal_events/cli/flows/event_definer.rb @@ -20,6 +20,7 @@ class EventDefiner 'Group', 'Categories', 'Tiers', + 'Classification', 'Save files' ].freeze @@ -40,6 +41,7 @@ def run prompt_for_product_group prompt_for_product_categories prompt_for_tier + prompt_for_classification outcome = create_event_file display_result(outcome) @@ -222,6 +224,23 @@ def prompt_for_tier ) end + def prompt_for_classification + new_page!(on_step: 'Classification', steps: STEPS) + + cli.say CLASSIFICATION_INTRO + + classification_choice = cli.select( + 'Should this event have "classification: duo"?', + **select_opts + ) do |menu| + menu.enum "." + menu.choice 'Yes - this event is related to AI/Duo features', :duo + menu.choice 'No - this event is not related to AI/Duo features', :none + end + + event.classification = 'duo' if classification_choice == :duo + end + def create_event_file new_page!(on_step: 'Save files', steps: STEPS) diff --git a/scripts/internal_events/cli/text/event_definer.rb b/scripts/internal_events/cli/text/event_definer.rb index 62c52d66194629..a59f9da68aa5dd 100644 --- a/scripts/internal_events/cli/text/event_definer.rb +++ b/scripts/internal_events/cli/text/event_definer.rb @@ -142,6 +142,27 @@ module EventDefiner - value TEXT + + CLASSIFICATION_INTRO = <<~TEXT.freeze + #{format_info('EVENT CLASSIFICATION')} + + The classification field is used to categorize events based on their data handling requirements. + Currently, the only supported classification is "duo" for AI and Duo-related features. + + #{format_info('WHEN TO USE "classification: duo":')} + - Events related to GitLab Duo features (Duo Agent Platform, Code Suggestions, Duo Chat, etc.) + - AI-powered functionality and interactions + - Events owned by an AI Engineering product group such as duo_chat, ai_framework or duo_agent_framework + + #{format_info('WHEN NOT TO USE "classification: duo":')} + - Regular GitLab features unrelated to Duo or AI + - Standard user interactions (creating issues, merge requests, etc.) + - Infrastructure or system events + + Events with "classification: duo" are treated as operational data with specific data handling requirements. + + Learn more: https://docs.gitlab.com/development/internal_analytics/internal_event_instrumentation/duo_classification/ + TEXT end end end -- GitLab From b9d66b51372d4987bc0b9e35fefa6f1ec7dcc3aa Mon Sep 17 00:00:00 2001 From: Jonas Larsen Date: Fri, 10 Oct 2025 12:25:37 +0200 Subject: [PATCH 2/4] Apply 1 suggestion(s) to 1 file(s) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: MichaƂ Wielich --- scripts/internal_events/cli/text/event_definer.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/internal_events/cli/text/event_definer.rb b/scripts/internal_events/cli/text/event_definer.rb index a59f9da68aa5dd..fba10d368e12a0 100644 --- a/scripts/internal_events/cli/text/event_definer.rb +++ b/scripts/internal_events/cli/text/event_definer.rb @@ -155,9 +155,7 @@ module EventDefiner - Events owned by an AI Engineering product group such as duo_chat, ai_framework or duo_agent_framework #{format_info('WHEN NOT TO USE "classification: duo":')} - - Regular GitLab features unrelated to Duo or AI - - Standard user interactions (creating issues, merge requests, etc.) - - Infrastructure or system events + - GitLab features unrelated to Duo or AI Events with "classification: duo" are treated as operational data with specific data handling requirements. -- GitLab From b4c3608535f64cc7824f79c7eac4745d968f11ba Mon Sep 17 00:00:00 2001 From: Jonas Larsen Date: Fri, 10 Oct 2025 15:28:08 +0200 Subject: [PATCH 3/4] Add classification step to fixtures --- .../internal_events/event_definer_examples.yml | 13 +++++++++++++ .../events/keyboard_smashed_event.yml | 1 + .../internal_events/metric_definer_examples.yml | 1 + .../internal_events/cli/flows/event_definer_spec.rb | 2 +- spec/scripts/internal_events/cli_spec.rb | 2 ++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spec/fixtures/scripts/internal_events/event_definer_examples.yml b/spec/fixtures/scripts/internal_events/event_definer_examples.yml index e3c08c6a30ca06..3f22635939778a 100644 --- a/spec/fixtures/scripts/internal_events/event_definer_examples.yml +++ b/spec/fixtures/scripts/internal_events/event_definer_examples.yml @@ -11,6 +11,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "\n" # Select: Create Metric --- define a new metric - "\e[A" # Arrow up to: Total count of events @@ -41,6 +42,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -65,6 +67,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - "\e[A \n" # Skip product category - "1\n" # Select [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -85,6 +88,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "2\n" # Select [premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -104,6 +108,7 @@ - "\n" # Select core_platform:manage:import - " \n" # Select product category - "\n" # Select [free, premium, ultimate] + - "\n" # No - this event is not related to AI/Duo features - "\n" # Create file - "\n" # Select: Create Metric --- define a new metric - "\n" # Select: Weekly/Monthly count of unique users @@ -141,6 +146,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "2\n" # Select [premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -161,6 +167,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "3\n" # Select: View Usage - "Exit" # Filters to this item @@ -183,6 +190,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "n\n" # Create file - "\n" # Select: Save event & create Metric --- define a new metric - "\e[A" # Arrow up to: Total count of events @@ -212,6 +220,7 @@ - "service_ " # Select product category: service_ping - "d \n" # Select additional product category: service_desk - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -239,6 +248,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -260,6 +270,7 @@ - "service_ " # Select product category: service_ping - "d \n" # Select additional product category: service_desk - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "1\n" # Create another event - "Internal Event CLI is opened\n" # Submit description @@ -271,6 +282,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select default product category: service_ping - "2\n" # Select [premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: @@ -302,6 +314,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "1\n" # Select: [free, premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: diff --git a/spec/fixtures/scripts/internal_events/events/keyboard_smashed_event.yml b/spec/fixtures/scripts/internal_events/events/keyboard_smashed_event.yml index ab8365bf5ba8c9..a853d0973863af 100644 --- a/spec/fixtures/scripts/internal_events/events/keyboard_smashed_event.yml +++ b/spec/fixtures/scripts/internal_events/events/keyboard_smashed_event.yml @@ -16,3 +16,4 @@ tiers: - free - premium - ultimate +classification: duo diff --git a/spec/fixtures/scripts/internal_events/metric_definer_examples.yml b/spec/fixtures/scripts/internal_events/metric_definer_examples.yml index 2d22ef8000ec2a..5502e530174961 100644 --- a/spec/fixtures/scripts/internal_events/metric_definer_examples.yml +++ b/spec/fixtures/scripts/internal_events/metric_definer_examples.yml @@ -257,6 +257,7 @@ - "\n" # Accept analytics:monitor:analytics_instrumentation - " \n" # Select product category - "2\n" # Select [premium, ultimate] + - "2\n" # No - this event is not related to AI/Duo features - "y\n" # Create file - "4\n" # Exit outputs: diff --git a/spec/scripts/internal_events/cli/flows/event_definer_spec.rb b/spec/scripts/internal_events/cli/flows/event_definer_spec.rb index d6eec6054d0f58..6204ad88ca1f67 100644 --- a/spec/scripts/internal_events/cli/flows/event_definer_spec.rb +++ b/spec/scripts/internal_events/cli/flows/event_definer_spec.rb @@ -36,7 +36,7 @@ ]) with_cli_thread do - expect { prompt.output.string }.to eventually_include_cli_text('Step 3 / 8') + expect { prompt.output.string }.to eventually_include_cli_text('Step 3 / 9') end end end diff --git a/spec/scripts/internal_events/cli_spec.rb b/spec/scripts/internal_events/cli_spec.rb index 73c388c591b52c..13a90453790d81 100644 --- a/spec/scripts/internal_events/cli_spec.rb +++ b/spec/scripts/internal_events/cli_spec.rb @@ -60,6 +60,7 @@ "analytics_instrumentation\n", # Input group "service_ping \n", # Select product category "2\n", # Select [premium, ultimate] + "2\n", # No - this event is not related to AI/Duo features "y\n", # Create file "4\n" # Exit ] @@ -130,6 +131,7 @@ "instrumentation\n", # Filter & select group " \n", # Select product category "2\n", # Select [premium, ultimate] + "2\n", # No - this event is not related to AI/Duo features "y\n", # Create file "4\n" # Exit ] -- GitLab From efe57b72de5b98e7f7fd4e2d4d09b9a55b015fc1 Mon Sep 17 00:00:00 2001 From: Jonas Larsen Date: Mon, 13 Oct 2025 16:32:39 +0200 Subject: [PATCH 4/4] Apply review feedback --- scripts/internal_events/cli/text/event_definer.rb | 1 + .../fixtures/scripts/internal_events/event_definer_examples.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/internal_events/cli/text/event_definer.rb b/scripts/internal_events/cli/text/event_definer.rb index fba10d368e12a0..3e499c4e4700dd 100644 --- a/scripts/internal_events/cli/text/event_definer.rb +++ b/scripts/internal_events/cli/text/event_definer.rb @@ -160,6 +160,7 @@ module EventDefiner Events with "classification: duo" are treated as operational data with specific data handling requirements. Learn more: https://docs.gitlab.com/development/internal_analytics/internal_event_instrumentation/duo_classification/ + TEXT end end diff --git a/spec/fixtures/scripts/internal_events/event_definer_examples.yml b/spec/fixtures/scripts/internal_events/event_definer_examples.yml index 3f22635939778a..f01c2cd68ab084 100644 --- a/spec/fixtures/scripts/internal_events/event_definer_examples.yml +++ b/spec/fixtures/scripts/internal_events/event_definer_examples.yml @@ -108,7 +108,7 @@ - "\n" # Select core_platform:manage:import - " \n" # Select product category - "\n" # Select [free, premium, ultimate] - - "\n" # No - this event is not related to AI/Duo features + - "\n" # Yes - this event is related to AI/Duo features - "\n" # Create file - "\n" # Select: Create Metric --- define a new metric - "\n" # Select: Weekly/Monthly count of unique users -- GitLab