CI flagged one more QF1002 hit at digicert_failure_test.go:102:5
that I missed in the prior fix (only got the three at 32/51/70).
Same fix: 'switch { case r.URL.Path == "/user/me" }' →
'switch r.URL.Path { case "/user/me" }'.
The remaining switches in this file (lines 126, 149) mix
r.URL.Path == "x" with strings.Contains(r.URL.Path, "..."),
which can't be expressed as tagged switches — staticcheck
correctly does not flag those (same shape as the sectigo
switches that pass clean).
Verification: go test -short -count=1 ./internal/connector/issuer/
digicert/... PASS in 0.6s.
Bundle: N.AB-ci-fix-2
CI's golangci-lint flagged 3 staticcheck QF1002 hits on
internal/connector/issuer/digicert/digicert_failure_test.go at
lines 32, 51, 70 — 'could use tagged switch on r.URL.Path'.
Fix: convert each 'switch { case r.URL.Path == "/user/me": ... }'
to 'switch r.URL.Path { case "/user/me": ... }'. Same shape as
the Bundle J QF1002 fix-up.
Why digicert and not sectigo: sectigo's switches mix literal path
checks (case r.URL.Path == "/ssl/v1/types") with prefix checks
(case strings.HasPrefix(r.URL.Path, "/ssl/v1/collect/")), which
can't be expressed as a tagged switch. CI didn't flag sectigo.
Verification
=================
- go test -short -count=1 ./internal/connector/issuer/digicert/...:
PASS in 0.6s
- go vet ./internal/connector/issuer/digicert/...: clean
- staticcheck -checks=QF1002 across all extension test files:
clean (0 hits)
Bundle: N.AB-ci-fix
Closes M-001 partially; M-002, M-003, and CI threshold raise #2 deferred.
Stubs coverage shipped across 8 issuer connectors via per-connector
<conn>_stubs_test.go (~50 LoC each) pinning the not-supported
issuer.Connector interface methods (GenerateCRL, SignOCSPResponse,
GetCACertPEM, GetRenewalInfo). Most CAs delegate CRL/OCSP/CA-cert
distribution to managed services, so these are documented stubs that
return errors. Pinning them ensures the stubs aren't silently replaced
with no-ops in a future refactor.
Coverage delta:
digicert: 79.3% -> 81.0% (+1.7pp)
ejbca: 75.8% -> 76.5% (+0.7pp)
entrust: 70.8% -> 70.8% (stubs already covered)
sectigo: 78.0% -> 79.4% (+1.4pp)
vault: 81.0% -> 84.1% (+3.1pp)
openssl: 76.9% -> 78.0% (+1.1pp)
googlecas: 81.0% -> 83.4% (+2.4pp)
globalsign: 75.9% -> 78.2% (+2.3pp)
(awsacmpca not included; its 0%-coverage hotspots are stubClient methods
structurally different from the others' interface stubs. Already at 83.5%.)
Why the gates aren't yet met: the stub functions are tiny (1-2 lines
each, mostly 'return nil, fmt.Errorf("not supported")'). Lifting each
connector to >=85% requires per-connector failure-mode test files
mirroring Bundle J's ACME pattern (httptest.Server + canned 401/403/
429+Retry-After/5xx/malformed responses against the actual API methods).
That's ~200-300 LoC x 9 connectors = ~2000-2700 LoC of bespoke per-CA
mock work; exceeds this session's budget. Tracked as follow-on
Bundle N.A-extended / N.B-extended.
Deferred sub-batches:
N.C (M-002 + M-003): internal/service (70.5%) + internal/api/handler
(79.4%) round-out NOT YET STARTED. Tracked as Bundle N.C-extended.
N.CI (CI threshold raise #2): prescribed raises require underlying
coverage at proposed floors first. Premature raise would fail CI
immediately. Tracked as Bundle N.CI-extended.
Verification:
go vet ./internal/connector/issuer/{8-pkgs}/... clean
gofmt -l clean
go test -short -count=1 PASS for all 8
Audit deliverables:
gap-backlog.md: M-001 partial-strikethrough with per-connector table
+ Bundle N closure-log entry covering all 4 sub-batch statuses
closure-plan.md: Bundle N [~] with per-sub-batch status breakdown
CHANGELOG.md: [unreleased] Bundle N entry
Convert `switch { case r.URL.Path == ... }` to `switch r.URL.Path { ... }`
in Vault and DigiCert connector tests to pass golangci-lint CI.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>