fix: sweep post-#411 stale references (dead labels, dead images, dead docs)#414
Conversation
The advanced weather demo's two pod templates carried `kagenti.io/client-registration-inject: "true"`, which after PR rossoctl#411 silently disables registration: * The operator's ClientRegistrationReconciler treats this label as a signal to skip — `SkipReason` in kagenti-operator/internal/clientreg/names.go:58 returns "label is true (legacy webhook client-registration sidecar; operator-managed registration disabled for this workload)". * The legacy in-pod kagenti-client-registration sidecar that the label was supposed to defer to was removed in rossoctl#411. Net effect: setting this label today produces a workload with NO Keycloak client registered at all, and `setup_keycloak_weather_advanced.py --wait-tool-client` correctly times out waiting for a SPIFFE-shaped client (`spiffe://localtest.me/ns/<ns>/sa/<sa>`) that nobody will ever create. This was hiding behind the kagenti repo's MLflow e2e failures upstream — once those were fixed, the AuthBridge weather e2e exposed the latent bug. Drop the label from both pod templates: * k8s/weather-tool-advanced.yaml * k8s/weather-service-advanced.yaml Plus refresh the two doc references that were directing readers to set the label: * demos/weather-agent/demo-ui-advanced.md — replace the bullet that recommended the label with one explaining operator-managed registration is now the only path. * demos/webhook/README.md — rewrite the "client registration" bullet to call out the label as removed and explain why setting it today silently breaks registration. Verified: `kubectl apply --dry-run=client -f` on both YAMLs renders clean. Repo grep for the label only matches the two doc references above (both now phrased as "don't set it"). Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
Follow-up to the dead-label fix in the previous commit. Repo-wide sweep for other stale references to the pre-rossoctl#411 multi-sidecar architecture, with two distinct treatments: Fixed in place (still-supported paths drifted to dead names): * local-build-and-test.sh — Dockerfile paths cmd/authbridge/Dockerfile.proxy and cmd/authbridge/Dockerfile.envoy no longer exist. Update to the post-rossoctl#411 cmd/authbridge-{proxy,envoy, lite}/Dockerfile paths and add a build step for the third image (authbridge-lite). Inventory list at the end of the script expanded accordingly. * authbridge/CLAUDE.md — fix the prose at line 132 that incorrectly told future readers the kagenti.io/client-registration-inject: "true" label still works (it doesn't — operator's SkipReason honors it and the legacy sidecar that the label deferred to is gone). Fix the runtime-resources table to reflect operator-managed registration and the bundled spiffe-helper. * README.md (top-level) — image inventory had authbridge-unified + separate client-registration / spiffe-helper images. Replace with the post-rossoctl#411 set: authbridge / authbridge-envoy / authbridge-lite / proxy-init, with a note explaining the bundling and that older release tags still publish the legacy shape. * authbridge/README.md — image / mode tables fully rewritten to the post-rossoctl#411 set. Default mode is now proxy-sidecar (was envoy-sidecar in the old text). * authbridge/demos/webhook/README.md — overview prose, prerequisites image list, "Enabling Combined Sidecar Mode" section (the feature gate is gone), debugging-logs section, image-pull-error troubleshooting block. The `combinedSidecar`, `envoyProxy: false`, `spiffeHelper: false` per-sidecar feature gates are all retired; rewrite the section to document the post-rossoctl#411 mode-resolution chain (CR → namespace ConfigMap → annotation → cluster default). * authbridge/demos/weather-agent/demo-ui.md — "Key differences" table flipped: proxy-sidecar is now the default; both rows now name the combined images instead of the dead authbridge-light/envoy split. * authbridge/demos/README.md — index page note about authbridge-unified replaced with the post-rossoctl#411 image set; flag the Single-Target / Multi-Target rows as currently broken with an inline⚠️ warning paragraph. Marked broken-needs-migration (no in-place fix without testing): * authbridge/authproxy/k8s/auth-proxy-deployment.yaml, authbridge/demos/{single,multi}-target/k8s/authbridge-deployment.yaml, authbridge/demos/{single,multi}-target/k8s/authbridge-deployment-no-spiffe.yaml use the pre-rossoctl#411 multi-sidecar pattern (envoy-proxy + authbridge-light + client-registration + standalone spiffe-helper containers) with images that no longer publish. Rewriting them to the combined-sidecar shape is real work that needs each demo manually verified — out of scope for a stale-references cleanup. Add an⚠️ broken-after-rossoctl#411 header to each YAML naming the dead images so any apply attempt produces a useful explanation alongside the inevitable ImagePullBackOff. Mirror the warning at the top of demos/{single,multi}-target/demo.md. * LOCAL_TESTING_GUIDE.md (760 lines, deeply baked into the legacy shape) — top-of-file deprecation banner pointing at the working demos. The `local-build-and-test.sh` reference in §1 still works because we updated the script; the rest needs re-author. Verified: bash syntax on local-build-and-test.sh; python3 yaml parse on each touched K8s manifest; repo-wide grep for the dead strings now matches only inside warning blocks ("no longer", "BROKEN", "don't set it", etc.). Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
Four small follow-ups from the review:
* local-build-and-test.sh: bump `set -e` to `set -euo pipefail` to
match the kagenti shell convention (CLAUDE.md). One unguarded
variable surfaced under `-u` — `KIND_EXPERIMENTAL_PROVIDER` at the
podman-detect branch — fixed with `${KIND_EXPERIMENTAL_PROVIDER:-}`.
All other env-var reads were already either `${VAR:-default}` or
guaranteed-set by upstream defaults. Verified: bash -n + a smoke
run against a missing KAGENTI_DIR exits at the expected error
message (no -u trip).
* local-build-and-test.sh: quote the `${image_name}` argument to
`echo` inside the tar-file path expansion, in case an image name
ever contains whitespace. Cosmetic given current names but free.
* authbridge/demos/webhook/README.md: lead the feature-gate-removal
paragraph with a single-line conclusion ("All four feature gates
... are removed.") so a skimmer sees the bottom line before the
explanatory clause.
* authbridge/demos/README.md: strikethrough on the broken
Single-Target / Multi-Target rows is invisible to assistive tech.
Add an explicit "(broken — see below)" text suffix on each row so
screen readers and non-rendering viewers also get the cue.
Skipped from the review:
* PR title rename suggestion. Reviewer agreed current title is
defensible ("not blocking"); commit 1 is a real bug fix on a
user-facing CI path, so leading with `fix:` matches the most
important half. Keeping it.
Verified: bash -n on the script and a runtime invocation through
the early exit; the README markdown changes are pure prose.
Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Hai Huang <huang195@gmail.com>
Surgical updates to working demos so their prose matches what the operator actually injects post-rossoctl#411 / kagenti-operator#361 (one combined AuthBridge sidecar, container name depends on resolved mode). Changes: * weather-agent/demo-ui.md - Architecture diagram: collapse 4-box agent-pod (agent + spiffe-helper + client-registration + envoy-proxy) into 2-box (agent + AuthBridge sidecar). Note that container name is mode-dependent (authbridge-proxy / envoy-proxy), spiffe-helper is bundled, and registration is operator-managed out of band. - "Verify pod" section: 4/4 → 2/2; expected `kubectl exec` output `agent kagenti-client-registration envoy-proxy spiffe-helper` becomes either `agent authbridge-proxy` (default) or `agent envoy-proxy` (envoy-sidecar). - "Check client registration" section: replace the `-c kagenti-client-registration` log inspection with a Secret-name-based check + a pointer at the kagenti-operator's controller-manager logs for the actual reconciler activity. - "Agent Pod Not Starting" troubleshooting: drop the `kagenti-client-registration` / `spiffe-helper` -c branches; add a kagenti-controller-manager fallback for stuck registration. - "Proxy-Sidecar Mode" section: rewrite as "Switching modes" — cluster default is now proxy-sidecar (was envoy-sidecar in the old prose); document the four-layer resolution chain (CR → namespace ConfigMap → annotation → cluster default) and show the canonical `kubectl patch agentruntime ... authBridgeMode` surface. Verification block shows expected container names per mode. Switching back drops the override on the AgentRuntime CR. - Inbound-troubleshooting reference: generalize "check envoy-proxy logs" to mention both authbridge-proxy and envoy-proxy. * weather-agent/demo-ui-advanced.md - Drop two `combinedSidecar` references (the feature gate is gone after rossoctl#411); replace `4/4 (or combined sidecar variant)` with a clean `2/2`. - Hard-coded `-c envoy-proxy` in two log-inspection blocks: the advanced demo runs in envoy-sidecar mode by design, so the primary commands stay on `-c authbridge-proxy` for proxy-sidecar parity, with an inline note that envoy-sidecar uses `envoy-proxy`. * weather-agent/k8s/configmaps-advanced.yaml - One stale comment referenced an `envoy-with-processor` build that no longer ships. Generalize to "AuthBridge ext_proc / forward-proxy" since the same observation applies to both modes after rossoctl#411. * webhook/README.md - Architecture diagram redrawn for the combined-sidecar shape: one box for the AuthBridge sidecar with explicit per-mode container names. Out-of-band note added about operator-managed Keycloak client registration and the `kagenti-keycloak-client-credentials-<hash>` Secret. * webhook/k8s/agent-deployment-webhook.yaml + webhook/k8s/agent-deployment-webhook-no-spiffe.yaml - Top-of-file "containers injected" lists were the old multi- sidecar shape (proxy-init + spiffe-helper + kagenti-client-registration + envoy-proxy). Rewrite to the post-rossoctl#411 shape (one combined sidecar, container name depends on mode, spiffe-helper bundled, registration operator-managed). The no-spiffe variant explicitly notes that the bundled spiffe-helper stays inactive when SPIRE_ENABLED=false. No structural document changes; the demo flows themselves still work end-to-end. Container-name updates throughout match the operator's `AuthBridgeProxyContainerName = "authbridge-proxy"` / `EnvoyProxyContainerName = "envoy-proxy"` constants. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
Replace the two broken-after-rossoctl#411 standalone demos (`single-target/`, `multi-target/`) with a single configuration-only reference at `demos/token-exchange-routes/`. Both old demos used the pre-rossoctl#411 multi-sidecar pattern (envoy-proxy + authbridge-light + client-registration + standalone spiffe-helper) with images that no longer publish; rewriting their YAMLs to the combined-sidecar shape is real per-demo work that needs runtime testing. The route-config content is the part that's still useful and isn't covered well by other demos, so extract that. New `demos/token-exchange-routes/README.md` covers: - How AuthBridge's outbound `token-exchange` plugin matches the request `Host` header against `authproxy-routes` entries and performs RFC 8693 exchange. - ConfigMap shape: per-route `host` / `target_audience` / `token_scopes` fields, with `kubectl create configmap` example. - Single-target example (one route entry, weather-tool style). - Multi-target example (three routes; the existing `routes.yaml` is moved into this directory unchanged as a worked example). - Mixing exchange and passthrough (default policy); tightening to `default_policy: exchange` for tool-only namespaces. - Glob pattern semantics — `filepath.Match` quirks around `**`, short-name matching, etc. - Troubleshooting: `Host` mismatches, missing scopes on the agent's own Keycloak client, audience errors at the target, routes-not-reloaded. - Cross-references to `weather-agent/demo-ui-advanced.md` and `webhook/README.md` for the deployment side. Removed: - `demos/single-target/` (entire directory) — covered by webhook + weather-agent demos plus the new routes reference; manual multi-sidecar deployment YAMLs were the broken bit. - `demos/multi-target/{demo.md,run-demo-commands.sh,teardown-demo.sh,k8s/}` — the script-driven flow tied to the dead `agent` Deployment in the `authbridge` namespace; not worth migrating. Renamed: - `demos/multi-target/` → `demos/token-exchange-routes/` (`git mv` preserves history on `routes.yaml`). Cross-references updated everywhere: - `demos/README.md` table: drop the strikethrough rows + warning paragraph; add Token-Exchange Routes / MCP Parser / abctl Walkthrough as Reference-tier entries; the recommended-path step 3 points at the new routes guide. - `demos/github-issue/{demo.md,demo-ui.md,demo-manual.md}`, `demos/weather-agent/demo-ui.md` — "Multi-Target Demo" links retargeted to `../token-exchange-routes/README.md` with updated link labels. - `authbridge/README.md` overview link bullet + the demos list at the bottom collapsed to one Token-Exchange Routes entry. - `authbridge/CLAUDE.md` — directory tree + demo descriptions + Keycloak setup-script table updated; gotcha rossoctl#6 (hardcoded SPIFFE ID in `single-target/setup_keycloak.py`) removed since the file is gone, remaining gotchas renumbered. - `CLAUDE.md` (top-level) — directory listing line + manual- deployment learning-path bullet retargeted at the new routes guide. - `demos/webhook/setup_keycloak.py` — comment that pointed at `single-target/k8s/authbridge-deployment.yaml` for the `envoy-config` ConfigMap retargeted at the kagenti-system release namespace. Existing single/multi-target sweep banners from earlier in this PR (broken-after-rossoctl#411 YAML headers) are deleted with the YAMLs. Net diff: -1,500 lines (the two broken demos), +210 lines (the new consolidated reference + cross-ref updates). Repo-wide grep for `single-target/` and `multi-target/` now matches only on prose that uses those words descriptively (e.g. "single-target route pattern"), not as path components. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
The github-issue demo (the recommended-path "intermediate" demo) was written for the pre-rossoctl#411 multi-sidecar pattern: four containers per agent pod (`agent` + `spiffe-helper` + `kagenti-client-registration` + `envoy-proxy`), all `kubectl exec/logs -c <sidecar>` blocks targeting names that no longer exist, and a `combinedSidecar` feature gate that was removed. Anyone following the demo today hits container-not-found errors at every verification step. Updates across all four files: * `demo.md` (index) — architecture component list rewritten: two-container pod (agent + AuthBridge sidecar; container name depends on resolved mode), spiffe-helper bundled inside, client registration operator-managed. * `k8s/git-issue-agent-deployment.yaml` — top-of-file injection comment rewritten to describe the post-rossoctl#411 shape: one combined sidecar with mode-dependent container name; proxy-init only in envoy-sidecar mode; operator-managed registration via the `kagenti-keycloak-client-credentials-<hash>` Secret mounted at `/shared/`. * `demo-manual.md` — full rewrite of the architecture diagram and every verification block: - Agent pod ASCII diagram: 3+1 boxes collapsed into 1+1, with explicit per-mode container names and operator-managed registration callout. - "Verify injected containers" step: expected output flipped from `agent spiffe-helper kagenti-client-registration envoy-proxy` to `agent authbridge-proxy` (or `agent envoy-proxy` for envoy-sidecar). Pod ready count `4/4` → `2/2`. - "Check client registration" step: replaced the `-c kagenti-client-registration` log inspection with a Secret-name-based mount check + a kagenti-controller-manager log filter for the actual reconciler activity. - All `kubectl exec/logs -c envoy-proxy` blocks: rewritten to auto-detect the sidecar container name via a `$SIDECAR` shell variable that greps for `authbridge-proxy|envoy-proxy`. - "Agent Pod Not Starting (4/4 containers)" troubleshooting: rewritten for 1/2 / 0/2 with the operator log fallback added for stuck-on-shared-secret cases. * `demo-ui.md` — same treatment as demo-manual.md, plus: - Architecture diagram parallel update. - "Sidecar Modes" section that previously documented two branches (legacy `combinedSidecar: false` vs combined `combinedSidecar: true`) collapsed into a single description of the post-rossoctl#411 cluster default. The link to the `combinedSidecar` feature-gate doc removed (the gate is gone). - "Agent card not available" troubleshooting block: log inspection rewritten to use the `$SIDECAR` auto-detect. Net effect: every command in the demo now works against either proxy-sidecar (cluster default) or envoy-sidecar mode without manual fixup, and every architecture description matches what the operator actually injects post-rossoctl#411. Verified: `grep -n` for `kagenti-client-registration` returns zero hits across all four files; remaining `envoy-proxy` matches are all in the per-mode comments and shell auto-detect blocks (i.e., correctly describing envoy-sidecar mode), not stale references. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
cwiklik
left a comment
There was a problem hiding this comment.
Clean, thorough sweep of post-#411 stale references across 34 files. Deletes the legacy single-target/ and multi-target/ demos that depended on the retired multi-sidecar shape, replaces them with a focused token-exchange-routes/ configuration reference, and updates all surviving demo docs to reflect the combined sidecar architecture. Shell script improvements (set -euo pipefail, proper quoting, updated Dockerfile paths, authbridge-lite build) are correct. No broken links — mcp-parser/README.md and demo-with-abctl.md both exist upstream. All 6 commits signed-off, CI passing.
One suggestion below — otherwise LGTM.
| # (authbridge / authbridge-envoy / authbridge-lite). Applying this | ||
| # YAML today will produce ImagePullBackOff. The standalone authproxy | ||
| # quickstart needs migration to the combined sidecar shape; use the | ||
| # webhook or weather-agent demos in the meantime. |
There was a problem hiding this comment.
suggestion: The BROKEN warning comment is correct and helpful, but this YAML still references localhost/authbridge-unified:latest which will cause ImagePullBackOff on apply. Consider deleting the file entirely (this standalone authproxy quickstart isn't used by any demo path now) or renaming to .yaml.broken to prevent accidental kubectl apply -f k8s/.
Combined cleanup that eliminates the last remnants of the pre-rossoctl#411 multi-sidecar architecture from the repo. Three coordinated moves: 1. Delete the webhook demo The webhook demo was a synthetic-workload demonstration of "the webhook injects sidecars" — but post-rossoctl#411, webhook injection is the only path; every demo uses it implicitly. Its USP is gone, and its images (auth-proxy:latest, demo-app:latest) were dropped from CI long ago — anyone running it today hits ImagePullBackOff unless they rebuild locally. The same coverage (inbound validation + outbound token exchange) is provided by the weather-agent advanced and github-issue demos, which use real workloads. Drop: - authbridge/demos/webhook/ (entire dir): README.md, k8s/, setup_keycloak.py 2. Cascade the auth-proxy + demo-app source With the webhook demo gone, nothing else references the auth-proxy or demo-app images, so the source can go too: - authbridge/authproxy/main.go + Dockerfile (auth-proxy app source) - authbridge/authproxy/k8s/auth-proxy-deployment.yaml (already broken standalone deployment) - authbridge/authproxy/quickstart/ (entire subtree — README.md, setup_keycloak.py, requirements.txt, k8s/demo-app-deployment.yaml, demo-app/main.go + Dockerfile) - authbridge/authproxy/go.mod + go.sum (no Go code remains) - authbridge/authproxy/Makefile build/deploy/test targets that reference any of the above 3. Rename authproxy/ → proxy-init/ What's left in authbridge/authproxy/ after the cascade is exactly the iptables init container and nothing else (init-iptables.sh + Dockerfile.init + a trimmed Makefile + a rewritten README focused on just the init container's role). The directory name authproxy no longer matches what's inside, and the pre-commit hooks go-fmt-authproxy / go-vet-authproxy were already orphaned with no .go files to scan. Rename to proxy-init/ — matches the image name and the container name the operator injects. Cross-reference sweep across 14 supporting files: * `local-build-and-test.sh` — path updated. * `Makefile` (root) — fmt now iterates over the live Go modules; build-images target replaced with build-proxy-init. * `.pre-commit-config.yaml` — drop the orphaned go-fmt-authproxy / go-vet-authproxy hooks. * `.github/workflows/ci.yaml` — drop the dedicated `go-ci` job (no Go module to test); update the pre-commit job's go-version-file to reference authlib/go.mod; rewrite the GOWORK="off" comment that named the deleted authproxy module. * `.github/workflows/build.yaml` — proxy-init context path bumped. * `.github/workflows/security-scans.yaml` — drop the authbridge/proxy-init/quickstart skip-dir entry (path is gone). * `.github/dependabot.yml` — rewrite. Drop entries for the deleted authproxy/quickstart/demo-app docker image, the now-Go-less authproxy go.mod, the never-existed authproxy/client-registration pip + docker entries. Add the four authlib + cmd/* go.mod entries that were missing entirely. * `authbridge/go.work` — drop ./authproxy from the workspace. * `authbridge/CLAUDE.md` — directory tree, demo descriptions, Keycloak setup-script table, build/deploy section, and the envoy-config + required-ConfigMaps sections all rewritten to reference the kagenti Helm chart's templates instead of the deleted demos/webhook/k8s/configmaps-webhook.yaml. Gotcha rossoctl#5 (virtualenv in deleted quickstart) removed; remaining gotchas renumbered. * `CLAUDE.md` (root) — directory tree updated; ci.yaml description no longer mentions authproxy as a separate Go target; manual-deployment learning-path bullet retargeted at the routes-config doc. * `authbridge/README.md` — the "AuthProxy" link bullets that described an Envoy + ext_proc binary (which doesn't exist anymore — that's authbridge-envoy now) replaced with bullets describing each cmd/* binary plus proxy-init. * `README.md` (root) — same overview rewrite; broken ./authbridge/client-registration/ link removed. * `LOCAL_TESTING_GUIDE.md` — Webhook Demo bullet retargeted at the token-exchange-routes guide; deprecation banner alternatives list updated to point at github-issue instead of the deleted webhook demo. * `authbridge/demos/README.md` — Webhook row + description block removed from the demos table. * `authbridge/demos/token-exchange-routes/README.md` — two broken `../webhook/` links retargeted at github-issue. * `authbridge/demos/weather-agent/k8s/weather-tool-advanced.yaml` — the comment line that pointed at the deleted webhook README for the type-label rule retargeted at the operator's webhook source. Net diff: 23 files modified, 14 deleted, 1 dir renamed (1 file moved via git mv). About -1,800 LOC of unmaintained, broken-image-dependent content; +120 LOC of corrected prose and the trimmed proxy-init Makefile/README. End-state directory layout: each subdirectory under authbridge/ has a name that matches what's inside, no orphaned hooks, no broken cross-references, no dead-image references. Verified: `bash -n local-build-and-test.sh`; `kubectl apply --dry-run=client` on the surviving demo YAMLs; `helm template` on the kagenti chart still renders (confirms our path changes don't break anyone consuming the chart); repo-wide grep for `authbridge/authproxy` returns zero hits in tracked content; broken-link grep on demos/webhook/ matches only inside the LOCAL_TESTING_GUIDE.md deprecation banner that was already flagged as stale earlier in this PR. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
302623a to
0416172
Compare
Three suggestions from the reviewer, all applied: * `make build-images` rename — root Makefile's `build-images` target was renamed to `build-proxy-init` in commit 0416172 but four docs (README.md, CONTRIBUTING.md, CLAUDE.md, authbridge/ CLAUDE.md) still invoked the old name. Update each: - README.md: bare `make build-images` → `make build-proxy-init` (the root target now builds only proxy-init, not "all images"; naming matches reality). - CONTRIBUTING.md, CLAUDE.md: `cd authbridge/proxy-init && make build-images` → `make docker-build-init` (the proxy-init/ Makefile only has `docker-build-init` and `load-image` targets; there is no `build-images` target there). - authbridge/CLAUDE.md: the rebuild test snippet pointed at `make build-images && make load-images`; replace with the `cd authbridge && podman build -f cmd/...` recipe that actually rebuilds the affected combined image — the touched code under `authlib/exchange/` ends up in every cmd/* binary, not just proxy-init. Also add a top-level "Building Everything Locally" section that points at the repo-root local-build-and-test.sh as the orchestrated path, with per-image podman commands as the manual fallback. * proxy-init/Makefile container-runtime hardcoded to podman — local-build-and-test.sh in this same PR auto-detects docker vs podman; the Makefile didn't. Add CONTAINER_RUNTIME ?= $(shell command -v podman >/dev/null 2>&1 \ && echo podman || echo docker) so docker users get docker by default. The $(CONTAINER_RUNTIME) build -f Dockerfile.init … line then works for either. Override with make CONTAINER_RUNTIME=docker docker-build-init on systems with both installed. * proxy-init/Makefile silent-error swallow on the podman ctr retag — the `2>/dev/null || true` masked "podman not found" on docker-only systems, producing a successful-looking `make load-image` followed by ImagePullBackOff at runtime. Replace the unconditional retag with an `ifeq ($(CONTAINER_RUNTIME), podman) … endif` block that only runs when we know we're using podman, and drop the `2>/dev/null || true` so a real failure surfaces. Docker doesn't need the retag (kind resolves docker images by their full name natively), so this is a clean per-runtime split. Verified: `make -n` renders the right commands for both CONTAINER_RUNTIME=podman (default on machines with podman) and CONTAINER_RUNTIME=docker (explicit override). Repo-wide grep for `make build-images` returns zero hits after the doc updates. The PR description point from the same review is addressed separately by editing the PR body — no code change needed. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
…DME sweep Four small followups missed in the earlier sweep. All in scope of the post-rossoctl#411 cleanup; they survived because previous edits to the same files only touched the deployment-modes table + demos list, not the prose / diagrams / component-doc list. * `authbridge/README.md` line 3 — opening paragraph linked to two deleted/renamed paths: `[client registration](./client-registration/)` (no such directory in the repo) and `[token exchange](./authproxy/)` (renamed to `proxy-init/` in commit 0416172, and `proxy-init/` is just iptables — not a "token exchange" component anyway). Rewrite the paragraph to point at `authlib/` + `cmd/` for the actual code, with an explicit note that registration is now operator-managed. * `authbridge/README.md` ASCII architecture diagram — the box labeled `client-registration (registers Workload with Keycloak)` is gone (operator-managed), so drop that box. The "AuthProxy Sidecar" header was rewritten to "AuthBridge Sidecar (combined image)" with the per-mode container-name disambiguation (`authbridge-proxy` / `envoy-proxy`) we already established elsewhere. Spiffe-helper is also no longer a separate box — bundled inside the combined image, gated by `SPIRE_ENABLED`, noted inline. Add an out-of-band footer naming the operator's ClientRegistrationReconciler + the `kagenti-keycloak-client-credentials-<hash>` Secret it produces. * `authbridge/README.md` Mermaid architecture diagram — same treatment: collapse SpiffeHelper + ClientReg + Sidecar (which was three sub-nodes — auth-proxy + envoy-proxy + ext-proc) into one Sidecar node with the per-mode name. Move ClientRegistration into a new `Operator (kagenti-system)` subgraph so the diagram shows it living outside the workload pod. Renumber the request-flow arrows from 1-11 to 1-9 reflecting the simplified shape. * `authbridge/README.md` Workload Pod table — drop the `client-registration` row, and split the single `AuthProxy Sidecar` row into two per-mode rows (`authbridge-proxy` and `envoy-proxy`) with a `Mode` column. Add a brief lead-in paragraph explaining the post-rossoctl#411 shape. * `authbridge/README.md` Component Documentation links — both `[AuthProxy](authproxy/README.md)` and `[Client Registration](client-registration/README.md)` 404 now. Replace with one bullet per mode-specific cmd/* binary plus proxy-init plus authlib plus a pointer at the `docs/` directory that holds the framework / plugin author references. Add a trailing note that registration is operator-managed (the `Client Registration` link's purpose). * `CLAUDE.md` lines 265-266 — the "Routes config reference" line appeared twice (once bare, once with the parenthetical). Drop the bare duplicate; keep the more informative one. Verified: every link in authbridge/README.md resolves; repo-wide grep confirms the only remaining `client-registration` mentions in this file are descriptive prose about the post-rossoctl#411 migration ("standalone client-registration / spiffe-helper sidecars are gone"), not paths or component references. Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com> Signed-off-by: Hai Huang <huang195@gmail.com>
Summary
Sweep through
kagenti-extensionsfor stale references and architectural drift after #411 (combined-sidecar split) and the related operator-managed registration switch in kagenti-operator#361. Eight commits, three distinct treatments.Treatment A: original CI-blocker fix (commit 1)
weather-tool-advanced.yamlandweather-service-advanced.yamlcarriedkagenti.io/client-registration-inject: "true", which after #411 silently disables registration: the operator'sClientRegistrationReconcilerhonors the label as a "skip me" signal (SkipReasoninkagenti-operator/internal/clientreg/names.go:58), and the legacy in-pod sidecar that the label deferred to was removed in #411. Workload registers nowhere,setup_keycloak_weather_advanced.py --wait-tool-clienttimes out forever. This is what was blocking kagenti#1584'sDeploy & Testlane.Treatment B: full repo sweep for other post-#411 stale references (commits 2–6)
a0b6ee7): broad sweep —local-build-and-test.shDockerfile paths,authbridge/CLAUDE.mdprose, top-levelREADME.mdimage inventory,authbridge/README.mdmode tables,authbridge/demos/webhook/README.md,authbridge/demos/weather-agent/demo-ui.md,LOCAL_TESTING_GUIDE.md, and YAML banners on the soon-to-be-deleted standalone demos.fa18e33): review nits —set -euo pipefailinlocal-build-and-test.sh, accessibility tweaks on demos/README.md broken-row markers, "all four feature gates removed" lead-in.0626dce): refresh weather-agent + webhook for combined sidecar shape — diagrams and pod-verification blocks rewritten for2/2 containersand the per-mode container name (authbridge-proxy/envoy-proxy).b65c087): consolidatesingle-target/+multi-target/into a newtoken-exchange-routes/configuration reference. Both old demos used the pre-refactor(cmd): split unified authbridge binary into 3 mode-specific binaries #411 multi-sidecar pattern with images that no longer publish. The new doc covers both single- and multi-route patterns from a config-only angle and pairs with the working deployment demos. Deletes ~3,500 LOC; adds ~210 LOC.c3444c8): rewrite the github-issue demo (1,209 + 1,156 + 83 lines acrossdemo-ui.md,demo-manual.md,demo.md, plus the deployment YAML). Architecture diagrams, allkubectl exec/logs -c <sidecar>blocks (mode-aware via$SIDECARshell auto-detect), pod-ready counts, "Sidecar Modes" prose all brought current.Treatment C: drop webhook demo + collapse
authproxy/→proxy-init/(commits 7–8)0416172, ~−1,800 LOC): the webhook demo's stated purpose was "the webhook injects sidecars" — but post-refactor(cmd): split unified authbridge binary into 3 mode-specific binaries #411 webhook injection is the only path; every demo uses it implicitly. The demo's USP is gone and its synthetic auth-proxy + auth-target images aren't published anymore. Same coverage exists in weather-agent (advanced) and github-issue (real workloads, still-published images). Drop the wholeauthbridge/demos/webhook/subtree. With the demo gone, the auth-proxy + demo-app source it depended on (authbridge/authproxy/main.go,Dockerfile,quickstart/) becomes dead code; cascade-delete. What's left inauthbridge/authproxy/is exactly the iptables init container —init-iptables.sh,Dockerfile.init, a one-target Makefile. Theauthproxy/name no longer matches the contents, sogit mvtoproxy-init/. Trim the Makefile, rewrite the README to focus on the init container's role. Mechanical path-rename sweep across 14 supporting files (CI workflows, dependabot config, pre-commit config, root Makefile, root and subdirectory READMEs, CLAUDE.md files, dependent demo YAML comments). Drop the orphanedgo-fmt-authproxy/go-vet-authproxypre-commit hooks (no Go files in the dir anymore). Drop the dedicatedgo-cijob inci.yaml(no module to test). Updateauthbridge/go.workto remove the deleted./authproxymember.55bd738): post-rename review nits — three docs still invoked the renamedmake build-imagestarget; updated tobuild-proxy-init(root) anddocker-build-init(per-component). The proxy-init Makefile hardcoded podman; addedCONTAINER_RUNTIME ?= $(shell command -v podman …)auto-detect plus anifeqguard so the podman-specificctr images tagretag step inside the kind node only runs when we're actually on podman. The previous2>/dev/null || trueswallowed "podman not found" errors on docker-only machines, producing a successful-lookingmake load-imagefollowed by ImagePullBackOff; the conditional removes that footgun.End-state directory layout
Every directory's name matches what's inside; no dead-image references; no orphaned hooks; no broken cross-references.
Test plan
helm templateon the kagenti chart still renders cleanly with extensions images pinned atv0.6.0-alpha.1bash -non every modified shell scriptpython3 -c "import ast; ast.parse(...)"on every modified Python filekubectl apply --dry-run=clienton the surviving demo YAMLsmake -non the newproxy-init/Makefilefor bothCONTAINER_RUNTIME=podmanandCONTAINER_RUNTIME=dockerauthbridge/authproxy,make build-images,client-registration-inject,combinedSidecar,authbridge-unified,authbridge-light,envoy-with-processorreturns zero hits in tracked content (matches in deprecation banners only)Deploy & Testonce kagenti#1592 lands (covers the cross-repo path-rename break)Closes / unblocks
The original CI failure on kagenti#1584 (now merged). Companion path-rename fix at kagenti#1592.
Assisted-By: Claude (Anthropic AI) noreply@anthropic.com