Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions web/src/components/whats-new/WhatsNew.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ describe('composeReleaseNotes', () => {
})

describe('whatsNewToOpen', () => {
it.each(['v1.18.0', 'v1.18.1'])('announces the shipped v1.18 notes on upgrade to %s', version => {
const notes = whatsNewToOpen(version, 'v1.17.0', true)
expect(notes?.versions).toEqual(['v1.18.0'])
expect(notes?.score).toBeGreaterThanOrEqual(AUTO_OPEN_SCORE)
expect(whatsNewToOpen(version, 'v1.18.0', true)).toBeNull()
expect(whatsNewToOpen(version, null, false)).toBeNull()
})

it('opens when the unseen releases show enough, and not for a quiet release', () => {
const list = [entry('v1.15.0', [9, 8, 7, 7, 7]), entry('v1.16.0', [6, 5, 4])]
expect(whatsNewToOpen('v1.15.0', 'v1.14.1', true, list)?.score).toBe(38)
Expand Down
10 changes: 10 additions & 0 deletions web/src/components/whats-new/WhatsNewDialog.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,16 @@ async function clickGotIt() {
}

describe('WhatsNew', () => {
it.each(['v1.18.0', 'v1.18.1'])('opens the shipped notes on Home after upgrading to %s', async version => {
setCatalog(...SHIPPED)
serverState = { currentVersion: version, storage: 'server', seenVersion: 'v1.17.0', priorInstall: true }
await render('/')
expect(dialog()?.textContent).toContain("What's new in Radar v1.18")
await clickGotIt()
expect(seenPosts).toEqual([version])
expect(status.current.unread).toBe(false)
})

it('auto-opens on Home after an upgrade and records the running version on close', async () => {
serverState = { currentVersion: 'v1.15.2', storage: 'server', seenVersion: 'v1.14.1', priorInstall: true }
await render('/')
Expand Down
27 changes: 16 additions & 11 deletions web/src/components/whats-new/releaseNotes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ export const RELEASE_NOTES: ReleaseNotes[] = [
id: 'trivy-cve-search',
icon: Search,
title: 'Investigate CVEs across your cluster',
description: 'Search Trivy findings by CVE, package or image. MCP agents can also inventory declared runtime versions that package scans may miss.',
leadDescription: 'With Trivy Operator installed, search by CVE, package, failed check ID or image to find affected workloads and their installed and fixed package versions. MCP agents can also inventory runtime versions declared by running images and compare supported versions with a fixed release, covering runtimes that package scans may miss. Missing or unreadable declarations stay unknown; image metadata does not verify a fix.',
description: 'Search Trivy findings by CVE, package or image, including in resource tables. MCP agents can inventory declared runtime versions.',
leadDescription: 'With Trivy Operator installed, search globally or within report tables by CVE, package, failed check ID or image to find matching scan reports, then open a report for installed and fixed package versions. Partial searches say what could not be checked. MCP agents can also inventory runtime versions declared by running images and compare supported versions with a fixed release. Missing or unreadable declarations stay unknown; image metadata does not verify a fix.',
importance: 8,
},
{
Expand All @@ -69,26 +69,32 @@ export const RELEASE_NOTES: ReleaseNotes[] = [
id: 'investigation-change-evidence',
icon: GitCompareArrows,
title: 'See more of what changed',
description: 'Investigations show more spec edits, policy and label changes, Secret rotations and stale env readers, and warn when history is incomplete.',
description: 'Investigations show more spec edits, NetworkPolicy changes, Secret rotations and stale env readers, and flag incomplete history.',
importance: 5,
},
{
id: 'workload-blockers',
icon: Network,
title: 'Find what is blocking your workload',
description: 'Issues explain policy and admission blocks, mixed Service backends, volume conflicts, storage rollout deadlocks and CronJob scheduling failures.',
title: 'Better issue detection and warnings',
description: 'Issues catch more network, storage and scheduling problems, add diagnostic context, and flag checks that could not complete.',
importance: 5,
path: '/issues',
cta: 'Open Issues',
},
{
id: 'log-viewer-improvements',
icon: ScrollText,
title: 'Log viewer improvements',
description: 'Keep your place in fast-moving logs, select text without auto-scroll, and wait for containers to start with clearer status messages.',
importance: 4,
},
],
improvements: [
'Logs keep your reading position and pause for text selection',
'Resource tables remember your column order for each kind',
'Open terminals and browse files in native sidecars',
'Node drains keep results visible and name remaining Pods',
'Issues name incomplete checks and let you retry them',
'Helm upgrades require an explicit chart source',
'Audits recognize shared Pod CPU and memory budgets',
'Helm upgrades need a confirmed source; find public sources on ArtifactHub',
'Prometheus reconnects automatically when it appears',
'Argo CD views confirm when a local resource is missing',
],
Expand Down Expand Up @@ -310,9 +316,8 @@ export function unreadReleases(
export const RELEASE_WEIGHTS = [1, 0.75, 0.5]
export const MAX_CARDS = 5
export const MAX_LINES = 8
// The dialog opens by itself only when the cards it shows add up to this.
// A release of mostly 4-6s stays behind the unread dot; one with a few solid
// features, or a skipped release with them, opens it.
// A fuller set of useful improvements can merit an announcement even without
// a single release-defining feature.
export const AUTO_OPEN_SCORE = 25

export interface ComposedHighlight extends ReleaseHighlight {
Expand Down
Loading