Files
certctl/.github/workflows
shankar0123 96ebc7bf06 Bundle I-001-extended (Coverage Audit Extension): test-naming guard promoted to hard-fail with relaxed convention
Promotes the .github/workflows/ci.yml test-naming convention guard
from informational (continue-on-error: true) to hard-fail. The
convention itself is RELAXED to match Go's standard test-runner
pattern rather than the audit's overly-strict triple-token form.

Why the relaxation
==================
The original I-001 prescription was Test<Func>_<Scenario>_<ExpectedResult>.
Re-running the original guard against HEAD found 167 non-conformant tests,
nearly all legitimate single-function pin tests like TestNewAgent /
TestSplitPEMChain / TestParsePEMFile. These follow Go's standard
convention (single Test+Func name; sub-cases via t.Run subtests) and
renaming all 167 is non-functional churn.

The audit's prescription is preserved in docs/qa-test-guide.md as
RECOMMENDED for parameterized scenarios (e.g. TestEncrypt_NilKey_ReturnsError),
but not gated repo-wide.

What the new guard catches
==========================
The hard-fail guard now flags tests Go's runtime would silently SKIP:
 where the first letter after 'Test' is LOWERCASE. Go's
testing.T runner requires Test[A-Z]; tests starting with lowercase
just never run. That's a real bug a CI gate should prevent — the
relaxed pattern catches genuine breakage rather than stylistic drift.

Verification
==========================
- python3 yaml.safe_load on ci.yml: OK
- grep -rnE '^func Test[a-z]' --include='*_test.go' . : 0 hits at HEAD
  (guard is clean to flip to hard-fail)
- Existing 167 single-Function pin tests remain unchanged

Audit deliverables
==========================
- gap-backlog.md I-001 row: full strikethrough + closure note
  documenting the relaxation rationale
- extension-progress.md: I-001-extended marked DONE with rationale

Closes: I-001 (test-naming guard hard-failed at relaxed pattern)
Bundle: I-001-extended (Coverage Audit Extension)
2026-04-27 19:09:49 +00:00
..