docs(plans): add the monolith S07 virtual repository CRUD plan

What

Adds docs/plans/monolith/2026-09-14-repository-crud-virtual.md: the monolith plan for Phase 3 (virtual) of monolith/S07, the write half of virtual repository CRUD over the read half the S05 virtual detail plan builds. Fourteen monolith steps, EE-only and dark behind artifact_registry_ui:

  1. Repository id on the shared type
  2. Client dissociate method
  3. Dissociate mutation
  4. Client upstream list on create and update
  5. Upstream list argument on the create and update mutations
  6. Virtual create route and kind vocabulary
  7. Local write layer and the upstream-list eviction helper
  8. Upstream sources card and ordered table
  9. Upstream picker
  10. Land create and Save on the detail page for every kind
  11. Virtual create submission
  12. Edit form - upstream sources on Save
  13. Detail page - Add repository and Remove repository
  14. Connect the virtual write surfaces to the schema

Steps 1, 2, 6, 7, and 10 open at plan merge; Steps 4 and 5 open when api/openapi/v1.yaml declares upstream_repository_ids; Steps 11 to 13 run over the local Apollo layer in parallel with the schema track; Step 14 closes both.

Decisions the plan records (each taken with the engineer)

  • Every upstream edit commits on Save as one desired ordered list, and AR reconciles it. The create and update mutations forward upstreamRepositoryIds in one client call; the monolith composes no association sequence and has no partial-failure state. This departs from the spec's shape (adds and removes at the control, reorder alone on Save through a set-order mutation, a two-request create), and the same MR amends the spec.
  • The contract change is AR's, filed as #1356 (closed) (upstream_repository_ids on CreateRepositoryRequest and UpdateRepositoryRequest, reconciled atomically). Under S02's rule the client sends no undeclared parameter, so Steps 4 and 5 gate on the field's declaration, not its implementation. A create with no sources needs no gate.
  • Create and Save land on the repository's detail page, for every kind, following the design prototype driven live; Step 10 moves the shipped hosted and remote landings first.
  • The Vue track builds over the local Apollo layer, with the layer as its own step, because the measured remote-plan overruns came from a component landing with its mock layer in one MR. The plan carries the eight measured predecessor MRs and forecasts each step against them.
  • This plan depends on the S05 virtual detail plan and rebuilds none of its read half; its Step 1 has merged, the rest are named external predecessors.
  • The create-menu entry lands with the connect step, so the virtual create is offered from the list only once its writes reach the server.
  • Remove repository on the detail row confirms nothing, matching the shipped eviction affordances; the S05 sentence that made S07 own "the confirmation" is amended to own whether one exists.
  • Seam interrogations recorded as keep-bundled on Steps 8, 9, and 12; Step 14's file count over the ceiling is recorded and accepted; Step 1's sub-target size is kept separate by decision.

Spec amendments

The same MR amends docs/specs/monolith/S07-repository-crud.md at the sites the plan's Dependencies section enumerates: the Mutations table and the composed-create paragraph, the Ordering section, the endpoint and gate tables, the Ruby client rows and paragraph, the picker bullet, the States and Error cases rows including the Submitting → success landing, the Apollo cache paragraph, criteria 18, 19, 20, 23 to 26 and the eviction criterion, the two bulk asks in Follow-ups (superseded by #1356 (closed)), and three Resolutions entries. One sentence in docs/specs/monolith/S05-repository-detail.md (### Upstream table) moves the remove confirmation to S07's discretion.

Four spec statements the tree contradicts are recorded in Research Findings rather than amended, because none is Phase 3 work; the first, delete_repository sending the cascading destructive=true against criterion 39, needs a ruling on which side moves.

Review

Two pr-review-toolkit passes ran on the staged files (general review plus a claims check against the monolith on master and this repository on main, with MR states through glab); every finding was folded in or ruled on with the engineer, including the rework from a monolith-side reconciler to the AR contract ask.

Monolith tracking issue for the step MRs: gitlab-org/gitlab#629072 (closed) (child of epic &22455). AR contract gate: #1356 (closed).

Related to gitlab-org/gitlab#629072 (closed)

🤖 Generated with Claude Code

Merge request reports

Loading
Loading