Pulse/pkg
rcourtman 371a04ad43 Fix HEALTHY-on-empty and surface AI discoverability in reports
Found by actually generating two PDFs against the dev server and
holding them in hand — neither was visible by reading code alone.

1. HEALTHY on empty data was misleading. A report against a resource
   with zero data points and no alerts showed a green HEALTHY card
   with "All systems operating normally," contradicting the
   "Data Points: 0" line on the cover. A user reading the report
   would believe their resource was operating cleanly when really
   Pulse had no metrics to evaluate. writeExecutiveSummary now
   detects TotalPoints == 0 and len(Summary.ByMetric) == 0 and
   renders a muted grey "NO DATA / No metrics reported during the
   selected window" card instead.

2. AI discoverability gap. With AI unconfigured (or failing), the
   PDF is functionally identical to what it was before the AI
   narrative work landed — no AI prose, no period comparison, no
   provenance footer. A user has zero signal that AI-narrated
   reports are a separate Pulse Assistant capability. Adds a
   one-line muted tip at the end of the executive summary when
   Narrative.Source == NarrativeSourceHeuristic pointing at
   Settings. Fleet path gets the same nudge scoped to fleet
   synthesis. Mutually exclusive with the AI provenance disclaimer
   so we never show both.

Tests in pdf_ux_test.go inflate FlateDecode'd content streams to
substring-check the actual rendered text, covering empty-data ->
NO DATA, quiet-with-data -> HEALTHY (regression guard), heuristic
narrative -> tip, AI narrative -> disclaimer + no tip, and the
fleet-heuristic tip.
2026-05-11 11:13:34 +01:00
..
agents Gate RAID rebuild alerts on mdstat operation 2026-04-30 14:31:14 +01:00
aicontracts Plumb operator-state and operational memory into investigation findings 2026-05-09 21:03:15 +01:00
audit Export restricted outbound HTTP security helpers 2026-04-22 10:05:57 +01:00
auth Split audit log access into dedicated token scope 2026-04-22 07:59:12 +01:00
cloudauth fix(hosted): preserve direct handoff membership continuity 2026-03-26 23:40:02 +00:00
db feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
discovery Pin discovery HTTP probes to captured TLS peers 2026-03-29 19:32:56 +01:00
extensions Restore commercial monitored-system admission hook contract 2026-05-06 18:04:59 +01:00
fsfilters Harden agentexec token binding and disk filtering 2026-04-23 15:54:48 +01:00
licensing Track runtime build in license activation 2026-05-06 23:45:37 +01:00
metrics refactor: split alert config and callbacks 2026-05-06 13:01:32 +01:00
pbs Harden outbound URLs and file-backed storage 2026-03-29 12:47:55 +01:00
pmg Harden outbound URLs and file-backed storage 2026-03-29 12:47:55 +01:00
proxmox Surface per-endpoint reasons in cluster "no healthy nodes" error 2026-05-08 21:10:14 +01:00
pulsecli Add action execution safety contract 2026-05-04 23:19:58 +01:00
reporting Fix HEALTHY-on-empty and surface AI discoverability in reports 2026-05-11 11:13:34 +01:00
securityutil Allow insecure dev HTTP agent runtime URLs 2026-04-23 13:48:54 +01:00
server Restore commercial monitored-system admission hook contract 2026-05-06 18:04:59 +01:00
tlsutil Fail closed on auth env hashing and TLS floors 2026-04-22 05:53:02 +01:00