docs(plans): plan the monolith S05 and S07 remote surfaces

What this MR does and why

Adds two monolith plans for the remote repository kind, indexes both, and amends the S07 spec so it agrees with the design that reached review and with its S05 sibling.

The plans

  • monolith/S07 Phase 2, repository CRUD: the client extension, the typed settings read type and its health-status enum, the settings write path, the test-connection mutation, the Vue remote create and edit surfaces, and a client step closing AR's already-fired destructive delete gate.
  • monolith/S05, repository detail: 14 steps. The remote detail read and the lastDownloadedAt element field, the client cache-eviction writes and their mutations, and the Vue work that turns the shipped hosted detail page into one that also serves a remote repository.

Neither plan carries a Research findings section. Facts a step rests on are stated at that step.

Both plans describe work already under way

Sixteen of the 26 rows across the two Status tables carry an MR. That is unusual for a plan MR, and it is why neither plan reads as a sequence still ahead of the tree:

Plan Steps with MRs
S07 1 !252151, 2 !251942, 3 !252160, 4 !252519, 5 !251084, 6 !251533, 7 !251598, 8 and 9 share !252766 (all merged)
S05 1 !252683, 2 !252898, 3 !252723, 5 !251268, 6 !251515, 7 !252175, 8 !251598 (all merged)

The merged branch names encode step numbers from an earlier revision of the S07 plan, so the plan keeps that numbering rather than renumbering under them. Nine rows stay empty and are unstarted. The tenth, S07 Step 10, records in its Status row that it closed as unnecessary, so the batch fill does not hunt for an MR that will never exist.

Two things the plans record that a reader would otherwise rediscover

Both AR remote write gates have cleared. CreateRepositoryRequest.kind accepts remote and UpdateRepositoryRequest carries settings, which is why every Phase 2 criterion in the spec now reads No AR gate. No step in either plan waits on one.

The Vue surfaces were built over a local Apollo layer, and it is now fully removed. S07 Step 10 existed to sweep what remained of it, but by the time this MR reached review the rest was already gone: localRemoteSettings was removed by S05 Step 7 (!252175), and !252766 took the rest with it, deleting update_remote_repository.mutation.graphql and every Local-prefixed type and input from typedefs.graphql. Step 10 closes as unnecessary rather than opening, and the plan records why. Each local field had carried a local prefix, because a field added to an existing type by extension cannot reuse a name the schema already owns.

S07 Step 11 leads the order, because its gate has already fired. AR's delete requires a destructive parameter and answers 400 without it; the monolith client sends none. So every monolith repository delete fails today, in every phase and kind, held off users only by artifact_registry_ui being default_enabled: false - the first organization the rollout enables meets it. Step 11 is remedial rather than preparatory, and anyone sequencing that rollout should land it first. S07 Step 11a is the other live defect behind the same flag: two of the spec's filter-list keys are not in config.filter_parameters, so a mutation carrying upstream credentials can put a plaintext credential into a request log or an error report. Step 11 leads because a single delete reaches its 400; Step 11a follows, and both land before the flag is enabled anywhere.

The spec amendments

The settings input is flat. It was specified as one type per format family, with the resolver enforcing that exactly one arrives. Two facts retire that design: an update carries the repository's name and not its format, so a resolver choosing a per-format branch needs a second read to learn which one; and AR already refuses a field the format does not define with a 400 that surfaces in the payload errors. Four sites move: the Credential-writes paragraph, the acceptance criterion covering zero and several inputs, the Error-cases row, and the Resolutions entry. The cost is stated rather than left to be noticed: the schema no longer makes a Maven-only field on an npm repository unrepresentable, and a round trip refuses it.

S07 no longer describes a toast on the detail page. The S05 amendment in this MR withdraws it. A probe's result lands in the indicator it changed and nowhere else, and that page renders neither passed nor http_status. Four S07 sites now match, including the accepted cost that the upstream's HTTP status class never reaches the operator there. The S07 edit form still renders the probe's own answer inline, because those fields have somewhere useful to go while the user is configuring the upstream; the asymmetry is deliberate and S07 now says why.

Review notes

  • Both plans went through a pr-review-toolkit:review-pr pass; the S07 plan went through two, the second by operator override after the local-layer rework.
  • Duo's review is addressed: the index row's counts are deleted rather than re-derived, the S05 index row it found missing is restored, the phantom Step 15 is gone from the S05 plan, and the S07 and S05 texts agree on the withdrawn detail-page toast.
  • Three S07 surfaces are named as out of scope rather than left implicit: the create-form probe (no AR endpoint contracts it), the detail-page connection display (an S05 dependency), and a credential clear action (a spec capability gap with no design behind it). Criterion 1's unmet field-error binding is named as a Phase 1 gap.

Size

2,075 added and 106 removed lines, all documentation, in five files:

File group LOC What it is
monolith/2026-08-20-repository-detail-remote.md +1,036 new S05 remote plan
monolith/2026-08-20-repository-crud-remote.md +914 new S07 Phase 2 plan
specs/monolith/S07-repository-crud.md +67 / -54 flat settings input, the withdrawn toast, the fired destructive gate
specs/monolith/S05-repository-detail.md +56 / -52 the amendments the S05 plan rests on
plans/README.md +2 one index row per plan

Past guardrail 20's 500-line threshold, and kept as one MR rather than three deliberately. The two plans and the spec amendment are one review context: each plan's Dependencies cites the S07 amendment this MR carries, the S05 amendment is what the S05 plan's steps rest on, and the two plans share the local Apollo layer, the connect steps and the monolith/S05 dependency the S07 plan names. Split three ways, each MR cites two it cannot be read without.

The 1,950 new lines are two documents that are read whole rather than diffed, and no part of them is code. The 106 removed lines and the 123 changed spec lines are the reviewable diff in the ordinary sense.

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

Edited by Rahul Chanila

Merge request reports

Loading
Loading