diff --git a/scripts/snapshots/report_cel_detailed.md b/scripts/snapshots/report_cel_detailed.md index d27251e4..cd27843d 100644 --- a/scripts/snapshots/report_cel_detailed.md +++ b/scripts/snapshots/report_cel_detailed.md @@ -1,6 +1,6 @@ # cloudformation-validate vs cfn-lint - Parity Report -> Generated: 2026-09-02 18:43:04 +> Generated: 2026-09-03 11:08:29 > Engine: **cel** > Detail level: **detailed** > Matching: `(rule_id, resource_id, path)` two-pass with `(rule_id, resource_id)` fallback + aliases @@ -23,22 +23,22 @@ | Metric | Value | |--------|------:| | True Positives | 4053 | -| False Positives (engine bugs) | 89 | +| False Positives (engine bugs) | 87 | | Engine Extra (correct, cfn-lint gap) | 8257 | | False Negatives (engine misses) | 356 | -| Precision | 97.85% | +| Precision | 97.90% | | Recall | 91.93% | -| F1 | 94.80% | +| F1 | 94.82% | | Unique rules detected | 238 | -| Perfect templates | 494/665 | +| Perfect templates | 495/665 | | Location mismatches (matched pairs) | 9 | ### By Severity | Severity | TP | FP | EE | FN | Precision | Recall | |----------|---:|---:|---:|---:|----------:|-------:| -| Fatal | 447 | 14 | 81 | 145 | 96.96% | 75.51% | -| Error | 856 | 63 | 12 | 140 | 93.14% | 85.94% | +| Fatal | 447 | 13 | 81 | 145 | 97.17% | 75.51% | +| Error | 856 | 62 | 12 | 140 | 93.25% | 85.94% | | Warning | 2080 | 0 | 371 | 61 | 100.00% | 97.15% | | Info | 670 | 12 | 7793 | 10 | 98.24% | 98.53% | @@ -1040,7 +1040,7 @@ but found another document - **W6001** → `Outputs.ImportedValue.Value.Fn::ImportValue` L39 in `good_output_value_string_yaml` > The output value {'Fn::ImportValue': 'SomeExportedName'} is an import from another output -## False Positives - 89 extra findings across 15 rules +## False Positives - 87 extra findings across 15 rules These are diagnostics the engine reports but cfn-lint does not expect (potential bugs). @@ -1220,31 +1220,27 @@ These are diagnostics the engine reports but cfn-lint does not expect (potential - **F3016** `NoValuePoliciesWithoutTransform` (AWS::SQS::Queue) → `DeletionPolicy` L64 in `bad_lifecycle_policy_shapes_yaml` > DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null -### E3510 - 3 extra - Validate identity based IAM polices +### E3029 - 2 extra - Validate Route53 record set aliases + +- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` + > AliasTarget cannot be used with record type 'NS' +- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` + > AliasTarget cannot be used with record type 'SOA' + +### E3510 - 2 extra - Validate identity based IAM polices -- **E3510** `rIamPolicy` (AWS::IAM::Policy) → `Properties.PolicyDocument` L38 in `bad_resources_iam_iam_policy_yaml` - > [{"Statement":{}}] is not of type 'object' - **E3510** `PolicyBadIdAndCondition` (AWS::IAM::RolePolicy) → `Properties.PolicyDocument.Id` L47 in `bad_resources_iam_identity_policy_e3510_yaml` > Additional properties are not allowed ('Id' was unexpected) - **E3510** `WildcardServicePolicy` (AWS::IAM::ManagedPolicy) → `Properties.PolicyDocument.Statement.0.Resource` L13 in `bad_resources_iam_identity_policy_wildcard_service_yaml` > 'arn:aws:*:::example-bucket/*' does not match '^(arn:(aws[A-Za-z\-]*?|[A-Za-z?*\-]*[?*][A-Za-z?*\-]*):[^:*?]+:[^:]*(:(?:\d{12}|\*|aws)?:.+|)|\*)$' -### F3017 - 3 extra - Check Properties that need at least one of a list of properties +### F3017 - 2 extra - Check Properties that need at least one of a list of properties -- **F3017** `Topic` (AWS::SNS::Topic) → `Properties.KmsMasterKeyId` L11 in `bad_hardcoded_partition_yaml` - > Value is not valid under any of the 3 anyOf schemas (0 branches matched; at least one is required). Branch failures: branch 1: 'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS - **F3017** `JoinedUsername` (AWS::RDS::DBCluster) → `Properties.MasterUsername` L9 in `bad_resources_rds_not_enum_master_username_join_yaml` > 'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin'] - **F3017** `MyDB` (AWS::RDS::DBCluster) → `Properties.MasterUsername` L7 in `bad_resources_rds_not_enum_master_username_yaml` > 'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin'] -### E3029 - 2 extra - Validate Route53 record set aliases - -- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` - > AliasTarget cannot be used with record type 'NS' -- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` - > AliasTarget cannot be used with record type 'SOA' - ### F3033 - 2 extra - Check if a string has between min and max number of values specified - **F3033** `myRepository` (AWS::CodeCommit::Repository) → `Properties.RepositoryName` L7 in `bad_resources_properties_string_size_yaml` @@ -17914,7 +17910,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9054** `CertAuth` (AWS::ACMPCA::CertificateAuthorityActivation) → `Properties.Certificate` L8 in `bad_schema_write_only_yaml` > Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput' -## Per-Template Breakdown - 171 templates with mismatches +## Per-Template Breakdown - 170 templates with mismatches ### `good_lifecycle_intrinsic_scenarios_yaml` - 16 mismatches (0 TP, 0 FP, 0 EE, 16 FN) @@ -18054,12 +18050,6 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `F2015` ×4 - EE: `F2012` ×8 -### `bad_resources_iam_iam_policy_yaml` - 4 mismatches (20 TP, 1 FP, 4 EE, 3 FN) - -- FN: `F3003` ×3 -- FP: `E3510` -- EE: `E1028`, `I9001`, `I9040`, `W2512` - ### `bad_resources_iam_resource_policy_yaml` - 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) - FN: `E3513` ×4 @@ -18135,6 +18125,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FP: `E3639` ×3 - EE: `I9001` ×10, `I9040` ×7, `F3003` +### `bad_resources_iam_iam_policy_yaml` - 3 mismatches (20 TP, 0 FP, 4 EE, 3 FN) + +- FN: `F3003` ×3 +- EE: `E1028`, `I9001`, `I9040`, `W2512` + ### `bad_resources_properties_string_size_yaml` - 3 mismatches (3 TP, 2 FP, 3 EE, 1 FN) - FN: `E3065` @@ -18473,11 +18468,6 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E1017` - EE: `I9001` ×8, `I9040` ×4 -### `bad_hardcoded_partition_yaml` - 1 mismatches (0 TP, 1 FP, 5 EE, 0 FN) - -- FP: `F3017` -- EE: `I9001` ×2, `I9040` ×2, `W9013` - ### `bad_invalid_mapping_structure_yaml` - 1 mismatches (1 TP, 0 FP, 2 EE, 1 FN) - FN: `E7001` @@ -18797,9 +18787,9 @@ other tool's output. They are excluded from precision/recall scoring. | Cause | Count | % of FP | Rules | |-------|------:|--------:|-------| -| Other | 48 | 53.93% | E0001, F0018, F2002, F3016, F3017, F3033 | -| Over-reporting property/intrinsic errors | 29 | 32.58% | E1155, E3001, E3019, E3022, E3029, E3055, E3510, E3639 | -| Stricter than cfn-lint (informational) | 12 | 13.48% | I3011 | +| Other | 47 | 54.02% | E0001, F0018, F2002, F3016, F3017, F3033 | +| Over-reporting property/intrinsic errors | 28 | 32.18% | E1155, E3001, E3019, E3022, E3029, E3055, E3510, E3639 | +| Stricter than cfn-lint (informational) | 12 | 13.79% | I3011 | ## Location Mismatches - 9 matched pairs disagree on line diff --git a/scripts/snapshots/report_rego_detailed.md b/scripts/snapshots/report_rego_detailed.md index 76c82a08..fed76f37 100644 --- a/scripts/snapshots/report_rego_detailed.md +++ b/scripts/snapshots/report_rego_detailed.md @@ -1,6 +1,6 @@ # cloudformation-validate vs cfn-lint - Parity Report -> Generated: 2026-09-02 18:43:01 +> Generated: 2026-09-03 11:08:29 > Engine: **rego** > Detail level: **detailed** > Matching: `(rule_id, resource_id, path)` two-pass with `(rule_id, resource_id)` fallback + aliases @@ -23,22 +23,22 @@ | Metric | Value | |--------|------:| | True Positives | 4053 | -| False Positives (engine bugs) | 89 | +| False Positives (engine bugs) | 87 | | Engine Extra (correct, cfn-lint gap) | 8257 | | False Negatives (engine misses) | 356 | -| Precision | 97.85% | +| Precision | 97.90% | | Recall | 91.93% | -| F1 | 94.80% | +| F1 | 94.82% | | Unique rules detected | 238 | -| Perfect templates | 494/665 | +| Perfect templates | 495/665 | | Location mismatches (matched pairs) | 9 | ### By Severity | Severity | TP | FP | EE | FN | Precision | Recall | |----------|---:|---:|---:|---:|----------:|-------:| -| Fatal | 447 | 14 | 81 | 145 | 96.96% | 75.51% | -| Error | 856 | 63 | 12 | 140 | 93.14% | 85.94% | +| Fatal | 447 | 13 | 81 | 145 | 97.17% | 75.51% | +| Error | 856 | 62 | 12 | 140 | 93.25% | 85.94% | | Warning | 2080 | 0 | 371 | 61 | 100.00% | 97.15% | | Info | 670 | 12 | 7793 | 10 | 98.24% | 98.53% | @@ -1040,7 +1040,7 @@ but found another document - **W6001** → `Outputs.ImportedValue.Value.Fn::ImportValue` L39 in `good_output_value_string_yaml` > The output value {'Fn::ImportValue': 'SomeExportedName'} is an import from another output -## False Positives - 89 extra findings across 15 rules +## False Positives - 87 extra findings across 15 rules These are diagnostics the engine reports but cfn-lint does not expect (potential bugs). @@ -1220,31 +1220,27 @@ These are diagnostics the engine reports but cfn-lint does not expect (potential - **F3016** `NoValuePoliciesWithoutTransform` (AWS::SQS::Queue) → `DeletionPolicy` L64 in `bad_lifecycle_policy_shapes_yaml` > DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null -### E3510 - 3 extra - Validate identity based IAM polices +### E3029 - 2 extra - Validate Route53 record set aliases + +- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` + > AliasTarget cannot be used with record type 'NS' +- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` + > AliasTarget cannot be used with record type 'SOA' + +### E3510 - 2 extra - Validate identity based IAM polices -- **E3510** `rIamPolicy` (AWS::IAM::Policy) → `Properties.PolicyDocument` L38 in `bad_resources_iam_iam_policy_yaml` - > [{"Statement":{}}] is not of type 'object' - **E3510** `PolicyBadIdAndCondition` (AWS::IAM::RolePolicy) → `Properties.PolicyDocument.Id` L47 in `bad_resources_iam_identity_policy_e3510_yaml` > Additional properties are not allowed ('Id' was unexpected) - **E3510** `WildcardServicePolicy` (AWS::IAM::ManagedPolicy) → `Properties.PolicyDocument.Statement.0.Resource` L13 in `bad_resources_iam_identity_policy_wildcard_service_yaml` > 'arn:aws:*:::example-bucket/*' does not match '^(arn:(aws[A-Za-z\-]*?|[A-Za-z?*\-]*[?*][A-Za-z?*\-]*):[^:*?]+:[^:]*(:(?:\d{12}|\*|aws)?:.+|)|\*)$' -### F3017 - 3 extra - Check Properties that need at least one of a list of properties +### F3017 - 2 extra - Check Properties that need at least one of a list of properties -- **F3017** `Topic` (AWS::SNS::Topic) → `Properties.KmsMasterKeyId` L11 in `bad_hardcoded_partition_yaml` - > Value is not valid under any of the 3 anyOf schemas (0 branches matched; at least one is required). Branch failures: branch 1: 'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS - **F3017** `JoinedUsername` (AWS::RDS::DBCluster) → `Properties.MasterUsername` L9 in `bad_resources_rds_not_enum_master_username_join_yaml` > 'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin'] - **F3017** `MyDB` (AWS::RDS::DBCluster) → `Properties.MasterUsername` L7 in `bad_resources_rds_not_enum_master_username_yaml` > 'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin'] -### E3029 - 2 extra - Validate Route53 record set aliases - -- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` - > AliasTarget cannot be used with record type 'NS' -- **E3029** `ConditionalInvalidAliasTypes` (AWS::Route53::RecordSet) → `Properties.AliasTarget` L48 in `bad_route53_conditional_scenarios_yaml` - > AliasTarget cannot be used with record type 'SOA' - ### F3033 - 2 extra - Check if a string has between min and max number of values specified - **F3033** `myRepository` (AWS::CodeCommit::Repository) → `Properties.RepositoryName` L7 in `bad_resources_properties_string_size_yaml` @@ -17914,7 +17910,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9054** `CertAuth` (AWS::ACMPCA::CertificateAuthorityActivation) → `Properties.Certificate` L8 in `bad_schema_write_only_yaml` > Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput' -## Per-Template Breakdown - 171 templates with mismatches +## Per-Template Breakdown - 170 templates with mismatches ### `good_lifecycle_intrinsic_scenarios_yaml` - 16 mismatches (0 TP, 0 FP, 0 EE, 16 FN) @@ -18054,12 +18050,6 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `F2015` ×4 - EE: `F2012` ×8 -### `bad_resources_iam_iam_policy_yaml` - 4 mismatches (20 TP, 1 FP, 4 EE, 3 FN) - -- FN: `F3003` ×3 -- FP: `E3510` -- EE: `E1028`, `I9001`, `I9040`, `W2512` - ### `bad_resources_iam_resource_policy_yaml` - 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) - FN: `E3513` ×4 @@ -18135,6 +18125,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FP: `E3639` ×3 - EE: `I9001` ×10, `I9040` ×7, `F3003` +### `bad_resources_iam_iam_policy_yaml` - 3 mismatches (20 TP, 0 FP, 4 EE, 3 FN) + +- FN: `F3003` ×3 +- EE: `E1028`, `I9001`, `I9040`, `W2512` + ### `bad_resources_properties_string_size_yaml` - 3 mismatches (3 TP, 2 FP, 3 EE, 1 FN) - FN: `E3065` @@ -18473,11 +18468,6 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E1017` - EE: `I9001` ×8, `I9040` ×4 -### `bad_hardcoded_partition_yaml` - 1 mismatches (0 TP, 1 FP, 5 EE, 0 FN) - -- FP: `F3017` -- EE: `I9001` ×2, `I9040` ×2, `W9013` - ### `bad_invalid_mapping_structure_yaml` - 1 mismatches (1 TP, 0 FP, 2 EE, 1 FN) - FN: `E7001` @@ -18797,9 +18787,9 @@ other tool's output. They are excluded from precision/recall scoring. | Cause | Count | % of FP | Rules | |-------|------:|--------:|-------| -| Other | 48 | 53.93% | E0001, F0018, F2002, F3016, F3017, F3033 | -| Over-reporting property/intrinsic errors | 29 | 32.58% | E1155, E3001, E3019, E3022, E3029, E3055, E3510, E3639 | -| Stricter than cfn-lint (informational) | 12 | 13.48% | I3011 | +| Other | 47 | 54.02% | E0001, F0018, F2002, F3016, F3017, F3033 | +| Over-reporting property/intrinsic errors | 28 | 32.18% | E1155, E3001, E3019, E3022, E3029, E3055, E3510, E3639 | +| Stricter than cfn-lint (informational) | 12 | 13.79% | I3011 | ## Location Mismatches - 9 matched pairs disagree on line diff --git a/scripts/snapshots/rule_categorization_audit.md b/scripts/snapshots/rule_categorization_audit.md index a9629ed8..53475b1d 100644 --- a/scripts/snapshots/rule_categorization_audit.md +++ b/scripts/snapshots/rule_categorization_audit.md @@ -5,11 +5,11 @@ severity model documented in `product.md`. ## Summary -- Total rules: **302** -- By severity: Fatal=69, Error=148, Warn=63, Info=22 -- By true origin: CfnLint=203, Engine=29, Engine(collision)=1, Schema=69 -- By category: BestPractice=49, Deprecation=8, Intrinsic=52, Parameter=8, Reference=2, Resource=87, Schema=25, Security=14, Structure=57 -- cfn-lint reference: 322 rule IDs loaded +- Total rules: **303** +- By severity: Fatal=69, Error=148, Warn=64, Info=22 +- By true origin: CfnLint=204, Engine=29, Engine(collision)=1, Schema=69 +- By category: BestPractice=50, Deprecation=8, Intrinsic=52, Parameter=8, Reference=2, Resource=87, Schema=25, Security=14, Structure=57 +- cfn-lint reference: 323 rule IDs loaded - E→F promoted rules: 51 - Engine-extra rules: 60 @@ -29,10 +29,11 @@ True origin is computed by checking cfn-lint source, not the registry's For non-Fatal CfnLint-origin rules, our description should align with cfn-lint's `shortdesc`. Fatal rules are exempt -### Hard mismatches (3) - likely different rule +### Hard mismatches (4) - likely different rule | ID | Sev | Sim | Our description | cfn-lint shortdesc | |----|-----|----:|------------------|--------------------| +| `E3001` | Error | 0.00 | Basic CloudFormation Resource Check | SAM resource-level properties are ignored | | `E1022` | Error | 0.09 | Fn::Join requires a string delimiter and a list of strings or string-producing intrinsics | Join validation of parameters | | `E1024` | Error | 0.09 | Fn::Cidr requires a CIDR-format ipBlock string and integer count/cidrBits | Cidr validation of parameters | | `E1031` | Error | 0.09 | Fn::ToJsonString argument must be a non-empty array/object or a supported function | ToJsonString validation of parameters | @@ -122,10 +123,10 @@ schema-validator extensions or Fatal schema rules). | `E3721` | Error | Validate ReplicaMode value for Oracle and Db2 engines | DbInstanceReplicaMode.py | | `E3722` | Error | Cookies Forward must be a valid enum when CachePolicyId is absent | DistributionCacheBehaviorForwardEnum.py | | `E3723` | Error | ResourcePath must start with / when method settings are configured | StageMethodSettingsResourcePath.py | -| `E3724` | Error | Validate Globals section | GlobalsTransform.py | +| `E3724` | Error | Validate Globals section and IgnoreGlobals entries | GlobalsTransform.py | | `W1034` | Warn | Validate the values that come from a Fn::FindInMap function | FindInMapResolved.py | | `W1036` | Warn | Validate the values that come from a Fn::GetAZs function | GetAzResolved.py | -| `W2002` | Warn | Parameter type is not officially supported by CloudFormation | UnsupportedParameterType.py | +| `W3001` | Warn | SAM resource-level properties are ignored | Configuration.py | | `W3699` | Warn | ReplicaMode is ignored for non-Oracle/Db2 engines | DbInstanceReplicaModeIgnored.py | | `W3700` | Warn | Non-standard Domain values are converted to vpc | EipDomain.py | | `W3701` | Warn | SSM Parameter Name should not use /aws/ or /ssm/ prefix | ParameterNamePrefix.py | @@ -243,7 +244,7 @@ Same rule ID emitted with semantically different messages. **`E3048`** - registry: "Validate ECS Fargate tasks have required properties and values" - Cluster 1 (4 sites): "Fargate requires NetworkMode to be specified as 'awsvpc'" -- Cluster 2 (1 sites): "Fargate Cpu value {} is not valid. Must be one of {}" +- Cluster 2 (1 sites): "Fargate Cpu value {} is not valid. Valid sizes are {} CPU units or {} vCPU." - Cluster 3 (2 sites): "Fargate does not support PlacementConstraints" **`E3671`** - registry: "Validate block device mapping configuration" @@ -303,7 +304,7 @@ with `cargo test -p cfn-validate --test engine_parity` for ground truth. **CEL only (2):** `E3023`, `E3510` -_Scanned 257 CEL sites (195 IDs), 279 Rego sites (193 IDs)._ +_Scanned 259 CEL sites (196 IDs), 283 Rego sites (194 IDs)._ ## Appendix: full rule inventory @@ -561,6 +562,7 @@ _Scanned 257 CEL sites (195 IDs), 279 Rego sites (193 IDs)._ | `W1102` | Warn | BestPractice | Engine | Engine | Invalid intrinsic function usage | | `W1103` | Warn | Intrinsic | Engine | Engine(collision) | Unknown intrinsic function name | | `W2001` | Warn | BestPractice | CfnLint | CfnLint | Check if Parameters are Used | +| `W2002` | Warn | BestPractice | CfnLint | CfnLint | Parameter type is not officially supported by CloudFormation | | `W2010` | Warn | Security | CfnLint | CfnLint | NoEcho parameters are not masked when used in Metadata and Outputs | | `W2501` | Warn | Security | CfnLint | CfnLint | Check if Password Properties are correctly configured | | `W2502` | Warn | BestPractice | Engine | Engine | DependsOn conditional resource without matching condition | diff --git a/src/cel-engine/src/rules/structure.rs b/src/cel-engine/src/rules/structure.rs index 0406a1a6..252b7ced 100644 --- a/src/cel-engine/src/rules/structure.rs +++ b/src/cel-engine/src/rules/structure.rs @@ -213,7 +213,21 @@ fn eval_structure(ctx: &EvalContext) -> Vec { )); } - if !is_valid_parameter_type(¶m.param_type, &ctx.cached_data.rule_tables.valid_parameter_types) { + let is_documented = + is_valid_parameter_type(¶m.param_type, &ctx.cached_data.rule_tables.valid_parameter_types); + if !is_documented && is_accepted_undocumented_parameter_type(¶m.param_type) { + out.push(make_resource_diagnostic( + "W2002", + &format!( + "Parameter '{}' Type '{}' is accepted by CloudFormation but is not officially documented; CloudFormation will not validate its values", + pname, param.param_type + ), + m, + "", + &format!("{}/Type", param_path), + None, + )); + } else if !is_documented { out.push(make_resource_diagnostic( "F2002", &format!("Parameter '{}' has invalid Type '{}'", pname, param.param_type), @@ -1121,10 +1135,35 @@ fn non_string_policy_shape(value: &serde_json::Value) -> Option<&'static str> { } } +const SSM_PARAMETER_VALUE_TYPE_PREFIX: &str = "AWS::SSM::Parameter::Value<"; +const LIST_PARAMETER_TYPE_PREFIX: &str = "List<"; + fn is_valid_parameter_type(ptype: &str, valid_types: &[String]) -> bool { valid_types.iter().any(|t| t == ptype) } +fn wrapped_type<'a>(parameter_type: &'a str, prefix: &str) -> Option<&'a str> { + parameter_type.strip_prefix(prefix)?.strip_suffix('>').filter(|inner| !inner.is_empty()) +} + +fn is_aws_specific_parameter_type(parameter_type: &str) -> bool { + let mut segments = parameter_type.split("::"); + segments.next() == Some("AWS") + && segments.next().is_some_and(|segment| !segment.is_empty()) + && segments.next().is_some_and(|segment| !segment.is_empty()) + && segments.all(|segment| !segment.is_empty()) +} + +fn is_accepted_undocumented_parameter_type(parameter_type: &str) -> bool { + let Some(inner) = wrapped_type(parameter_type, SSM_PARAMETER_VALUE_TYPE_PREFIX) + .or_else(|| wrapped_type(parameter_type, LIST_PARAMETER_TYPE_PREFIX)) + else { + return false; + }; + let base_type = wrapped_type(inner, LIST_PARAMETER_TYPE_PREFIX).unwrap_or(inner); + is_aws_specific_parameter_type(base_type) +} + /// Checks whether a given `(resource type, source path)` pair matches one of /// the generated ImageId property slots from rule tables. The source path uses /// dotted segments (e.g. `Properties.ImageId`) while the rule table paths use @@ -1263,10 +1302,26 @@ mod tests { } #[test] - fn ssm_prefix_no_longer_a_blanket_pass() { - let types = test_valid_types(); - // Only explicitly listed SSM types are valid; arbitrary SSM types are rejected. - assert!(!is_valid_parameter_type("AWS::SSM::Parameter::Value", &types)); + fn undocumented_aws_shaped_wrappers_are_accepted() { + for parameter_type in [ + "AWS::SSM::Parameter::Value", + "AWS::SSM::Parameter::Value>", + "List", + ] { + assert!(is_accepted_undocumented_parameter_type(parameter_type)); + } + } + + #[test] + fn simple_unknown_wrapped_types_are_rejected() { + for parameter_type in [ + "AWS::SSM::Parameter::Value", + "AWS::SSM::Parameter::Value", + "AWS::SSM::Parameter::Value>", + "List", + ] { + assert!(!is_accepted_undocumented_parameter_type(parameter_type)); + } } #[test] diff --git a/src/cfn-validate/tests/resource_rule_parity.rs b/src/cfn-validate/tests/resource_rule_parity.rs index d7e0806e..e89c4e11 100644 --- a/src/cfn-validate/tests/resource_rule_parity.rs +++ b/src/cfn-validate/tests/resource_rule_parity.rs @@ -93,6 +93,44 @@ Resources: assert!(rego_findings.iter().all(|finding| !finding.contains("AWS::S3::Bucket::MODULE"))); } +#[test] +fn parameter_type_support_classification_matches_service_behavior() { + let template = r#" +Parameters: + Documented: + Type: AWS::SSM::Parameter::Value + AcceptedSsm: + Type: AWS::SSM::Parameter::Value + AcceptedSsmList: + Type: AWS::SSM::Parameter::Value> + AcceptedList: + Type: List + RejectedTest: + Type: AWS::SSM::Parameter::Value + RejectedBoolean: + Type: AWS::SSM::Parameter::Value + RejectedList: + Type: List + Invalid: + Type: NotAType +Resources: {} +"#; + let (rego, cel) = engines(); + let rego_findings = selected_findings(®o, template, &["F2002", "W2002"]); + let cel_findings = selected_findings(&cel, template, &["F2002", "W2002"]); + + assert_eq!(rego_findings, cel_findings, "parameter type diagnostics must match across engines"); + assert_eq!(rego_findings.iter().filter(|finding| finding.starts_with("W2002|")).count(), 3); + assert_eq!(rego_findings.iter().filter(|finding| finding.starts_with("F2002|")).count(), 4); + for parameter in ["AcceptedSsm", "AcceptedSsmList", "AcceptedList"] { + assert!(rego_findings.iter().any(|finding| finding.starts_with("W2002|") && finding.contains(parameter))); + } + for parameter in ["RejectedTest", "RejectedBoolean", "RejectedList", "Invalid"] { + assert!(rego_findings.iter().any(|finding| finding.starts_with("F2002|") && finding.contains(parameter))); + } + assert!(rego_findings.iter().all(|finding| !finding.contains("Parameter 'Documented'"))); +} + #[test] fn unsupported_lifecycle_attributes_have_identical_authored_paths() { let template = r#" diff --git a/src/cfn-validate/tests/snapshot_tests.rs b/src/cfn-validate/tests/snapshot_tests.rs index b06b2e5c..650305f9 100644 --- a/src/cfn-validate/tests/snapshot_tests.rs +++ b/src/cfn-validate/tests/snapshot_tests.rs @@ -181,7 +181,7 @@ fn cel_standard_matches_snapshot() { check_standard("cel", &engine); } -const EXPECTED_RULES_EVALUATED: u64 = 302; +const EXPECTED_RULES_EVALUATED: u64 = 303; #[test] fn rules_evaluated_is_full_rule_count() { diff --git a/src/rego-engine/handwritten/rego/structure/parameters.rego b/src/rego-engine/handwritten/rego/structure/parameters.rego index f57b0b59..f03d236a 100644 --- a/src/rego-engine/handwritten/rego/structure/parameters.rego +++ b/src/rego-engine/handwritten/rego/structure/parameters.rego @@ -2,9 +2,47 @@ package structure import rego.v1 -# F2002: Parameter Type must be valid _valid_param_types := {t | some t in data.rule_tables.valid_parameter_types} +_parameter_type_inner(ptype) := inner if { + startswith(ptype, "AWS::SSM::Parameter::Value<") + endswith(ptype, ">") + inner := trim_suffix(trim_prefix(ptype, "AWS::SSM::Parameter::Value<"), ">") + inner != "" +} + +_parameter_type_inner(ptype) := inner if { + startswith(ptype, "List<") + endswith(ptype, ">") + inner := trim_suffix(trim_prefix(ptype, "List<"), ">") + inner != "" +} + +_list_type_inner(ptype) := inner if { + startswith(ptype, "List<") + endswith(ptype, ">") + inner := trim_suffix(trim_prefix(ptype, "List<"), ">") + inner != "" +} + +_aws_specific_parameter_type(ptype) if { + segments := split(ptype, "::") + count(segments) >= 3 + segments[0] == "AWS" + every segment in segments { segment != "" } +} + +_accepted_undocumented_param_type(ptype) if { + inner := _parameter_type_inner(ptype) + _aws_specific_parameter_type(inner) +} + +_accepted_undocumented_param_type(ptype) if { + inner := _parameter_type_inner(ptype) + base_type := _list_type_inner(inner) + _aws_specific_parameter_type(base_type) +} + violation contains make_diag_at("F2002", "FATAL", "", sprintf("Parameters/%s/Type", [name]), sprintf("Parameter '%s' has invalid Type '%s'", [name, ptype])) if { @@ -12,6 +50,17 @@ violation contains make_diag_at("F2002", "FATAL", "", ptype := param.type ptype != null not ptype in _valid_param_types + not _accepted_undocumented_param_type(ptype) +} + +violation contains make_diag_at("W2002", "WARN", "", + sprintf("Parameters/%s/Type", [name]), + sprintf("Parameter '%s' Type '%s' is accepted by CloudFormation but is not officially documented; CloudFormation will not validate its values", [name, ptype])) if { + some name, param in input.parameters + ptype := param.type + ptype != null + not ptype in _valid_param_types + _accepted_undocumented_param_type(ptype) } # F0015: Default value must be numeric when parameter Type is Number diff --git a/src/resources/expected/validation_reports1.json b/src/resources/expected/validation_reports1.json index 5635d9e0..e9d341a2 100644 --- a/src/resources/expected/validation_reports1.json +++ b/src/resources/expected/validation_reports1.json @@ -301,7 +301,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08' and update on '2027-03-03'. Please consider updating to 'java25'", + "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", "source": "CFN_LINT", "entity": { "logicalId": "ExcludedJava8", @@ -364,7 +364,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "UnsupportedPython", @@ -9060,7 +9060,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "AMIIDLookup", @@ -15630,7 +15630,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "AMIIDLookup", diff --git a/src/resources/expected/validation_reports2.json b/src/resources/expected/validation_reports2.json index 49e00830..d9a4bb26 100644 --- a/src/resources/expected/validation_reports2.json +++ b/src/resources/expected/validation_reports2.json @@ -190,7 +190,7 @@ "metadata": { "resourcesScanned": 2, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 1, "informational": 4, @@ -201,65 +201,6 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas (0 branches matched; at least one is required). Branch failures: branch 1: 'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Key.Arn'; branch 2: 'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Key.Id'; branch 3: 'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Alias.AliasName'.", - "source": "SCHEMA", - "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.KmsMasterKeyId", - "category": "Schema", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "actualValue": "arn:aws:kms:us-east-1:123456789012:key/12345", - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Key.Arn'", - "propertyPath": "Properties.KmsMasterKeyId" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Key.Id'", - "propertyPath": "Properties.KmsMasterKeyId" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'arn:aws:kms:us-east-1:123456789012:key/12345' does not match format 'AWS::KMS::Alias.AliasName'", - "propertyPath": "Properties.KmsMasterKeyId" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches" - } - } - }, { "ruleId": "W9013", "severity": "WARN", @@ -81403,7 +81344,7 @@ "resourcesScanned": 4, "counts": { "fatal": 4, - "errors": 18, + "errors": 17, "warnings": 1, "informational": 2, "debug": 0 @@ -81749,25 +81690,6 @@ "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[{\"Statement\":[]}] is not of type 'object'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rIamPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument", - "category": "Resource", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, { "ruleId": "E3510", "severity": "ERROR", @@ -83295,7 +83217,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30' and update on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "myLambdaFunction", @@ -83318,7 +83240,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30' and update on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "myLambdaFunction2", @@ -83341,7 +83263,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30' and update on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "myLambdaFunction3", @@ -83567,7 +83489,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "Function2", @@ -84919,7 +84841,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "ExampleLambda", @@ -84942,7 +84864,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "ExampleLambda1", @@ -85308,7 +85230,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python2.7' was deprecated on '2021-07-15'. Creation was disabled on '2021-07-15' and update on '2022-05-30'. Please consider updating to 'python3.14'", + "message": "Runtime 'python2.7' was deprecated on '2021-07-15'. Creation was disabled on '2021-07-15', and updates were disabled on '2022-05-30'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "SampleLambda", diff --git a/src/resources/expected/validation_reports3.json b/src/resources/expected/validation_reports3.json index 5faed343..4ac97274 100644 --- a/src/resources/expected/validation_reports3.json +++ b/src/resources/expected/validation_reports3.json @@ -6698,7 +6698,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05' and update on '2022-04-13'. Please consider updating to 'dotnet10'", + "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'", "source": "CFN_LINT", "entity": { "logicalId": "EolLambda", @@ -6757,7 +6757,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "DeprecatedLambda", @@ -8837,7 +8837,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionA", @@ -8860,7 +8860,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionB", @@ -8883,7 +8883,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionC", @@ -8906,7 +8906,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "LogSubscriptionFunction", @@ -12297,7 +12297,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "AppFunction", @@ -12682,7 +12682,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "consumerlambdaFunctionBD0C2D50", @@ -12705,7 +12705,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", @@ -12728,7 +12728,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", @@ -13821,7 +13821,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "getOneItemFunctionE3257B22", @@ -13844,7 +13844,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "getAllItemsFunction0B7A913E", @@ -13867,7 +13867,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "createItemFunction8D47E48A", @@ -13890,7 +13890,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "updateItemFunction59415205", @@ -13913,7 +13913,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "deleteItemFunction2918B1B0", @@ -15989,7 +15989,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "apigwasynclambdafnAD6250E4", @@ -16810,7 +16810,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "operationallambdaFE43E13E", @@ -16833,7 +16833,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "authenticationlambdaDD3A2252", @@ -17602,7 +17602,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "lambdafunction1A09FC241", @@ -17625,7 +17625,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "lambdafunction2F899168D", @@ -23101,7 +23101,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Construct1StandardFunctionD5361E84", @@ -23124,7 +23124,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Construct1FunctionWithReservedCEs6458B719", @@ -23147,7 +23147,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Construct2StandardFunction1EBDBFFA", @@ -23170,7 +23170,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Construct2FunctionWithReservedCEs89864BB2", diff --git a/src/resources/expected/validation_reports4.json b/src/resources/expected/validation_reports4.json index 739ba0b5..c38d23ac 100644 --- a/src/resources/expected/validation_reports4.json +++ b/src/resources/expected/validation_reports4.json @@ -6017,7 +6017,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "BuildLambda72E2A667", @@ -8622,7 +8622,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "helloWorldFunction00C940B5", @@ -9260,7 +9260,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", @@ -9445,7 +9445,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", @@ -9690,7 +9690,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "itemL2TableLambdaFunction1987B4C5", @@ -9713,7 +9713,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "itemL3TableLambdaFunction7B818C58", @@ -11236,7 +11236,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "EICEndpointonEventHandlerC2E1F5F2", @@ -11259,7 +11259,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "EICEndpointisCompleteHandler0273707A", @@ -26309,7 +26309,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "Singleton8C7B99F3", @@ -27918,7 +27918,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Inspector2InitialScanHandler460C9991", @@ -27941,7 +27941,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "Inspector2FindingHandler1F85FFBC", @@ -28383,7 +28383,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "SampleLambdaB2FF4FA1", @@ -28588,7 +28588,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "Singleton8C7B99F3", @@ -29089,7 +29089,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "S3EventNotificationsLambda20F17D80", @@ -29233,7 +29233,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "WidgetsWidgetHandler1BC9DB34", @@ -30561,7 +30561,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", @@ -30584,7 +30584,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", @@ -31641,7 +31641,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "DynamoLambdaHandlerFB6EB814", @@ -32250,7 +32250,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "destinedLambda8DF776BB", @@ -32273,7 +32273,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "SuccessLambdaHandler0E2CD797", @@ -32296,7 +32296,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "FailureLambdaHandlerBB58C051", @@ -33506,7 +33506,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", @@ -34166,7 +34166,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "atmProducerLambda71029F8F", @@ -34189,7 +34189,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "atmConsumer1LambdaC3C4DA46", @@ -34212,7 +34212,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "atmConsumer2LambdaB7E263A7", @@ -34235,7 +34235,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "atmConsumer3Lambda880BEEDF", @@ -35587,7 +35587,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", @@ -35610,7 +35610,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "ErrorLambdaHandler4224322A", @@ -36664,7 +36664,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30' and update on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", @@ -36687,7 +36687,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "extractLambdaHandlerD06B8F09", @@ -36710,7 +36710,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "TransformLambdaHandler60ABE8EE", @@ -36733,7 +36733,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LoadLambdaHandlerFDA03D53", @@ -36756,7 +36756,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "ObserveLambdaHandler685FFDBB", @@ -38917,7 +38917,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "UnreliableLambdaHandlerD4A4DED9", @@ -39326,7 +39326,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "reserveFlightLambdaHandler3C75473D", @@ -39349,7 +39349,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "confirmFlightLambdaHandler96C3663F", @@ -39372,7 +39372,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "cancelFlightLambdaHandler437EEC76", @@ -39395,7 +39395,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "reserveHotelLambdaHandler020AE24A", @@ -39418,7 +39418,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "confirmHotelLambdaHandler882ACF2D", @@ -39441,7 +39441,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "cancelHotelLambdaHandler09F13EF6", @@ -39464,7 +39464,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "takePaymentLambdaHandlerB96529D4", @@ -39487,7 +39487,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "refundPaymentLambdaHandler932D11D5", @@ -39510,7 +39510,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "sagaLambdaHandlerFC24742F", @@ -40916,7 +40916,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "SQSPublishLambdaHandler51EE31BE", @@ -40939,7 +40939,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "SQSSubscribeLambdaHandlerBBB58615", @@ -42001,7 +42001,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "scheduledLambda8A84450D", @@ -42273,7 +42273,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LoyaltyLambdaHandler5918F0DA", @@ -43168,7 +43168,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "DynamoLambdaHandlerFB6EB814", @@ -43577,7 +43577,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "pineappleCheckLambdaHandlerFDB742D5", @@ -43957,7 +43957,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "HelloWorldHandler30C22324", @@ -44640,7 +44640,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "DynamoLambdaHandlerFB6EB814", @@ -44987,7 +44987,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "httpLambdaHandler66D9C9A8", @@ -45292,7 +45292,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "sqsLambdaHandler0DD5DF9B", @@ -45315,7 +45315,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "sqsSubscribeLambdaHandlerD66392B8", @@ -45798,7 +45798,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "snsLambdaHandlerE7B0ABE3", @@ -45821,7 +45821,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31' and update on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "snsSubscriptionLambdaHandler68619CD8", @@ -46910,7 +46910,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "ApiCorsLambda5083F55F", @@ -47536,7 +47536,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "eventProducerLambda100D549C", @@ -47559,7 +47559,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "eventConsumer1Lambda4AF2292E", @@ -47582,7 +47582,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "eventConsumer2Lambda1631C47A", @@ -49102,7 +49102,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", @@ -49125,7 +49125,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -52426,7 +52426,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "producerlambdafunctionCE724CE7", @@ -52449,7 +52449,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "consumerlambdafunction40710347", @@ -58006,7 +58006,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", @@ -58029,7 +58029,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", @@ -58904,7 +58904,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "lambdafunction45C982D3", @@ -59075,7 +59075,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "submitLambda3C32AFD4", @@ -59098,7 +59098,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "statusLambdaCF47B86D", @@ -59320,7 +59320,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "UrlShortenerFunctionB5E87AC1", @@ -61490,7 +61490,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "RekFunction9837D13D", @@ -64114,7 +64114,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "retrieveTransformedObjectLambdaD5D6532C", @@ -65751,7 +65751,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "CheckLambda9CBBF9BA", @@ -65774,7 +65774,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "SubmitLambda8054545E", diff --git a/src/resources/expected/validation_reports5.json b/src/resources/expected/validation_reports5.json index 6065b3d4..2199e5b5 100644 --- a/src/resources/expected/validation_reports5.json +++ b/src/resources/expected/validation_reports5.json @@ -6199,7 +6199,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "MyFunction", @@ -10377,7 +10377,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "MyLambda", @@ -12775,7 +12775,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "AMIIDLookup", @@ -13929,7 +13929,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedArray", @@ -13952,7 +13952,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedEmpty", @@ -13975,7 +13975,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedGetAttr", @@ -13998,7 +13998,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedObject", @@ -14021,7 +14021,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedRef", @@ -14044,7 +14044,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestDefinedValue", @@ -14363,7 +14363,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestNotDefinedFromParent", @@ -14386,7 +14386,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestNotDefinedFromProperties", @@ -14409,7 +14409,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", @@ -14432,7 +14432,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", @@ -14673,7 +14673,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "TimeoutInNumericsFunction", @@ -14696,7 +14696,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "TimeoutInStringFunction", @@ -14878,7 +14878,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "TimeoutInNumericsFunction", @@ -14901,7 +14901,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "TimeoutInStringFunction", @@ -20581,7 +20581,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03' and update on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "AMIIDLookup", @@ -20708,7 +20708,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'provided.al2023'", + "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'provided.al2023'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionC", diff --git a/src/resources/expected/validation_reports6.json b/src/resources/expected/validation_reports6.json index 2dd1373d..29e921c7 100644 --- a/src/resources/expected/validation_reports6.json +++ b/src/resources/expected/validation_reports6.json @@ -2698,7 +2698,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08' and update on '2027-03-03'. Please consider updating to 'java25'", + "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", "source": "CFN_LINT", "entity": { "logicalId": "SomeLambda", @@ -3002,7 +3002,7 @@ { "ruleId": "E2531", "severity": "ERROR", - "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08' and update on '2027-03-03'. Please consider updating to 'java25'", + "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", "source": "CFN_LINT", "entity": { "logicalId": "SomeLambda", @@ -7627,7 +7627,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "Function1", @@ -10879,7 +10879,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "MyFunction", @@ -13210,7 +13210,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionA", @@ -13233,7 +13233,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionB", @@ -13256,7 +13256,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionC", @@ -13279,7 +13279,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18' and update on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "LogSubscriptionFunction", diff --git a/src/resources/expected/validation_reports7.json b/src/resources/expected/validation_reports7.json index c061616d..d5567846 100644 --- a/src/resources/expected/validation_reports7.json +++ b/src/resources/expected/validation_reports7.json @@ -982,7 +982,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "TestLambdaFunction", @@ -1697,7 +1697,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12' and update on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "myFunction", @@ -1759,7 +1759,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12' and update on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "InheritsGlobalsFunction", @@ -9250,7 +9250,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunction", @@ -10177,7 +10177,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "LambdaFunction", @@ -13345,7 +13345,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12' and update on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "PollerFunction", @@ -13583,7 +13583,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12' and update on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "PollerFunction", @@ -14847,7 +14847,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", @@ -14870,7 +14870,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateRootAccountRule", @@ -14893,7 +14893,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForVpcFlowLogRule", @@ -14916,7 +14916,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", @@ -14939,7 +14939,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForRoleForMfaOnUsersRule", @@ -14962,7 +14962,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluatePolicyPermissionsRule", @@ -14985,7 +14985,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", @@ -15008,7 +15008,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateCloudTrailRule", @@ -15031,7 +15031,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateCloudTrailBucketRule", @@ -15054,7 +15054,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", @@ -15077,7 +15077,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForInstanceRoleUseRule", @@ -15100,7 +15100,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateKeyRotationRule", @@ -15123,7 +15123,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", @@ -15146,7 +15146,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionForVpcPeeringRouteTablesRule", @@ -15169,7 +15169,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "GetCloudTrailCloudWatchLog", @@ -15192,7 +15192,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionToFormatCloudWatchEvent", @@ -15215,7 +15215,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "FunctionToDisableUnusedCredentials", @@ -19535,7 +19535,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30' and update on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "rAMIComplianceFunction", @@ -19558,7 +19558,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30' and update on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "rCloudTrailValidationFunction", @@ -23953,7 +23953,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30' and update on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "rAMIComplianceFunction", @@ -23976,7 +23976,7 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30' and update on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { "logicalId": "rCloudTrailValidationFunction", @@ -33493,7 +33493,7 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation was disabled on '2027-02-01' and update on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { "logicalId": "KeyGen", diff --git a/src/rules/src/registry.rs b/src/rules/src/registry.rs index e7e0826e..a7cbafed 100644 --- a/src/rules/src/registry.rs +++ b/src/rules/src/registry.rs @@ -410,6 +410,12 @@ pub const RULE_REGISTRY: &[RuleDefinition] = &[ description: "Check if Parameters are Used", origin: RuleOrigin::CfnLint, }, + RuleDefinition { + id: "W2002", + category: Category::BestPractice, + description: "Parameter type is not officially supported by CloudFormation", + origin: RuleOrigin::CfnLint, + }, RuleDefinition { id: "W7001", category: Category::BestPractice, diff --git a/src/schema-validator/src/validate.rs b/src/schema-validator/src/validate.rs index 6809bf13..e2d5c6db 100644 --- a/src/schema-validator/src/validate.rs +++ b/src/schema-validator/src/validate.rs @@ -4109,6 +4109,11 @@ fn format_value_matches(value: &str, format: &str) -> bool { } } +fn sns_kms_identifier_is_runtime_validated(model: &SemanticModel, resource_id: &str, property_path: &str) -> bool { + property_path == "Properties.KmsMasterKeyId" + && model.resource(resource_id).is_some_and(|resource| resource.resource_type == "AWS::SNS::Topic") +} + /// Validates property-level composition (anyOf/oneOf/allOf/if_then_else) when /// the property value is a scalar (no nested object keys). Uses /// `schema_value_matches` to test each concrete satisfiable scenario against @@ -4146,7 +4151,7 @@ fn validate_prop_composition( } // anyOf: at least one branch must match for each satisfiable scenario - if !schema.any_of.is_empty() { + if !schema.any_of.is_empty() && !sns_kms_identifier_is_runtime_validated(m, rid, prop_path) { for (val, conds) in scenarios { if !is_satisfiable(m, conds) || val.is_null() || defer_value_constraints(m, rid, prop_path, val, conds) { continue; @@ -4326,18 +4331,18 @@ fn validate_lifecycle(out: &mut Vec, store: &CompiledSchemaStore, mo // rule id and severity differ by how far the runtime is through // its lifecycle. The band is a snapshot taken at data-sync time. let (rule_id, band) = if lifecycle.is_runtime_eol(runtime) { - ("E2533", true) + ("E2533", Some(RuntimeLifecycleBand::EndOfLife)) } else if lifecycle.is_runtime_create_blocked(runtime) { - ("E2531", true) + ("E2531", Some(RuntimeLifecycleBand::CreateBlocked)) } else if lifecycle.is_runtime_deprecated(runtime) { - ("W2531", true) + ("W2531", Some(RuntimeLifecycleBand::Deprecated)) } else { - ("", false) + ("", None) }; - if band { + if let Some(band) = band { out.push(build_diagnostic( rule_id, - &runtime_deprecation_message(lifecycle, runtime), + &runtime_deprecation_message(lifecycle, runtime, band), model, rid, "Properties.Runtime", @@ -4349,11 +4354,21 @@ fn validate_lifecycle(out: &mut Vec, store: &CompiledSchemaStore, mo } } -/// Builds the dated runtime-deprecation message CloudFormation reports for all -/// three bands: "Runtime 'X' was deprecated on 'D'. Creation was disabled on 'C' -/// and update on 'U'. Please consider updating to 'S'". A string value renders -/// single-quoted; a missing successor renders as bare `None` (Python `repr`). -fn runtime_deprecation_message(lifecycle: &crate::store::LifecycleStore, runtime: &str) -> String { +#[derive(Clone, Copy)] +enum RuntimeLifecycleBand { + Deprecated, + CreateBlocked, + EndOfLife, +} + +/// Builds the dated runtime-deprecation message using the lifecycle band from +/// the embedded data snapshot. A string successor renders single-quoted; a +/// missing successor renders as bare `None` (Python `repr`). +fn runtime_deprecation_message( + lifecycle: &crate::store::LifecycleStore, + runtime: &str, + band: RuntimeLifecycleBand, +) -> String { let Some(dates) = lifecycle.runtime_lifecycle(runtime) else { return format!("Runtime '{}' is deprecated", runtime); }; @@ -4361,9 +4376,14 @@ fn runtime_deprecation_message(lifecycle: &crate::store::LifecycleStore, runtime Some(s) => format!("'{}'", s), None => "None".to_string(), }; + let (creation_status, update_status) = match band { + RuntimeLifecycleBand::Deprecated => ("will be disabled", "will be disabled"), + RuntimeLifecycleBand::CreateBlocked => ("was disabled", "will be disabled"), + RuntimeLifecycleBand::EndOfLife => ("was disabled", "were disabled"), + }; format!( - "Runtime '{}' was deprecated on '{}'. Creation was disabled on '{}' and update on '{}'. Please consider updating to {}", - runtime, dates.deprecated, dates.create_block, dates.update_block, successor + "Runtime '{}' was deprecated on '{}'. Creation {} on '{}', and updates {} on '{}'. Please consider updating to {}", + runtime, dates.deprecated, creation_status, dates.create_block, update_status, dates.update_block, successor ) } diff --git a/src/schema-validator/tests/integration.rs b/src/schema-validator/tests/integration.rs index 63bda2d6..c2d5072c 100644 --- a/src/schema-validator/tests/integration.rs +++ b/src/schema-validator/tests/integration.rs @@ -323,16 +323,44 @@ fn lifecycle_w3697_maintenance_service() { fn lifecycle_e2533_eol_runtime() { let diags = validate_fixture("bad/schema_lifecycle.yaml"); let e2533 = diags_for(&diags, "E2533"); - assert!(!e2533.is_empty(), "expected E2533 for EOL runtime dotnetcore2.1"); - assert!(e2533.iter().any(|d| d.message.contains("dotnetcore2.1"))); + assert!(e2533.iter().any(|diagnostic| { + diagnostic.message + == "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'" + })); } #[test] fn lifecycle_w2531_deprecated_runtime() { let diags = validate_fixture("bad/schema_lifecycle.yaml"); let w2531 = diags_for(&diags, "W2531"); - assert!(!w2531.is_empty(), "expected W2531 for deprecated runtime nodejs16.x"); - assert!(w2531.iter().any(|d| d.message.contains("nodejs16.x"))); + assert!(w2531.iter().any(|diagnostic| { + diagnostic.message + == "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'" + })); +} + +#[test] +fn lifecycle_e2531_create_blocked_runtime() { + const TEMPLATE: &[u8] = br#" +Resources: + Function: + Type: AWS::Lambda::Function + Properties: + Runtime: nodejs14.x + Handler: index.handler + Code: + ZipFile: test + Role: arn:aws:iam::123456789012:role/role +"#; + let model = Arc::new(SemanticModel::from_bytes(TEMPLATE).expect("template must parse")); + let diagnostics = SV.validate(&model, Some("us-east-1")).diagnostics; + let finding = + diagnostics.iter().find(|diagnostic| diagnostic.rule_id == "E2531").expect("create-blocked runtime finding"); + + assert_eq!( + finding.message, + "Runtime 'nodejs14.x' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'" + ); } #[test] @@ -620,15 +648,15 @@ fn every_valid_kms_key_identifier_form_passes_format_composition() { } #[test] -fn malformed_literal_kms_key_arn_is_rejected_by_format_composition() { +fn sns_kms_identifier_format_is_runtime_validated() { let diagnostics = validate_fixture("bad/hardcoded_partition.yaml"); assert!( - diagnostics.iter().any(|diagnostic| { - diagnostic.rule_id == "F3017" - && diagnostic.resource_logical_id() == Some("Topic") - && diagnostic.property_path.as_deref() == Some("Properties.KmsMasterKeyId") + diagnostics.iter().all(|diagnostic| { + diagnostic.rule_id != "F3017" + || diagnostic.resource_logical_id() != Some("Topic") + || diagnostic.property_path.as_deref() != Some("Properties.KmsMasterKeyId") }), - "the malformed literal KMS key ARN must remain rejected: {diagnostics:?}" + "SNS accepts the KMS identifier as an opaque runtime value, so its format cannot prove a fatal template failure: {diagnostics:?}" ); } diff --git a/src/template-model/src/iam_policy.rs b/src/template-model/src/iam_policy.rs index 77a07d8f..2f1001ae 100644 --- a/src/template-model/src/iam_policy.rs +++ b/src/template-model/src/iam_policy.rs @@ -664,9 +664,8 @@ pub fn validate_identity_policy_scenarios( if should_suppress_intrinsic_finding(model, resource_id, &source_path) { continue; } - // The authored path is part of identity so identical invalid values - // in separate conditional branches remain separate diagnostics. - if seen.insert((source_path.clone(), finding.message.clone())) { + let deduplication_message = scenario_finding_deduplication_message(&finding); + if seen.insert((source_path.clone(), deduplication_message)) { let public_path = public_policy_path(document_path, &source_path, &finding.path); findings.push(ScenarioPolicyFinding { path: public_path, message: finding.message, source_path }); } @@ -685,6 +684,13 @@ pub fn validate_identity_policy_scenarios( findings } +fn scenario_finding_deduplication_message(finding: &PolicyFinding) -> String { + if finding.path.is_empty() && finding.message.ends_with(" is not of type 'object'") { + "policy document is not an object".to_string() + } else { + finding.message.clone() + } +} /// Scans Resource/NotResource string values in the resolved document for raw /// CloudFormation-style `${...}` placeholders that are not IAM policy /// variables. When found and the value is NOT from Fn::Sub (checked via @@ -2132,6 +2138,32 @@ Resources: assert!(findings(doc).is_empty()); } + #[test] + fn same_authored_root_type_violation_is_reported_once_across_scenarios() { + let template = r#" +Conditions: + UseObjectStatement: !Equals [!Ref AWS::Region, us-east-1] +Resources: + Policy: + Type: AWS::IAM::Policy + Properties: + PolicyName: test + Roles: [test-role] + PolicyDocument: + - !If + - UseObjectStatement + - Statement: {} + - Statement: [] +"#; + let model = SemanticModel::from_bytes(template.as_bytes()).unwrap(); + let found = validate_identity_policy_scenarios(&model, "Policy", "Properties.PolicyDocument"); + + assert_eq!(found.len(), 1, "one authored outer-list defect must produce one finding: {found:?}"); + assert_eq!(found[0].path, ""); + assert_eq!(found[0].source_path, "Properties.PolicyDocument"); + assert!(found[0].message.ends_with(" is not of type 'object'")); + } + // ===== E3510 Scenario Gap Tests ===== /// Identical conditional branches each produce their own finding (no dedup).