Skip to content

Documented no-KSail validation fallback validates zero base manifests #3151

Closed

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

AGENTS.md prescribes a no-KSail fallback for manifest validation, in both the Validation section
and the agent-facing Maintenance section:

Without KSail, both overlays MUST build: kubectl kustomize k8s/clusters/local/ and
kubectl kustomize k8s/clusters/prod/

That command does not validate manifests. Measured on main today:

$ kubectl kustomize k8s/clusters/local/ | yq -r '[.kind, .metadata.name] | join("  ")'
Kustomization  apps
Kustomization  bootstrap
Kustomization  infrastructure
Kustomization  infrastructure-controllers

$ kubectl kustomize k8s/clusters/local/ | grep -c 'auth-proxy\|oauth2-proxy\|cluster-policies'
0

It emits 4 documents — the Flux Kustomization wiring only — and zero base manifests. For
comparison, ksail workload validate on the same tree validates 465 files under bases/.

This is by design: k8s/clusters/ overlays only wire the four Flux Kustomizations, and the actual
manifests are delivered as an OCI artifact and reconciled by Flux. The build succeeding says nothing
about the files a change actually touched.

Impact

The failure is silent and points the wrong way. An agent or contributor without KSail installed edits
something under k8s/bases/**, runs the documented fallback, sees both overlays build, and concludes
the change is validated — when none of it was parsed. A malformed base manifest reaches CI (or a
reviewer) carrying an explicit local "validated" claim.

I hit this today on #2723: after editing k8s/bases/infrastructure/controllers/auth-proxy/config-map.yaml,
both overlays built cleanly and a grep for my own change in the rendered output returned 0. Only
running ksail workload validate and then grepping its log for the changed path proved the file was
actually covered.

Expected behaviour

The documented fallback should either validate the manifests it implies, or say plainly that it does
not and name what it does cover.

Acceptance criteria

  • AGENTS.md no longer presents kubectl kustomize k8s/clusters/{local,prod} as validation of
    changed manifests; it states that this builds only the Flux Kustomization wiring.
  • A no-KSail path that genuinely parses changed base manifests is documented (e.g. building the
    provider overlay that actually includes them, and/or kubectl apply --dry-run=client -f <file>
    per changed file, which the doc already mentions separately).
  • The guidance tells the reader to confirm coverage — grep the validator's output for the
    changed path — rather than trusting a zero-exit.
  • Both the Validation and Maintenance sections are corrected (the claim appears in both).

Rough size: small — a documentation fix plus verifying the replacement command actually covers a
changed base file.

Activity

  1. added theissue type on Aug 15, 2026
  2. moved this to 📥 Backlog in 🌊 Project Boardon Aug 15, 2026
  3. coderabbitai commented on Aug 15, 2026

    @coderabbitai
    Contributor
    ⚠️ Possible Duplicate Issue(s)
    🔗 Related PRs

    #2704 - fix(aws): constrain eks-ci KMS grant creation [merged]
    #2738 - ci: verify ksail release downloads [merged]
    #3037 - fix(cilium): refuse a zero-count gate release and correct the runbook order [merged]
    #3103 - feat(security): assert the node image verifier can enforce at all [merged]
    #3109 - fix(deploy): avoid redundant GHCR node reboots [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  4. devantler commented on Aug 19, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Independently re-discovered today, and #3165 is a duplicate of this — consolidating here

    This cost an agent real time again on 2026-08-19, four days after it was filed, which is decent
    evidence the guidance is actively misleading rather than merely imprecise.

    Working a vault-backup manifest change, I followed the documented fallback. Both overlays built
    clean, and grep -c 'chmod 0640' on the rendered output returned 0 — reading exactly like "my
    change is a no-op". What disambiguated it was running the unfiltered control: grep -c vault-snapshot was also 0, proving the workload is absent from that render entirely. Without
    that control the natural conclusion is that the change is broken, and the natural "fix" is to go
    change working code.

    The correct target was kubectl kustomize k8s/providers/hetzner/infrastructure, which renders both
    writers (CronJob/vault-snapshot, Job/vault-snapshot-init).

    Folding in #3165's unique content before closing it

    #3165 (filed a day later, same finding) adds two things worth keeping here:

    • Concrete evidence that the provider overlays do render base manifests:
      kubectl kustomize k8s/providers/hetzner/infrastructure/controllers | wc -l → 8717;
      .../docker/infrastructure/controllers → 3060; against 126 for the cluster overlay.
    • The framing that the failure is silent and in the false-negative direction, and that it hits
      exactly the readers with the least tooling to notice — CI is unaffected because it runs
      ksail workload validate.

    One addition to the acceptance criteria

    A further wrinkle measured today: vault-backup is included by bases/infrastructure/ (which
    hetzner pulls in) but is commented out in the docker provider, so that change is prod-only and
    is invisible to the local overlay by construction. So "build the provider overlay" is not one command
    — the guidance should tell the reader to build the provider overlay that actually includes the path
    they edited
    , and to confirm coverage by grepping the render for their own change.

  5. added a commit that references this issue on Sep 23, 2026
  6. moved this from 📥 Backlog to 👀 In Review in 🌊 Project Boardon Sep 23, 2026
  7. added a commit that references this issue on Sep 23, 2026
    140db93
  8. moved this from 👀 In Review to ✅ Done in 🌊 Project Boardon Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions