---
id: w1/m1/t002
title: Requeue all Apps on operator startup / config change
worker: worker1
status: done
estimate: 30m
depends_on: [w1/m1/t001]
---

## Objective

Belt-and-suspenders for config propagation: when the operator starts (or its config changes), requeue every App so controller-level settings (base domain, default tier, cluster issuer) reconcile without waiting for a spec bump.

## Context

- `operator/internal/controller/app_controller.go` + `SetupWithManager`.
- Options: an initial full-list requeue on startup, or watch the manager config / diff actual-vs-desired Ingress annotations and act on drift.

## Steps

1. On manager start, list all Apps and enqueue them.
2. (Optional) detect drift between desired and live Ingress annotations and requeue on change.

## Files

- `operator/internal/controller/app_controller.go`

## Acceptance criteria

- [x] Restarting the operator visibly re-reconciles all Apps (logs/events), not only changed ones. — Informer replay already enqueues a Create per App on cache sync (`GenerationChangedPredicate` only filters Updates); that invariant is pinned by `startup_requeue_test.go` (Apps created before the manager starts reach `Hibernated` with no spec bump — fails if a future event filter drops the replay), and a startup runnable in `SetupWithManager` logs the fleet count for visibility. An explicit `source.Channel` requeue-all was initially added, then removed in the /simplify pass as a duplicate of informer replay (it double-reconciled the fleet on every restart).

## Out of scope

- The idempotent-apply fix itself (t001).
