docs(plans): drop the base mutation from monolith/S03 plan (moves to S07)
What
Amends the merged monolith/S03 (GraphQL foundation) plan so Step 2 no longer creates a base mutation. S03 keeps the base resolver, the client-acquisition concern (ArtifactRegistry::CachesClient), the error-rendering concern (RendersArtifactRegistryErrors), the service-unavailable error, and the keyset connection adapter. The concrete base mutation moves to monolith/S07, the first slice with mutations.
Why
Step 2 of the merged S03 plan creates a production Mutations::ArtifactRegistry::BaseMutation (ee/app/graphql/mutations/artifact_registry/base_mutation.rb). That over-reaches the S03 spec, and both specs put the base mutation in S07:
- S03 spec ships "no concrete AR type, query, mutation, or field" — only the reusable resolver behaviors (client acquisition/reuse, error rendering, keyset connection adapter, cross-service join convention). It establishes the flag-off mutation behavior as a gating contract tested via a test-only mutation, not a shipped base mutation (
docs/specs/monolith/S03-graphql-foundation.md, "GraphQL surface"). - S07 spec explicitly claims it: "S07 is the first slice with mutations, so it introduces the base mutation" and "S07 introduces the base mutation itself (S03 defines no concrete mutation)" (
docs/specs/monolith/S07-repository-crud.md).
What changed
- Step 2 retitled "Base resolver" (was "Base resolver and mutation"); scope, diagram node, and Status table updated to match.
- Removed the
base_mutation.rbproduction file from Step 2's file list. - S03 acceptance criterion 4 (flag-off mutation → top-level
ResourceNotAvailable, no client call) is retained, satisfied via a test-only/anonymous mutation composing the Step 1 error concern — spec renamedbase_mutation_spec.rb→mutation_flag_gate_spec.rbto reflect that no base mutation is shipped. - Naming conventions: base mutation marked "not shipped by S03 — belongs to monolith/S07".
Kept intact: the base resolver, ArtifactRegistry::CachesClient, RendersArtifactRegistryErrors (including its mutation-aware error-location split), the service-unavailable error class, and the keyset connection adapter.
Note
!831 (the S03 plan) is already merged, so this is a plan-amendment MR. No monolith code has been implemented against Step 2 yet — there is no shipped base mutation to remove, only the plan.
Written by GitLab Duo