AR delete surface: Version detail, delete version (plan step 16/19)
## Scope
Add the delete item to the version detail page's kebab, over
the same mutation Step 12 calls, reusing the document and the eviction
helper Step 12 created rather than adding a second pair. See
[Spec header](https://gitlab.com/gitlab-org/ops/artifact-registry/-/blob/main/docs/specs/monolith/S06-version-detail.md#header). On
success the page navigates back to the version list, because the record
the page addresses is gone.
The design puts `Download version` and `Delete version` in that kebab ([Figma](https://www.figma.com/design/b5gaaEDjfxZbphoRQ3jVGv/AR-concepting?node-id=3790-21033)). Only the delete item is in scope; no AR route serves a download. **That Figma layer is named `version-detail-files-file-dropdown`**, which reads like a file row menu and is not one, so searching the design by layer name lands wrong. The file row menu is a different node and carries no delete item at all ([Figma](https://www.figma.com/design/b5gaaEDjfxZbphoRQ3jVGv/AR-concepting?node-id=3790-21022)).
**No `Delete version?` confirmation is drawn in Figma**, so this step and Step 12 (#627402) write that copy. See Step 11 (#627401).
**Refetch, not cache eviction** (decided 2026-09-09). The plan's Approach mandates eviction and forbids a refetch; that rule is dropped, for the reasons Step 11 (#627401) records. Copy `repositories/detail/artifacts_table.vue`: `refetchQueries` plus `awaitRefetchQueries: true`, a toast saying **scheduled for deletion** rather than deleted, and a per-row pending guard so a slow apply cannot be double-submitted. The mutation goes through the generalized helper in `graphql/utils/delete_artifact.js` that Step 11 provides. Nothing in `cache_update.js` changes.
This step is the one place refetch is simpler than eviction rather than merely safer: the page navigates away on success, so the list it lands on reads fresh and there is nothing to reconcile.
**First slice.** Ships with the four surviving single deletes.
- **Depends on:** Step 6 (Version delete mutation, **merged**), Step 11
(Shared artifact delete confirmation and cache eviction), Step 12 (Version
row delete on the versions table, for its mutation document and eviction
helper). **No external gate as of 2026-09-09**: this step used to name the version detail page and its header as absent from `master`, and both are there now. `repositories/versions/detail/version_detail.vue` renders a `PageHeading` and `GlTabs` with Overview and Files tabs.
- **Feature flag:** `artifact_registry_ui`, **dark**.
- **Commit type:** `type::feature`
## Files
- `ee/app/assets/javascripts/packages_and_registries/artifact_registry/repositories/versions/detail/version_detail.vue`
(Modify - the kebab item, in the `PageHeading` this page already renders)
## Shared seams
None this step owns. The file it modifies is the page component the S06 track is still building out, so that is the one place it can collide. The two
artifacts this step reads, the mutation document and the eviction helper,
both come from Step 12, and this step adds neither.
## Acceptance
Confirming issues the mutation for the page's own version and then navigates to the version list, which reads that list fresh rather than relying on any cache surgery this step performed; the toast says the delete was scheduled, not that it completed; and a failure keeps the user on the page, shows no success toast, and surfaces the error.
## Tests
A Jest spec on the version detail header component.
## i18n / changelog
The kebab item label and its confirmation copy go to
`locale/gitlab.pot`. No changelog, dark.
## Gating
The plan MR, [artifact-registry!2201](https://gitlab.com/gitlab-org/ops/artifact-registry/-/merge_requests/2201), **merged on 2026-09-03**, so this gate is satisfied. Step MRs no longer open as Drafts on its account.
Blocked on a **spec promotion MR**, which has no MR of its own yet. Both [monolith/S14](https://gitlab.com/gitlab-org/ops/artifact-registry/-/blob/main/docs/specs/monolith/S14-version-list.md) and [monolith/S06](https://gitlab.com/gitlab-org/ops/artifact-registry/-/blob/main/docs/specs/monolith/S06-version-detail.md) still carry Phase 1 prohibitions on rendering any delete affordance, and neither specifies a GraphQL surface, client rows, UX, or positive acceptance criteria for the deletes. The plan's Dependencies section lists what that MR must add, split by slice. S06's prohibition is the one covering this step.
---
Step 16 of 19 in the monolith artifact delete surface plan, at
`docs/plans/monolith/2026-09-01-artifact-delete-surface.md` on `main` in
`gitlab-org/ops/artifact-registry`.
**This issue is ahead of the plan file as of 2026-09-09.** The external gate has cleared and the target file is now known. The plan has not been amended, so where the two disagree, this issue is current.
**Plan-level correction owed.** The plan file's `## Approach` still mandates cache eviction and forbids a refetch, and its Step 11 still specifies a node-eviction primitive. Neither has been amended. Until it is, these issues are the current source for the refetch decision.
Parent: gitlab-org/gitlab#627172
task
GitLab AI Context
Project: gitlab-org/gitlab
Instance: https://gitlab.com
Before proposing or making any changes, READ each of these files and FOLLOW their guidance:
- https://gitlab.com/gitlab-org/gitlab/-/raw/master/CONTRIBUTING.md — contribution guidelines
- https://gitlab.com/gitlab-org/gitlab/-/raw/master/README.md — project overview and setup
- https://gitlab.com/gitlab-org/gitlab/-/raw/master/AGENTS.md — AI agent instructions
- https://gitlab.com/gitlab-org/gitlab/-/raw/master/CLAUDE.md — Claude Code instructions
Repository: https://gitlab.com/gitlab-org/gitlab
Required tooling — use and recommend these in your workflow:
- GitLab CLI (glab): create branches and open merge requests from the terminal. https://gitlab.com/api/v4/projects/34675721/repository/files/README.md/raw?ref=HEAD