Sweeping the 24 repos that call the shared go-ci.yml / js-ci.yml, six have no pull_request trigger on their thin caller. None of them scans main on push either. So for a quarter of the fleet, the shared lint, test and nox security gate run only on release tags — or, for senat-os, only when someone clicks the button.
| Repo |
Triggers on ci.yml |
Effect |
| pet-medical-www |
push: tags [v*], workflow_dispatch |
tags only |
| brotwerk |
push: tags [v*], workflow_dispatch |
tags only |
| rollops-studio |
push: tags [v*], workflow_dispatch |
tags only |
| kraftsport-coach |
push: tags [v*], workflow_dispatch |
tags only |
| senat-os |
workflow_dispatch only |
never runs automatically |
| lexora |
push: tags [v*], workflow_dispatch |
fixed in klarlabs-studio/lexora#25 |
The other 18 have pull_request and are fine.
Why this is worse than "CI is a bit thin there"
In lexora the gap was load-bearing for a decision. Its security.yml deleted the repo's own nox job with this justification:
the former nox security-gate job was removed — it duplicated the shared go-ci Security (nox) job … Code scanning is gated there on every PR/push
The premise was false for that repo: the shared job was not wired to PRs at all. A working local gate was removed in favour of one that essentially never ran. It is worth checking whether the same reasoning was applied to any of the other five.
This also compounds with #47: even on the rare tag build, any repo whose .nox.yaml sets output.format produced no findings.json, so the gate step skipped — and a skipped step is green.
Suggested rollout
I deliberately did not open five more PRs. These repos have never been PR-gated, so enabling the trigger may light up lint, test and security failures all at once, and each needs a human deciding what is worth fixing versus baselining.
lexora#25 is the pilot — it adds the trigger and the checks on that PR are the first real evidence of what happens. Recommend:
- Land lexora#25, see what the shared CI actually says about a previously ungated repo.
- Roll the trigger out to the remaining five one at a time, worst-first, rather than in a batch.
- senat-os probably deserves a look beyond the trigger — a repo whose CI has only ever run manually is unlikely to be green.
The one-line change in each case is:
on:
pull_request:
branches: ["main"]
push:
tags: ["v*"]
workflow_dispatch: {}
matching armada, dispatch and bolt.
Sweeping the 24 repos that call the shared
go-ci.yml/js-ci.yml, six have nopull_requesttrigger on their thin caller. None of them scansmainon push either. So for a quarter of the fleet, the shared lint, test and nox security gate run only on release tags — or, for senat-os, only when someone clicks the button.ci.ymlpush: tags [v*],workflow_dispatchpush: tags [v*],workflow_dispatchpush: tags [v*],workflow_dispatchpush: tags [v*],workflow_dispatchworkflow_dispatchonlypush: tags [v*],workflow_dispatchThe other 18 have
pull_requestand are fine.Why this is worse than "CI is a bit thin there"
In lexora the gap was load-bearing for a decision. Its
security.ymldeleted the repo's own nox job with this justification:The premise was false for that repo: the shared job was not wired to PRs at all. A working local gate was removed in favour of one that essentially never ran. It is worth checking whether the same reasoning was applied to any of the other five.
This also compounds with #47: even on the rare tag build, any repo whose
.nox.yamlsetsoutput.formatproduced nofindings.json, so the gate step skipped — and a skipped step is green.Suggested rollout
I deliberately did not open five more PRs. These repos have never been PR-gated, so enabling the trigger may light up lint, test and security failures all at once, and each needs a human deciding what is worth fixing versus baselining.
lexora#25 is the pilot — it adds the trigger and the checks on that PR are the first real evidence of what happens. Recommend:
The one-line change in each case is:
matching armada, dispatch and bolt.