chore(infra): extract S12 OCI local boilerplate (MR 0/5)
Why
!124 (S12 OCI foundation, MR 1/5) is the entry point for the OCI-local stack but still carries 5,200+ lines mixed with file-level boilerplate that doesn't need code review. Pawel asked for the boilerplate to land first as a separate, fast-merge MR so the rest of the stack can focus reviewer attention on Go code.
This is MR 0 of a 6-MR stack. Every file in this MR comes from the existing 19-oci-{foundation,database,format,wiring} branches at HEAD. After this lands, we rebuild MRs 1-5 on top with code-only diffs.
Issue: #19 (closed) Spec: S12 (already merged via !48 (merged))
Stack and merge order
| # | MR | Branch | Targets | Blocks |
|---|---|---|---|---|
| 0 | !141 (merged) ← you are here | 19-oci-boilerplate |
main |
!124 (closed) |
| 1 | !124 (closed) | 19-oci-foundation |
19-oci-boilerplate |
!125 (closed) |
| 2 | !125 (closed) | 19-oci-database |
foundation | !126 (closed) |
| 3 | !126 (closed) | 19-oci-cas |
database | !127 (closed) |
| 4 | !127 (closed) | 19-oci-format |
cas | !128 (closed) |
| 5 | !128 (closed) | 19-oci-wiring |
format | n/a |
What's in MR-0
20 files, 2,352 insertions, 79 deletions. Every file comes verbatim from the named source branch's HEAD.
From foundation (19-oci-foundation)
proto/artifactregistry/config/v1/{config,secret}.proto:ServerConfig,AuthChallengeConfig,DatabaseConfig,TLSConfig, and the newSecretRefone-of (env or file).gen/artifactregistry/config/v1/{config,secret}.pb.go: generated.buf generateis a no-op against the protos in this MR (verified locally).buf.yaml: breaking strictness flipsFILEtoWIRE.WIREpermits reserved-deletes viaFIELD_NO_DELETE_UNLESS_NUMBER_RESERVED, which is the right strictness for config protos..gitlab-ci.yml: validate-stage hardening. Addstest:bench-regression(benchstat MR-vs-target, hard-fail onB/opandallocs/opdeltas, soft-report onsec/op),test:fuzz(-fuzztime=30sper Fuzz target),lint:migration-ordering,lint:migrations,jet:generate-check, and tightensbuf:lint/generate-check/breaking. Both bench and fuzz are gated bychanges:rules oninternal/{auth,middleware,observability}/**/*.goso they don't run on this MR (which adds no Go packages)..gitignore: adds.tmp/,bin/,bench/.lychee.toml: adds one private-GitLab exclude.docs/dev/configuration.md: Donkey to Packhorse rename.docs/plans/TEMPLATE.md: clarification on test-file scoping.
From database (19-oci-database)
.gitlab-ci-asdf-versions.yml,.gitlab-ci-other-versions.yml: dev-tooling version pins (consumed by main.gitlab-ci.yml)..markdownlint-cli2.yaml,.yamllint.yaml: lint configs.
From format (19-oci-format)
docs/plans/2026-04-28-oci-local.md: the OCI-local plan file. Lives at the repo root rather than on!109's branch per the project memory's code-first ADR workflow agreement.docs/dev/oci-spec-gaps.md: S12 spec-gap journal. Appended to during implementation. The initial entries are already documented.docs/dev/README.md: index update to surface the spec-gaps doc.
From wiring (19-oci-wiring)
docs/specs/README.md: one-line refresh.
What's deliberately excluded
- Caproni files (
caproni/,caproni.yaml, plus the caproni-supporting.air.toml,.fairway/manifest.yaml,scripts/chart-gen.sh). All of these land via !59 (merged) per Step 14 ofdocs/plans/2026-04-28-oci-local.md("Caproni integration (cherry-pick from MR !59 (merged))"). They live in the downstream branches today as a stale leftover from a foundation cherry-pick that was undone inf7cda56. internal/datastore/migrations/sql/*.sql: domain-specific schema, stays in MR-2.internal/format/oci/testdata/fuzz/...: fuzz seed corpus, stays in MR-4.scripts/conformance/*and theconformance:ociCI job: coupled tocmd/registry, stays in MR-5.go.mod/go.sum: kept with the code that consumes the deps so each downstream MR is independentlygo mod tidy-clean.
Test plan
- CI green on this MR (build, vet, lint:markdown, lint:links, buf:lint, buf:generate-check, buf:breaking).
-
lint:migration-ordering,lint:migrations,test:bench-regression,test:fuzz,test:integration,jet:generate-checkall skip viachanges:rules (no Go, SQL, or migrations changed). -
go build ./...,go vet ./...,go mod tidyare no-ops locally (verified). -
buf lintandbuf generateare no-ops against the committedgen/(verified).