Add AiTracking for three Duo features

What does this MR do and why?

Adds AiTracking (the default tracker, so no extra_trackers block is needed) for three GitLab Duo features, part of the Duo AiTracking audit (#567159):

Feature Event Event ID
Duo Vulnerability Resolution request_duo_vulnerability_resolution 34
Duo Vulnerability Explanation explain_vulnerability 35
Merge request description composition compose_merge_request_description 45

Each event fires at the entry of its request path via the Gitlab::InternalEventsTracking concern (track_internal_event), passing user and project only -- InternalEvents derives the namespace from the project and AiTracking derives namespace_id from the project's namespace, matching the established Duo tracking convention (e.g. Llm::ChatService). The two vulnerability features resolve project from the Vulnerability resource directly (the DuoChatResourceHelper#project helper does not cover it); the description composer uses the helper.

This combines what were three separate row-MRs (!240999 (closed), !241057 (closed), !241275 (closed)) into one, per @nisong's suggestion, to cut review churn.

Event IDs

34 / 35 / 45. 34 and 35 reuse the ids reserved for these features in #567159; 37 was taken by the already-merged !240198 (merged).

compose_merge_request_description moved from 38 to 45 on the 2026-07-27 rebase: master claimed 38 for ai_duo_messaging_feedback_submitted while this MR was in review. IDs 39-44 are reserved by in-flight MRs !246385 and !246473, so this takes the next free id rather than renumbering those.

Part of #567159.

Edited by Andrew Dunn

Merge request reports

Loading