The SDLC review told me where Glidepath falls short. Reading it back, I realized some of those gaps were my lab, not the design. So this sorts every weakness the review found by cause, then orders the work in three lanes, so a production install is never blocked on a feature it doesn't need.
The review rated approvals and change management as not enforced. That was the lab, not the architecture. Glidepath's install requires a GitHub ruleset on every gitops repo, generated from releaseGuardrails, with two approvals and every gate as a required check. In an organization, one ruleset covers gitops-*. The lab runs on GitHub Free, where private-repo rulesets exist but are not applied.
Revised rating: Partial. The ruleset would block, but three of its required checks always pass, and the September 27, 2026 audit found that non-release PRs and bot commits would be stuck the day it is switched on. Item T1 fixes that.
Each weakness from the review falls into one of three groups, and each group needs different work.
Specified in the architecture; the lab substitutes something weaker. The work is to write it down and verify it.
In the architecture, but would break the day the ruleset is enforced.
Missing whatever the environment. Needs new design.
| Weakness from the review | Kind | Roadmap item |
|---|---|---|
| Approvals and required checks don't block a merge | Lab-bound | P1 · T1 |
| NetworkPolicy is a no-op on the dev CNI | Lab-bound | P1 |
| Prod reads secrets from a dev-hosted store over a NodePort | Lab-bound | P1 · P2 |
| Webhook arrives through a tunnel and port-forward | Lab-bound | P1 |
| No Prometheus on the upper cluster | Lab-bound | P1 · T3 |
| Required checks never report on non-release PRs | Fix before enforcing | T1 |
| Bot bootstrap commits would be refused by the ruleset | Fix before enforcing | T1 |
/retest <gate> re-runs nothing | Fix before enforcing | T1 |
| Bypass alert not yet proven against a real bypass | Fix before enforcing | T1 |
| ITSM, QA and policy gates always pass | Design gap | T2 |
| A scan that never ran counts as a pass | Design gap | T2 |
| No signature check at admission | Design gap | T2 |
| No secret, dependency or license scanning | Design gap | T2 |
| Test secrets copied into the shared Testkube namespace | Design gap | T2 |
Extra .tekton files run unchecked | Design gap | T2 |
| Inert canary; analysis passes on no data | Design gap | T3 |
| Next environment starts when the PR opens | Design gap | T3 |
| DORA has no environment, skips Ground and cloud | Design gap | T3 |
| Chained stages never report to the PR; no test reports | Design gap | D1 |
| Missing test file reports success | Design gap | D1 |
| Push branch globs never match; no cron or manual runs | Design gap | D2 |
| No build secrets or build args; cache misses Python and Go | Design gap | D2 |
| Closed stage graph, fixed agents, no monorepo | Design gap | D3 |
| Control plane shares a cluster with Ground | Design gap | P2 |
| Kaniko archived; amd64 Go builds crash under QEMU | Design gap | P3 |
| Hardcoded to GHCR and GitHub; cloud targets unverified | Design gap | P3 |
| No migration or feature-flag story | Design gap | P3 |
Three lanes that can move independently, each with three horizons. Within a lane, order matters: T2 adds required checks, so T1 must first make sure every check reports. Across lanes, P1 writes down the profile that T1 and P2 verify against.
Each item names the review findings it closes and a test that says when it is done.
Fix before enforcing
main, passing at once when the head is not a release-* branch.detect-bypass-merge against a real bypass merge in the lab.hack/apply-guardrail-ruleset.sh generates the ruleset from releaseGuardrails.Done whenOn an org with rulesets enforced, a release PR merges green, a resync PR and a Tower Config PR merge with no bypass, a bot bootstrap commit lands, and a failing gate blocks.
github-ruleset.md audit 1 to 3 · gaps 15, 16, 20
Design gap
change.created and pass on approval. QA: read the test stage's recorded outcome for the digest. Policy: Conforma or Kyverno CLI over the rendered manifests.production: true environment, a missing scan fails instead of passing..tekton files the platform did not generate.Done whenNo entry in releaseGuardrails is a stub, and an unsigned image is refused by the upper cluster.
governance-gate-stub.yaml · verify-sast-attestation.yaml · run-testworkflow.yaml
Design gap
change.created.Done whenA bad image in staging aborts itself and the prod release PR never opens.
airframe/analysis · rollout.yaml · dora-exporter
Design gap
opened when the label is already there, and give each preview an ingress URL.Done whenA PR shows build, test and preview checks with test counts and a link to the running preview.
gap 7 · run-tests.yaml · ephemeral-envs.yaml
Design gap
branch.created already has.Done whenA release/* branch flow, a nightly job and a build against a private package registry all work from cicd.yaml.
deliver-onboarding-files.yaml:498 · build-source.yaml
Design gap
Done whenA team adds a custom step with no platform change, and two apps build from one repo.
ADR-0017 · stage-preflight.yaml
Lab-bound
Done whenAn installer can tell a lab install from a production one by running one check.
security.md "Known, accepted gaps" · infisical-nodeport.yaml · gap 8
Lab-bound
Done whenLosing the dev workloads cluster leaves pipelines, release records and prod secrets untouched.
ADR-0024 "Future" · gap 39
Design gap
ghcr.io and api.github.com in Task scripts.Done whenThe same app builds to a non-GHCR registry and releases to ECS with a release record.
gaps 33, 36 to 38 · build-image.yaml
The production profile keeps what the review found sound, Argo CD on each upper cluster pulling merged commits, and replaces each lab shortcut with a real endpoint.
Hangar's own cost essay warns that operating 47 tools is the platform's real limit. For one engineer, these can wait until a second team asks:
Sources: the Glidepath SDLC review, glidepath/docs/admin/github-ruleset.md (the September 27, 2026 audit), the security.md known gaps, known-gaps.md, ADR-0024, and Apron's Infisical NodePort notes. Effort estimates are judgement, not measurement. The lab-bound items come from what the architecture already specifies; nothing here was verified on an enforcing GitHub plan.