phase 1 core platform

CI Job Audit — Pre-Phase 2 Verification

Date: 2026-06-10 Purpose: Document what each CI job validates, false-positive risks, and mitigation status.

CI Job Audit — Pre-Phase 2 Verification

Date: 2026-06-10
Purpose: Document what each CI job validates, false-positive risks, and mitigation status.


Required checks (branch protection)

ContextWorkflow jobValidatesFalse-positive riskMitigation
repo-guardsrepo-guardsLayout, secrets, large filesLow
markdownlintmarkdownMarkdown styleLow
gitleakssecretsSecret scanLow
CodeQLcodeql.ymlStatic security analysisLow
trivytrivyFS vulnerability scanLow
osv-scan / osv-scanosv-scanDependency CVEsLow
semgrepsemgrep.ymlSAST rulesLow
golangci-lintgolangci-lintGo lint (packages + auth + proxy)Medium: weaker than cursor rulesIncremental linter enablement deferred
security-integrationsecurity-integrationM1.5.1 TestSecurity_* matrixWas critical: -run with 0 matches exits 0Pre-flight -list count ≥ 28
go-racego-raceUnit tests under -raceMedium: no integration + raceScheduled integration+race deferred
go-services (auth)go-services matrixUnit tests + gofmt + buildWas informationalPromoted; -count=1
go-services (proxy)go-services matrixUnit tests + gofmt + buildWas informationalPromoted; -count=1
proxy-auth-smokeproxy-auth-smokeFull proxy unit + integrationWas informationalPromoted; -count=1
banditbanditPython SASTHigh until memory service: exits 0 if missingNot required until services/memory exists
hadolinthadolintDockerfile lintLow (exits 0 if no Dockerfiles)
coveragecoverageMerged unit+integration Go coverage ≥80% on hand-written scope; Codecov uploadMedium: Postgres service requiredinfra/scripts/coverage-gate.sh filters packages/proto/gen/go

Informational checks (not merge-blocking)

JobNotes
auth-validate-smokeAuth integration; -count=1
proxy-agent-verify-smokeSEC-2/SEC-3 subset; explicit -run + count guard
db-migrate-smokeMigration idempotency
proto-contractBuf contract tests
buf-lintSkips buf breaking without main baseline
compose-validateCompose config syntax
dependency-reviewPR dependency policy
sbomSBOM generation
CodeSceneAdvisory code health

Known deferrals

  • golangci-lint does not yet enable gocyclo/funlen/gosec from cursor rules
  • infra/ Go packages not in golangci scope
  • Merged integration coverage in Codecov via CI Postgres service; gen/go excluded from gate
  • Python (bandit) and TypeScript coverage flags when services land

Trunk Flaky Tests (JUnit uploads)

All CI jobs that run go test emit JUnit XML via gotestsum and upload results to Trunk Flaky Tests (org: ibexharness). Uploads are informational (continue-on-error: true); they do not block merges.

ConventionValue
JUnit output dirtest-results/junit/ (gitignored; created by scripts at runtime)
Test runner wrapperinfra/scripts/go-test-gotestsum.sh <out.xml> -- [go test args...]
Upload scriptinfra/scripts/trunk-upload-junit.sh
Composite actions.github/actions/setup-gotestsum, .github/actions/trunk-upload-junit
SecretsTRUNK_API_TOKEN, TRUNK_ORG_URL_SLUG
RetriesNone — callers must pass -count=1

Variants (Trunk --variant): proto-contract-unit, proto-contract-integration, db-migrate-unit, db-migrate-integration, auth-smoke-unit, auth-smoke-integration, proxy-auth-unit, proxy-auth-integration, proxy-agent-verify-unit, proxy-agent-verify-integration, security-integration, go-race, go-services-auth, go-services-proxy, coverage-unit, coverage-integration.

Local validation (Linux/macOS or WSL):

bash
go install gotest.tools/gotestsum@latest
bash infra/scripts/go-test-gotestsum.sh test-results/junit/local-validate.xml -- \
  -count=1 ./packages/reqid/...
bash infra/scripts/trunk-validate-junit.sh test-results/junit/local-validate.xml

Future frameworks (Python pytest --junitxml, Jest, etc.): write JUnit XML into test-results/junit/ with distinct filenames and reuse .github/actions/trunk-upload-junit — no workflow rewrite required.

Manual ops

After promoting checks, apply .github/branch-protection-main.json on GitHub repository settings.

Edit on GitHub

Last updated on

On this page

0%