docs(argocd): the app-of-apps header told maintainers to delete the AppProject this repo now owns - #779
Merged
Merged
Conversation
…ppProject this repo now owns deploy/argocd/project.yaml has landed — the `fuzefront` AppProject is decentralised into this repo like the rest of the family. The app-of-apps header still said the opposite: # NOTE: the `fuzefront` AppProject is owned & provisioned by FuzeInfra # (FuzeInfra#99). # Do NOT apply a fuzefront AppProject from this repo — re-applying a stale # copy would re-widen prod cross-namespace access to fuzeinfra (issue #502). As written that instructs a maintainer to refuse to apply, or to delete, the very file that now carries the isolation boundary. FuzeInfra#99 established the RULE, not the file's location: `fuzeinfra` is never a destination for a consumer project. That rule travels with deploy/argocd/project.yaml and is restated at length in its header. Issue #502 was a stale, WIDER copy being re-applied; the in-repo copy is strictly NARROWER than FuzeInfra's (clusterResourceWhitelist is Namespace-only, not `*/*`), so applying it cannot re-widen anything. Also records why `project: fuzefront` matters at all: an Application left on `project: default` resolves against the permissive cluster-wide project and never consults the narrow one — the AppProject then exists as a file and enforces nothing. That is the fleet-wide defect this change is a companion to (FuzePlan#197, FuzeExecutive#41). Comment-only. No rendered Kubernetes object changes; verified the manifest still parses to exactly one Application (fuzefront-apps, project fuzefront, destination namespace argocd). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GaPa3JgrVNtWrGvqQEAEqv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
This came out of a fleet-wide audit of the "narrow AppProject landed, but the Applications still say
spec.project: default" defect. FuzeFront itself is clean on that count — all five Applications already referenceproject: fuzefront:spec.projectdeploy/argocd/app-of-apps.yamlfuzefrontdeploy/argocd/applications/fuzefront.yamlfuzefrontdeploy/argocd/applications/fuzefront-sealed.yamlfuzefrontdeploy/argocd/applications/unleash.yamlfuzefrontFuzeQuality/deploy/argocd/fuzequality.yamlfuzefrontWhat is not clean is the header of
app-of-apps.yaml.The defect
deploy/argocd/project.yamlhas landed — thefuzefrontAppProject is decentralised into this repo like the rest of the family. The app-of-apps header still said the opposite:As written, that instructs a maintainer to refuse to apply — or to delete — the very file that now carries the isolation boundary. It is a directive, in the first thing anyone reads in this directory, pointing the wrong way.
Why the old warning no longer applies
FuzeInfra#99 established the RULE, not the file's location. The rule is:
fuzeinfrais never a destination for a consumer project. That rule travels withdeploy/argocd/project.yamland is restated at length in its own header.fuzeinfrais absent from itsdestinations.Issue chore(argocd): delete deploy/argocd/project.yaml — FuzeInfra owns the fuzefront AppProject (prod-isolation landmine) #502 was a stale, WIDER copy being re-applied. The in-repo copy is strictly narrower than FuzeInfra's:
argocd/projects/fuzefront.yamldeploy/argocd/project.yamlclusterResourceWhitelistgroup: "*", kind: "*"group: "", kind: NamespacefuzeinfradestinationApplying the narrower copy cannot re-widen anything. It is the wildcard whitelist — which could create ClusterRoleBindings and CRDs, and, with the
argocddestination, rewrite AppProjects including itself — that the in-repo copy removes.FuzeInfra's copy is pending deletion (FuzeInfra#625). Until that lands both exist and registration is last-write-wins; the new header says so plainly instead of implying only one is legitimate.
Whitelist re-derivation (checked, not assumed)
clusterResourceWhitelist: Namespaceonly is correct for this repo — everykind:rendered by all three charts:deploy/helm/fuzefrontdeploy/helm/unleashFuzeQuality/deploy/helm/fuzequalityRole/RoleBindingare namespaced, not cluster-scoped.Middleware(Traefik) is namespaced. The one cluster-scoped kind,Namespace, is exactly what the whitelist permits. No whitelist change is needed and none is made here — this PR does not touchproject.yamlat all.Also recorded in the header
Why
project: fuzefrontmatters at all: an Application left onproject: defaultresolves against the permissive cluster-wide project and never consults the narrow one — the AppProject then exists as a file and enforces nothing. That is the fleet-wide defect this is a companion to (FuzePlan#197, FuzeExecutive#41).Scope and risk
Comment-only. No rendered Kubernetes object changes. Verified the manifest still parses to exactly one Application —
fuzefront-apps,project: fuzefront,destination.namespace: argocd.No
auto-mergelabel, deliberately:masterhere is deploy-on-push, and this repo's rule is to merge in a deploy window rather than bot-merge. Left as PENDING-REVIEW for the owner.🤖 Generated with Claude Code
https://claude.ai/code/session_01GaPa3JgrVNtWrGvqQEAEqv
Generated by Claude Code