Two corrections on top of the naming pass, both found by checking the live cluster rather than the source. The rename had silently changed the user-facing annotation key from argocd.argoproj.io/sync-wave to cd.argoproj.io/sync-wave — 63 live Applications carry the old key, so deploying that would have ignored every sync-wave and broken fleet deploy ordering. The key is now cd.hanzo.ai/*, and universe 575650286 moves the ApplicationSet template that stamps it, so the controller regenerates all 63 consistently. The API group in code said argoproj.io/v1alpha1 in 157 places while the cluster has served apps.hanzo.ai/v1alpha1 since 2026-07-23 (the CRDs are applications.apps.hanzo.ai). Code now matches what is actually served. The legacy applications.argoproj.io/app-name label had ZERO live users, so it went with the rest. foo.argoproj.io test fixtures became foo.example.com — arbitrary test domains should not carry a vendor name. go build ./... exit 0. Co-authored-by: Hanzo Dev <[email protected]>
4.1 KiB
Application Notice
Hanzo CD can display a per-application notice as a contextual banner on the application details page and as a hover icon on the application list and tile views. This is useful for surfacing deprecation warnings, scheduled maintenance, or operational guidance scoped to a single Application without affecting unrelated apps.
The notice is configured entirely through annotations on the Application resource — no Hanzo CD restart or ConfigMap change is required.
Note
The instance-level banner configured via
ui.bannercontentincd-cmremains unchanged and continues to apply to every UI page. The per-application notice described here is independent and stacks above the details-page content.
Annotations
All notice annotations use the notice.cd.hanzo.ai/ prefix.
| Annotation | Required | Default | Description |
|---|---|---|---|
notice.cd.hanzo.ai/content |
Yes | — | Plain-text notice message. Truncated at 500 characters. |
notice.cd.hanzo.ai/severity |
No | info |
One of info, warning, critical. Drives banner color and the default icon. Unknown values fall back to info. |
notice.cd.hanzo.ai/url |
No | — | If set, the banner text and icon link to this URL. Must be http:// or https://. Other schemes are rejected. |
notice.cd.hanzo.ai/permanent |
No | false |
When "true", the banner cannot be dismissed by users. Mirrors ui.bannerpermanent semantics. |
notice.cd.hanzo.ai/icon |
No | severity-derived | Override the icon. Must be one of the allowlisted FontAwesome classes; unknown values fall back to the severity default. |
notice.cd.hanzo.ai/scope |
No | both |
One of banner, icon, both. Use to suppress either surface. |
Severity defaults
| Severity | Default icon |
|---|---|
info |
fa-info-circle |
warning |
fa-exclamation-triangle |
critical |
fa-exclamation-circle |
Allowlisted icons
Only these FontAwesome class fragments may be set via the icon annotation:
fa-info-circle, fa-exclamation-triangle, fa-exclamation-circle,
fa-bell, fa-wrench, fa-clock, fa-bullhorn, fa-life-ring,
fa-shield-alt.
Examples
Minimal notice — info severity, dismissible, banner + icon:
apiVersion: apps.hanzo.ai/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: cd
annotations:
notice.cd.hanzo.ai/content: "Scheduled DB maintenance on 2026-06-01 02:00 UTC"
spec:
# ...
Deprecation notice with a runbook link, marked permanent:
metadata:
annotations:
notice.cd.hanzo.ai/content: "Deprecated — migrate to v2 by 2026-08-01"
notice.cd.hanzo.ai/severity: "warning"
notice.cd.hanzo.ai/url: "https://wiki.example.com/v2-migration"
notice.cd.hanzo.ai/permanent: "true"
List-icon-only hint (no page banner):
metadata:
annotations:
notice.cd.hanzo.ai/content: "Owned by team-payments"
notice.cd.hanzo.ai/severity: "info"
notice.cd.hanzo.ai/scope: "icon"
notice.cd.hanzo.ai/icon: "fa-life-ring"
Where it appears
- The banner is shown on the application details page, between the health and sync status panel and the application's resource tree.
- The icon is shown next to the application name in both the tile and list views of the applications page; hovering it reveals the notice content.
- By default the banner can be dismissed for the current user. Setting
notice.cd.hanzo.ai/permanentto"true"removes the dismiss control so the banner stays visible. The list/tile icon is always shown while the notice exists.