diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md
index 7d3c3f67c..9a9521090 100644
--- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md
+++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md
@@ -1321,6 +1321,11 @@ Its primary job is rapid v5-to-v6 reorientation. The modal should explain
where familiar v5 destinations moved and what each v6 top-level area is for,
so operators who feel briefly lost after upgrading can rebuild their mental
map in one pass.
+That guided welcome surface should stay compact. The canonical shape is a
+coachmark-sized card centered on the current destination with one short
+step-specific sentence, a small clickable step strip, and minimal footer
+controls. It must not grow back into a large sectioned explainer when one
+sentence would do the job.
The guided stop map inside that welcome surface is interactive, not decorative:
operators must be able to jump directly to any tour step from the stop list,
and desktop layouts may widen the panel enough to keep step labels readable
@@ -1334,8 +1339,9 @@ use bordered flat fills and normal app radii instead of gradient washes,
glassmorphism, or other marketing-style promo chrome that drifts from the rest
of the product.
Secondary disclosures such as telemetry must stay subordinate to that
-orientation job: keep them compact, link to the canonical privacy/settings
-surfaces, and do not let them crowd out the migration wayfinding copy.
+orientation job: keep them as footer-level links into the canonical
+privacy/settings surfaces, and do not let them crowd out the migration
+wayfinding copy.
That state owner now also owns public-demo suppression: the modal must stay
closed until `sessionPresentationPolicyResolved()` is true and must fail closed
when `presentationPolicyIsDemoMode()` resolves true, so the public demo does
diff --git a/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts b/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts
index 14c06d746..0e627fb34 100644
--- a/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts
+++ b/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts
@@ -1143,11 +1143,11 @@ describe('shared primitive guardrails', () => {
expect(whatsNewModalStateSource).toContain('spotlightStyle');
expect(whatsNewModalModelSource).toContain('WHATS_NEW_FEATURE_CARDS');
- expect(whatsNewModalModelSource).toContain('WHATS_NEW_TELEMETRY_TITLE');
expect(whatsNewModalModelSource).toContain('WHATS_NEW_DOCS_URL');
expect(whatsNewModalModelSource).toContain('WHATS_NEW_PRIVACY_URL');
expect(whatsNewModalModelSource).toContain('WHATS_NEW_DOCS_LABEL');
expect(whatsNewModalModelSource).toContain('MIGRATION_GUIDE_DOC_URL');
+ expect(whatsNewModalModelSource).toContain('Telemetry details');
expect(whatsNewModalModelSource).toContain("title: 'Dashboard'");
});
diff --git a/frontend-modern/src/components/shared/WhatsNewModal.tsx b/frontend-modern/src/components/shared/WhatsNewModal.tsx
index 9f04823b3..52f6c77fd 100644
--- a/frontend-modern/src/components/shared/WhatsNewModal.tsx
+++ b/frontend-modern/src/components/shared/WhatsNewModal.tsx
@@ -5,13 +5,10 @@ import ServerIcon from 'lucide-solid/icons/server';
import BoxesIcon from 'lucide-solid/icons/boxes';
import HardDriveIcon from 'lucide-solid/icons/hard-drive';
import ShieldCheckIcon from 'lucide-solid/icons/shield-check';
-import ChartBarIcon from 'lucide-solid/icons/chart-bar';
-import ExternalLinkIcon from 'lucide-solid/icons/external-link';
import XIcon from 'lucide-solid/icons/x';
import {
WHATS_NEW_BACK_LABEL,
WHATS_NEW_CLOSE_LABEL,
- WHATS_NEW_CURRENT_STEP_LABEL,
WHATS_NEW_DOCS_LABEL,
WHATS_NEW_DOCS_URL,
WHATS_NEW_DO_NOT_SHOW_LABEL,
@@ -19,17 +16,9 @@ import {
WHATS_NEW_KICKER_LABEL,
WHATS_NEW_NEXT_LABEL,
WHATS_NEW_PRIMARY_ACTION_LABEL,
+ WHATS_NEW_PROGRESS_PREFIX,
WHATS_NEW_PRIVACY_URL,
- WHATS_NEW_SKIP_LABEL,
- WHATS_NEW_STEP_MAP_HELPER,
- WHATS_NEW_STEP_MAP_LABEL,
- WHATS_NEW_SUBTITLE,
- WHATS_NEW_TELEMETRY_COPY,
- WHATS_NEW_TELEMETRY_ENV_VAR,
- WHATS_NEW_TELEMETRY_LABEL,
- WHATS_NEW_TELEMETRY_PRIVACY_LABEL,
- WHATS_NEW_TELEMETRY_SETTINGS_PATH,
- WHATS_NEW_TELEMETRY_TITLE,
+ WHATS_NEW_TELEMETRY_LINK_LABEL,
WHATS_NEW_TITLE,
type WhatsNewFeatureCard,
} from './whatsNewModalModel';
@@ -86,24 +75,31 @@ export function WhatsNewModal() {
data-tour-step={step().target}
role="dialog"
aria-modal="true"
- aria-labelledby="whats-new-title"
+ aria-label={WHATS_NEW_TITLE}
tabindex="-1"
- class="fixed z-[1001] max-h-[min(90vh,44rem)] overflow-y-auto rounded-md border border-border bg-surface shadow-xl focus:outline-none"
+ class="fixed z-[1001] max-h-[min(90vh,32rem)] overflow-y-auto rounded-md border border-border bg-surface shadow-xl focus:outline-none"
style={state.panelStyle()}
onClick={(event) => event.stopPropagation()}
>
-