Problem
go-ci.yml (added in #52) ships with no workflow-level execution test. self-test.yml only runs vitest, which covers the classifier (classify-pr.mjs) — it never invokes any reusable lane (node-ci/python-ci/go-ci). So the 200-line go-ci.yml shell (module discovery, go build/go vet/go test, exclude-modules) has never run in Actions. Its discovery logic was validated only by running snippets manually on a local Windows tree; shellcheck wasn't run.
This is the reason the v1 retag can't be de-risked today: there is nowhere for the Go lane to prove itself before a consumer (archon) depends on it via @v1.
Fix
Add self-test-go.yml that calls ./.github/workflows/go-ci.yml (local relative ref → tests the in-PR version) against committed fixture Go modules under test/fixtures/go/:
alpha/ — valid module with a passing test → proves discovery + go build + go vet + go test all execute.
beta/ — second valid module → proves multi-module discovery.
excluded/ — intentionally non-compiling module passed via exclude-modules → if exclusion regresses, the broken module builds and the job goes red. Self-validating proof that exclude-modules actually skips.
Trigger on changes to go-ci.yml, the fixtures, and the self-test itself.
Why now
Unblocks the v1 retag with real confidence, then archon #145 Phase 3 can consume the Go lane via @v1. Closes the self-test gap #52 shipped with, permanently.
Verification
self-test-go job green in CI (the Go lane actually runs).
- Fixtures verified locally (
go build/go vet/go test) before push.
Problem
go-ci.yml(added in #52) ships with no workflow-level execution test.self-test.ymlonly runsvitest, which covers the classifier (classify-pr.mjs) — it never invokes any reusable lane (node-ci/python-ci/go-ci). So the 200-linego-ci.ymlshell (module discovery,go build/go vet/go test,exclude-modules) has never run in Actions. Its discovery logic was validated only by running snippets manually on a local Windows tree; shellcheck wasn't run.This is the reason the
v1retag can't be de-risked today: there is nowhere for the Go lane to prove itself before a consumer (archon) depends on it via@v1.Fix
Add
self-test-go.ymlthat calls./.github/workflows/go-ci.yml(local relative ref → tests the in-PR version) against committed fixture Go modules undertest/fixtures/go/:alpha/— valid module with a passing test → proves discovery +go build+go vet+go testall execute.beta/— second valid module → proves multi-module discovery.excluded/— intentionally non-compiling module passed viaexclude-modules→ if exclusion regresses, the broken module builds and the job goes red. Self-validating proof thatexclude-modulesactually skips.Trigger on changes to
go-ci.yml, the fixtures, and the self-test itself.Why now
Unblocks the
v1retag with real confidence, then archon #145 Phase 3 can consume the Go lane via@v1. Closes the self-test gap #52 shipped with, permanently.Verification
self-test-gojob green in CI (the Go lane actually runs).go build/go vet/go test) before push.