docs(plans): add the monolith S05 virtual repository detail plan
What
Adds docs/plans/monolith/2026-09-10-repository-detail-virtual.md: the monolith plan for the virtual repository detail page, across all four MVP formats (maven, npm, docker, oci), implementing the virtual scope of monolith/S05. Eight monolith steps, EE-only and dark behind artifact_registry_ui:
- Client upstream-list read
- Kind gate on the artifact connections
- Upstream list field and types
- Virtual main region and the upstream table
- Virtual sidebar stats
- Virtual empty state and the setup entry
- Upstream row actions
- Connect the virtual detail view to the schema
Steps 1, 2, and 4 open at plan merge; Steps 5 to 7 are sibling-parallel off Step 4; Step 3 runs parallel with the Vue track; Step 8 closes both.
Decisions the plan records (each taken with the engineer)
- Proceed dark against the contract. AR serves none of the upstream association routes yet (
contractPendingOperationsininternal/managementapi/contract_routes_test.go) and still refuseskind=virtualon create. Every step merges against WebMock stubs, mock resolvers, or a client double; the live path waits on the S17 Phase 6 plan's steps 36 to 42, and the plan names that gate per step. - This plan carries the read half S07 Phase 3 declares (the client read, the
upstreamRepositoriesfield, and its types), because no S07 Phase 3 plan exists. The ownership deviation is named. - Add repository and Remove repository are not mounted; both mount points are named and asserted empty for the S07 Phase 3 plan.
- The upstream row's Clear cache follows the tree: the shipped remote eviction affordances issue on selection with no confirmation.
Spec amendment
The same MR amends docs/specs/monolith/S05-repository-detail.md, by engineer decision:
- The eviction-confirmation rule moves to the tree: an eviction issues on selection, its item's accessible name carries the scope, and the outcome announcement is the feedback. Sites:
#### Confirmation and outcome, the upstream row's consequence sentence, the### Accessibilitybullet, two criteria, the gating and mutation clauses, and a new## Resolutionsentry. - Two internal disagreements the plan's research surfaced are settled: the upstream summary's field set and why
formatis selected (the shipped mutation takesnamealone), and what an upstream-row eviction refetches (the### Apollorule wins over the### Statesrow and its criterion). - A present-tense "render today" clause in
## Resolutionsis rewritten in condition-and-event form.
Review
One pr-review-toolkit pass ran on the staged files (general review plus a claims check against the monolith at 2c4aaba42124 and this repository at bbcdafe4d); every finding was folded in or ruled on with the engineer. Step 4 sits past the file ceiling and its seam interrogation is recorded as keep bundled.
Monolith tracking issue for the step MRs: gitlab-org/gitlab#628475 (child of epic &22453).
Related to gitlab-org/gitlab#628475