From 0e53c245377dc65e0f1b9853e06975f2e9f4198d Mon Sep 17 00:00:00 2001 From: Aditya Jain Date: Tue, 25 Aug 2026 01:31:37 -0700 Subject: [PATCH] fix(toolkit-lib): cdk validate drops the plugin's customSeverity label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit flattenViolations() called normalizeSeverity(violation.severity) without forwarding violation.customSeverity, even though normalizeSeverity accepts it specifically to label a 'custom'-severity violation with the plugin's own severity string. As a result, any validation plugin reporting { severity: 'custom', customSeverity: 'BLOCKER' } (or any other label) had that label silently discarded — cdk validate always printed INFO instead, understating the plugin's intended severity. Fixes #1893 --- .../lib/api/validate/validate-formatting.ts | 2 +- .../api/validate/validate-formatting.test.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/validate/validate-formatting.ts b/packages/@aws-cdk/toolkit-lib/lib/api/validate/validate-formatting.ts index bf5f032e2..9cf060fb0 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/validate/validate-formatting.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/validate/validate-formatting.ts @@ -40,7 +40,7 @@ function flattenViolations(reports: PluginReportJson[]): FlattenedViolation[] { const pluginName = report.pluginName; return report.violations.flatMap((violation) => { return violation.violatingConstructs.map((construct) => ({ - severity: normalizeSeverity(violation.severity), + severity: normalizeSeverity(violation.severity, violation.customSeverity), description: violation.description, ruleName: violation.ruleName, pluginName, diff --git a/packages/@aws-cdk/toolkit-lib/test/api/validate/validate-formatting.test.ts b/packages/@aws-cdk/toolkit-lib/test/api/validate/validate-formatting.test.ts index c70ae4ce5..cb95834b3 100644 --- a/packages/@aws-cdk/toolkit-lib/test/api/validate/validate-formatting.test.ts +++ b/packages/@aws-cdk/toolkit-lib/test/api/validate/validate-formatting.test.ts @@ -36,6 +36,24 @@ describe('formatValidateResult', () => { ]); }); + test('uses the plugin-supplied customSeverity label for a "custom" severity violation', () => { + const result = makeResult([{ + pluginName: 'TestPlugin', + conclusion: 'failure', + violations: [{ + ruleName: 'r1', + description: 'blocker issue', + severity: 'custom', + customSeverity: 'BLOCKER', + violatingConstructs: [{ constructPath: 'Stack/A' }], + }], + }]); + + const output = formatValidateResult(result); + expect(output).toContain('BLOCKER'); + expect(output).not.toContain('INFO'); + }); + test('formats construct path with logical id', () => { const result = makeResult([{ pluginName: 'TestPlugin',