Docs · Airframe
Airframe: known gaps
Found in use on 2026-09-26/27 while creating baggage-api. Each has evidence, so it can be picked up later.
| # | Gap | Evidence | Direction |
|---|---|---|---|
| 1 | configMapGenerator: true on an ApplicationEnvironment adds a third ArgoCD source pointing at <cluster>/<env>/configmap, and nothing creates that folder. The Application fails with app path does not exist until someone adds it. Tower’s Config tab creates it only on the first config-file edit, which is too late. |
baggage-api-staging; unblocked by adding prod/staging/configmap/kustomization.yaml (PR #5 in gitops-baggage-api). |
The ApplicationEnvironment composition seeds configmap/kustomization.yaml (an empty generator named <app>-app-config, disableNameSuffixHash: true) when the flag is set, as a RepositoryFile with overwriteOnCreate: false and the same external-name adoption as values.yaml, so Tower’s later edits are never overwritten. Test it through a copy of the composition. Not built. |
| 2 | A brand-new Flight environment can fail its first sync and stay failed. The PreSync platform-outcome-presync Job needs the platform-outcome-hook ServiceAccount, which lives in a separate identity Application; on a first sync the two race. The old comment claimed selfHeal retries; it does not retry a failed operation. |
baggage-api-staging: error looking up service account ... not found, then Job was active longer than specified deadline. |
Fixed 2026-09-27: syncPolicy.retry (5 tries, 30 s doubling, 10 min cap) in the tenant-onboarding ApplicationSet in apron and gitops-cluster-prod. Also consider ordering the two Applications. |
| 3 | releaseTracking.relayHostAliasIP is written with the dev node’s status.hostIP, which the prod cluster cannot route to. baggage-api staging got the dev node’s IP <dev-node-ip>; the value that works is the host’s LAN IP <host-lan-ip>, which had been hand-fixed on flight-api and is overwritten by the next release. |
platform-outcome-syncfail Job timing out. Source: Glidepath open-release-pr.yaml (fieldRef: status.hostIP). |
The parked fix: a per-cluster relayHostAliasIP in the cluster registry entry, with hostIP as the fallback. Every release re-breaks the hand fix until this lands. |
| 4 | The Ground/Flight rollout: null bootstrap seed is now unnecessary (the chart guard covers it) but is still written by the composition. |
values-yaml.yaml in the ApplicationEnvironment composition. |
Leave until the composition is next touched; a past change to it wiped a live file. |