fix: address review findings on the conventions branch

- ci: reject a manual dispatch with tag "latest"; concurrency group per tag
- Dockerfile: declare GIT_COMMIT after the module download layer
- Makefile: docker-build targets linux/amd64 by default
- patch.go: no shared package-level pointers; main.go: no init()
- tests: assert that merge replaces managed listener content
- docs: flows.md startup section matches main.go; review saved to docs/reviews

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 20:43:02 +02:00
co-authored by Claude Opus 5.5
parent 8c074288c6
commit 60360ca5b9
10 changed files with 138 additions and 40 deletions
@@ -0,0 +1,56 @@
# Review: house conventions port
**Created:** 2026-10-08 20:40 CEST
**Scope:** `main...feat/house-conventions` at `8c07428` (7 commits)
**Reviewers:** `operator-reviewer`, `go-operator-reviewer`
Both reviewers ran `make check` and `go test -race ./...` (green) and confirmed the
branch changes no reconcile behaviour. No merge-blockers.
## Worth fixing
- [x] `build.yaml`: a manual dispatch with the default `tag: latest` overwrote
`:latest`, the tag the Deployment runs. Default removed; `latest` is rejected.
(Inherited from the egress workflow, which still has it.)
- [x] `Dockerfile`: `ARG GIT_COMMIT` sat above `go mod download`, so every commit
re-downloaded all modules. Moved to just above the build.
- [x] `patch_test.go`: `TestMergeListeners_ownership` compared names only; a
mutation that kept stale listener content passed. Added
`TestMergeListeners_replacesManagedContent`.
- [x] `make docker-build` followed the host architecture (arm64 on this Mac, where
the Dockerfile used to hard-code amd64). Now builds `linux/amd64` by default.
- [x] `docs/flows.md` §2 described the old `main.go` (line refs, hardcoded dev
logger, no `--version`). Rewritten against the current file.
- [x] `CLAUDE.md` overstated the reverse watch. Reworded.
- [x] `build.yaml`: two dispatches from the same ref shared a concurrency group and
cancelled each other. Group now includes the tag input.
## Simplifications
- [x] `patch.go`: package-level `tlsModeTerminate` / `namespacesFromAll` were shared
by address across every listener. Replaced with `ptrTo(...)`; `defaultPort` is a
const.
- [x] `main.go`: `init()` removed, scheme built in `main()` (CLAUDE.md says no
`init()`).
- [x] `Makefile` comment claimed the lint toolchain pin "matches CI"; CI does not
lint. Claim dropped.
- [ ] `TestListenerNameFor_sanitizesDots` tests an unexported helper and overlaps the
names table. Kept as the home for truncation and collision cases in the bug-fix
phase.
## Deferred to the bug-fix phase (new, not in the plan's backlog)
- [ ] Empty desired set: when a Gateway has only `auto-*` listeners and no cert
yields any, `MergeListeners` returns nil and the patch sends `listeners: null`,
which the API server rejects (`MinItems=1`). Permanent error requeue. Any fix for
"last cert deleted" runs straight into this. `patch.go` `MergeListeners`,
`certificate_controller.go:119-120`.
- [ ] Listeners are added before the Certificate is Ready, so they reference a
Secret that may not exist yet.
- [ ] ClusterRole grants `events` create/patch; nothing records events.
- [ ] CI `check` job has no golangci-lint and no `-race`. Needs a linter install
step on the runner (uh-cli does it from a pinned tarball).
## Nice-to-have
- [x] Assert the secret ref `Group` in `TestBuildListenersFromCertificates_listenerFields`.