Skip to content

The Homepage group policy blocks deleting a route, so a retirement cannot remove it #4732

Closed

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

Merge-queue run 38113692499 for #4639 (retire Backstage) failed its production deploy on 2026-10-11 and was removed from the queue. The Flux event on the apps layer at 05:23:20Z reads:

PruneFailed  HTTPRoute/backstage/backstage delete failed: admission webhook "validate.kyverno.svc-fail" denied the request:
resource HTTPRoute/backstage/backstage was blocked due to the following policies
restrict-homepage-service-groups: declared-service-group: 'A route with gethomepage.dev/enabled="true" must set gethomepage.dev/group to a service group declared in the Homepage layout ...'

#4639 removes the Internal Developer Platform group from the policy's list and the only route that uses it. The infrastructure layer applied the shorter list first (05:23:15Z). Five seconds later the apps layer tried to delete the route, and the policy judged the route being deleted against the new list and refused.

The route therefore stayed, its access grant was already gone, the gateway rejected it (ResolvedRefs/RefNotPermitted), and the deploy's route check failed after 300 s. Backstage was unreachable for about 25 minutes until the next queue entry restored main.

Cause

The declared-service-group rule matches every operation on HTTPRoute and Ingress. On a delete it evaluates the object being removed, so a route whose group is no longer declared can never be deleted, by Flux or by hand.

Who is affected

Anyone retiring or renaming a Homepage group together with its last route, and anyone trying to delete a route that already violates the policy. The second case is the worse one: the policy stops the cleanup of exactly the routes it objects to.

Expected behaviour

The policy judges routes that are created or changed. Deleting a route is always allowed.

Acceptance criteria

  • The rule applies to create and update only.
  • A test shows a delete of a route with an undeclared group is admitted, and a create of the same route is still refused.
  • After this ships, fix(platform): retire the unused Backstage portal #4639 can remove its group and route in one deploy.

Also seen, not part of this issue

Flux reported PruneFailed and then ReconciliationSucceeded five minutes later, and the deploy's reconcile step passed. Only the later route check noticed. Whether the deploy should fail on a prune failure is a separate question.

Size: S.

Activity

  1. added theissue type on Oct 11, 2026
  2. moved this from 👀 In Review to 🚀 Ready to Merge in 🌊 Project Boardon Oct 11, 2026
  3. moved this from 🚀 Ready to Merge to ✅ Done in 🌊 Project Boardon Oct 11, 2026
  4. devantler commented on Oct 11, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Read back in production (2026-10-11, after the 11:08Z merge of #4733): the merge-queue deploy passed, and the live restrict-homepage-service-groups policy is Ready and matches create and update only. Deletes are no longer judged. #4639 is un-parked; it still has to take in main before it can be queued, which the Codex lane owns.

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