I wanted to know how Glidepath holds up against the delivery tools most teams already use, so I read it the way a reviewer would: the code, the ADRs and the docs, across every repo it touches. Each finding below says whether it holds today, so a design that is built is never mistaken for one that is enforced.
A developer writes one cicd.yaml. Pipelines-as-Code starts the first stage from a GitHub webhook, and every later stage starts on the previous stage's CDEvent through a broker that authenticates with the pod's own ServiceAccount token. Ground environments get a direct bot commit. Flight environments only change when a PR on gitops-<app> merges and that cluster's Argo CD pulls it.
Against what teams usually expect from GitHub Actions, GitLab CI or a commercial delivery platform.
| Workflow | Support | Why |
|---|---|---|
| Trunk-based: push to main, deploy to dev | Good | Path filters, multi-arch builds, unit tests, then a dev deploy that waits until the Rollout is healthy. |
| Tag-driven release | Good | tagPattern regex; the version comes from the tag. |
| PR validation | Partial | The PR build gets a native check. Test, deploy and scan results never reach the PR. Unit tests return pass or fail only: no JUnit, no coverage. |
| PR preview environments | Partial | A real ApplicationSet with a TTL sweep. Needs a label, skips opened, has no URL (port-forward only). |
| Promotion dev to staging to prod | Partial | Gated PR per environment, but the next one starts when the PR opens, not when staging is healthy. |
| Rollback | Partial | A gated PR to one of the last five healthy releases. Manual, minutes to tens of minutes; live verification still pending. |
| DORA and delivery insight | Partial | No environment label, Ground and cloud deploys not counted, lead time starts at build. MTTR is marked experimental. |
| Integration and e2e tests | Weak | Testkube with a 10 minute cap. No matrix, no retries, no environment URL passed in. A missing test reports success. |
| Release branches and GitFlow | Weak | A push trigger matches the branch exactly, so branch: release/* on push never fires. |
| Non-Kubernetes targets | Experimental | ECS, Lambda and Azure Container Apps are render-tested. The one live ECS run failed. |
| Approvals and change management | Not enforced | GitHub Free does not enforce rulesets on private repos. The bypass alert fires after merge. ITSM, QA and policy gates always pass. |
| Progressive delivery, auto-rollback | Missing | Default canary is one setWeight: 100 step. Analysis needs metrics nobody scrapes, and a query with no data passes. |
| Hotfix track, freezes, scheduled releases | Missing | Nothing in the schema or the catalog. |
| Monorepo | Missing | Repo name must equal app name, build context is the repo root, one image per app. |
| Cron, manual dispatch, ChatOps | Missing | No triggers for them. /retest <gate> re-runs nothing (gap 20). |
| Feature flags and DB migrations | Missing | No flag system. Migrations are Helm pre-upgrade Jobs with no gating and no rollback path. |
Revised the same day: the production roadmap moved approvals and change management from Not enforced to Partial. The install already requires a ruleset on every gitops repo; it's the lab's GitHub Free plan that leaves it unenforced.
The pull model between clusters is sound: nothing on dev holds prod credentials, and prod only changes from a merged commit. Everything else that makes delivery observable and governable runs on the dev cluster.
One validated file, scaffolded rather than hand-written. Developers never write Tekton, and preflight rejects a bad config before anything runs.
Tekton Chains signs keylessly through a self-hosted Fulcio and Rekor, Conforma checks the provenance, SBOMs are cosign attestations, and Semgrep fails closed when on.
Each upper cluster runs its own Argo CD and pulls. The GitHub App key stays in one namespace, and a broker mints tokens for one repo at a time.
One OTel trace per flow across separate PipelineRuns, CDEvents throughout, a release state machine fed by Rollout facts, and stall detectors.
Plain-language deployment diagnosis, Rollout controls, rollback as a PR, config edits as PRs, and a recorded break-glass shell anchored in Rekor.
25 ADRs, a known-gaps log with evidence for each entry, stubs labelled as stubs, and live runs kept apart from render-only checks.
main default branch.deploy.target user).testkube namespace, next to developer-written TestWorkflow YAML..tekton/*.yaml files in an app repo would run as the pipeline identity, outside the platform's control.Move to a GitHub plan that enforces rulesets, or add a pre-merge admission check or merge bot. Generate the ruleset from releaseGuardrails. Fail Flight releases when gate evidence is missing.
Post every chained stage as a GitHub check, parse JUnit and coverage, and fail the test stage when no test exists.
Scrape ingress metrics, make an analysis with no data fail, ship a default multi-step canary, and start production on staging health instead of PR open.
Glob matching on push, cron and manual triggers, PR path filters, build secrets and args, monorepo support, and a sanctioned custom-step hook.
Split the control plane from the dev workload cluster, give prod its own secrets path, add a CI check that the schema matches the toolbox image, and plan a BuildKit or Buildah replacement for kaniko.
I read code, ADRs and docs across glidepath, tower, airframe, apron and hangar. The highest-impact findings (push-branch matching, Testkube secret copying, the always-pass gates, the inert canary, the DORA labels) were checked directly in source. Nothing was run against a cluster; live behaviour comes from the repos' own verification notes.
Glidepath is about two months old, and its September 27, 2026 architecture review withholds production approval. So read the gaps as a roadmap, not a verdict on the design.