Skip to content

audit: nested-key critic blind spots found by the 0809 sweep — mixed-case SDK models, file-global literal heuristic, missing targets, selective sub-key forwards #1393

Description

@go-to-k

Summary

The 2026-08-09 horizontal sweep of the #1370 class (run with the #1373 critic's own machinery against ALL registered types' live CFn schemas) surfaced bugs the current critic design cannot see. Follow-up work to close the blind spots, complementing #1378 (shape-level v2):

1. Mixed-case SDK models defeat the single per-target keyStyle

NESTED_KEY_TARGETS assumes a whole client is exact (PascalCase) or lower-first (camelCase). But client-eventbridge, client-scheduler, and client-glue are PascalCase models with camelCase ISLANDS (awsvpcConfiguration, capacityProvider, type/field/expression, scanRate/scanAll). An extra classification bucket — "exact-case miss but case-insensitive hit" — is what surfaced the EventBridge/Scheduler Fargate-target create failures and the Glue Crawler drops in the sweep. The critic should flag case-insensitive near-misses REGARDLESS of the target's declared keyStyle (it already has the case-divergence bucket; the gap is that non-target types aren't audited at all and keyStyle hides islands).

2. "Provider names the literal anywhere" heuristic is file-global

The DynamoDB GlobalTable GSI divergence (WriteProvisionedThroughputSettings etc.) was cleared by the literal heuristic because the same key names occur legitimately handled at TOP level elsewhere in the file. Literal evidence should be scoped (per handled top-level property, or at least weighted) — or such known-divergent blobs get explicit allow/deny entries.

3. Extend NESTED_KEY_TARGETS to the remaining blob-forwarding providers

The sweep produced ready-made nested-schema captures for all 133 registered types (fetched via cloudformation:DescribeType). Candidates found to carry real divergences: AWS::Events::Rule, AWS::Scheduler::Schedule, AWS::EMR::Cluster (+ InstanceGroupConfig/InstanceFleetConfig), AWS::Lambda::EventSourceMapping (map-key enum), AWS::CodeBuild::Project, AWS::DynamoDB::GlobalTable, AWS::Glue::Table / ::Crawler, AWS::WAFv2::WebACL, AWS::ECR::Repository, AWS::S3Vectors::VectorBucket (wrong CFn-side spelling — a read-side variant), AWS::Cognito::UserPool. Each has (or will have) its own bug issue; this issue tracks bringing them under the critic so the class stays closed.

4. SDK-bump-dependent unmappable keys (allow-list candidates)

Keys with NO member in the pinned SDK — unmappable until an SDK bump, should be allow-listed with rationale so they surface on every regen instead of silently passing:

  • AWS::Cognito::UserPool SmsConfiguration.EumsSms.* (End-User-Messaging SMS block; installed SmsConfigurationType has only SnsCallerArn/ExternalId/SnsRegion)
  • AWS::Lambda::Function / ::LayerVersion Code.S3ObjectStorageMode
  • AWS::WAFv2::WebACL PreParseTextTransformations, Monetize/PriceMultiplier
  • AWS::CodeBuild::Project Environment.HostKernel

5. Selective sub-key forward gaps are invisible to spelling diffs

The Cognito Policies.SignInPolicy drop (same-spelling SDK member exists; the provider just never forwards it) is a class the spelling critic structurally cannot catch — it needs the per-sub-key coverage idea: for a handled blob, every CFn nested key should be either reachable (same-spelling pass-through/spread), explicitly named, or allow-listed. The current critic treats "same spelling exists in SDK" as green even when the provider hand-builds the object and omits the key. Detecting hand-built-object omission likely needs the shape-aware v2 (#1378) machinery.

Related: #1373 (v1 critic), #1378 (shape-level v2), and the individual bug issues from the same sweep.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions