Skip to content
cdkd

CC-API enrichment-coverage matrix

Classifies every CC-routable resource type (whose CFn schema is cached under tests/fixtures/cfn-schemas/) by whether its computed readOnly Fn::GetAtt attributes are populated by CloudControlProvider.enrichResourceAttributes. A computed attribute that is NOT enriched silently falls through the intrinsic resolver to the physicalId (the bug class fixed in #844 / #864 / #865 / #866).

Gap severity depends on the tier. A gap on an SDK-backed type (sdk-fallback-gap) is only exposed on the #614 silent-drop CC-fallback path — the SDK provider populates the attribute on the primary path — so it is informational and does NOT fail CI. A gap on a pure-CC type (unenriched-computed, no SDK provider) is the real bug class: the CC path is the only path, so the attribute would always fall through. The audit:enrichment-coverage:check critic hard-fails ONLY on unenriched-computed.

NOTE: every cached schema today is an SDK-backed (Tier 1) type — the fixture refresh only fetches registered providers — so the critic currently has 0 hard gaps by construction. It becomes load-bearing the moment a pure-CC type's schema is cached (e.g. AWS::ElastiCache::ReplicationGroup, AWS::Redshift::Cluster, AWS::OpenSearchService::Domain).

Summary

  • Classified types (cached schema): 134
  • Fully enriched: 50
  • No computed attribute (Ref == physicalId is correct): 15
  • Pure-CC latent gaps (unenriched-computed, blocks CI): 0
  • SDK-fallback gaps (informational, #614 path only): 69
  • Types with allow-listed (not-a-gap) attributes: 87

Pure-CC latent gaps

None. Every computed readOnly attribute on a cached pure-CC type is either enriched or explicitly allow-listed.

SDK-fallback gaps (informational)

SDK-backed types whose computed attribute is unenriched: only exposed on the #614 silent-drop CC-fallback path. Tracked so a future #614-hardening pass can prioritise; does not block CI.

Resource type Unenriched computed attributes (CC-fallback only)
AWS::ApiGatewayV2::Api ApiEndpoint
AWS::AppSync::ApiKey ApiKey, Arn
AWS::AppSync::GraphQLApi Arn, GraphQLDns, GraphQLEndpointArn, GraphQLUrl, RealtimeDns, RealtimeUrl
AWS::AutoScaling::AutoScalingGroup AutoScalingGroupARN
AWS::BedrockAgentCore::Browser BrowserId, Name, Status
AWS::BedrockAgentCore::CodeInterpreter CodeInterpreterId, Status
AWS::BedrockAgentCore::Evaluator CreatedAt, EvaluatorId, Status, UpdatedAt
AWS::BedrockAgentCore::Runtime AgentRuntimeArn, AgentRuntimeVersion, CreatedAt, FailureReason, LastUpdatedAt, Status, WorkloadIdentityDetails
AWS::CloudFormation::Stack ChangeSetId, CreationTime, LastUpdateTime, Outputs, ParentId, RootId, StackStatus
AWS::CloudFront::Distribution DomainName
AWS::CloudTrail::Trail Arn, SnsTopicArn
AWS::CloudWatch::Alarm Arn
AWS::CodeBuild::Project Arn
AWS::CodeCommit::Repository Arn, CloneUrlHttp, CloneUrlSsh, Name
AWS::Cognito::UserPool Arn, ProviderName, ProviderURL
AWS::DLM::LifecyclePolicy Arn
AWS::DocDB::DBCluster ClusterResourceId, Endpoint, ReadEndpoint
AWS::DocDB::DBInstance Endpoint, Port
AWS::DynamoDB::GlobalTable Arn, StreamArn, TableId
AWS::DynamoDB::Table Arn
AWS::EC2::Instance PrivateDnsName, PrivateIp, PublicDnsName, PublicIp, State, VpcId
AWS::EC2::NatGateway AutoProvisionZones, AutoScalingIps, EniId, RouteTableId
AWS::EC2::SecurityGroup GroupId
AWS::EC2::Subnet BlockPublicAccessStates, Ipv6CidrBlocks, NetworkAclAssociationId
AWS::EC2::VPC CidrBlockAssociations, DefaultNetworkAcl, DefaultSecurityGroup, Ipv6CidrBlocks
AWS::ECS::Cluster Arn
AWS::ECS::Service Name
AWS::EFS::AccessPoint Arn
AWS::EFS::FileSystem Arn
AWS::ElastiCache::CacheCluster ConfigurationEndpoint, RedisEndpoint
AWS::ElasticLoadBalancingV2::LoadBalancer CanonicalHostedZoneID, DNSName, LoadBalancerFullName, LoadBalancerName
AWS::ElasticLoadBalancingV2::TargetGroup LoadBalancerArns, TargetGroupFullName, TargetGroupName
AWS::EMR::Cluster MasterPublicDNS
AWS::Events::EventBus Arn
AWS::FSx::FileSystem DNSName, LustreMountName, ResourceARN, RootVolumeId
AWS::IAM::AccessKey SecretAccessKey
AWS::IAM::Group Arn
AWS::IAM::InstanceProfile Arn
AWS::IAM::ManagedPolicy AttachmentCount, CreateDate, DefaultVersionId, IsAttachable, PermissionsBoundaryUsageCount, PolicyId, UpdateDate
AWS::IAM::Role Arn, RoleId
AWS::IAM::User Arn
AWS::Kinesis::Stream WarmThroughputObject
AWS::Kinesis::StreamConsumer ConsumerCreationTimestamp, ConsumerStatus
AWS::KinesisFirehose::DeliveryStream Arn
AWS::Lambda::EventSourceMapping EventSourceMappingArn
AWS::Lambda::Function Arn, SnapStartResponse
AWS::Lambda::MicrovmImage CreatedAt, LatestActiveImageVersion, LatestFailedImageVersion, State, UpdatedAt
AWS::Logs::LogGroup Arn
AWS::Neptune::DBCluster ClusterResourceId, Endpoint, Port, ReadEndpoint
AWS::Neptune::DBInstance Endpoint, Port
AWS::RDS::DBCluster DBClusterArn, StorageEncryptionType, StorageThroughput
AWS::RDS::DBInstance AutomaticRestartTime, CertificateDetails, DBInstanceArn, DBInstanceStatus, DbiResourceId, InstanceCreateTime, IsStorageConfigUpgradeAvailable, LatestRestorableTime, ListenerEndpoint, PercentProgress, ReadReplicaDBClusterIdentifiers, ReadReplicaDBInstanceIdentifiers, ResumeFullAutomationModeTime, SecondaryAvailabilityZone, StatusInfos
AWS::RDS::DBProxy DBProxyArn, Endpoint, VpcId
AWS::RDS::DBProxyEndpoint DBProxyEndpointArn, Endpoint, IsDefault, VpcId
AWS::RDS::DBSubnetGroup DBSubnetGroupArn
AWS::Route53::HostedZone NameServers
AWS::S3::Bucket DomainName, DualStackDomainName, RegionalDomainName, WebsiteURL
AWS::S3Express::DirectoryBucket Arn, AvailabilityZoneName
AWS::S3Tables::Table VersionToken, WarehouseLocation
AWS::S3Vectors::VectorBucket CreationTime
AWS::Scheduler::Schedule Arn
AWS::ServiceDiscovery::HttpNamespace Arn
AWS::ServiceDiscovery::PrivateDnsNamespace Arn, HostedZoneId
AWS::ServiceDiscovery::PublicDnsNamespace Arn, HostedZoneId
AWS::ServiceDiscovery::Service Arn
AWS::SQS::Queue Arn
AWS::SSM::Parameter Arn
AWS::StepFunctions::StateMachine Name, StateMachineRevisionId
AWS::WAFv2::WebACL Arn, Capacity, LabelNamespace

Full classification

Resource type SDK Bucket readOnly attributes (status)
AWS::ApiGateway::Account yes enriched Id (allow)
AWS::ApiGateway::Authorizer yes enriched AuthorizerId (allow)
AWS::ApiGateway::Deployment yes enriched DeploymentId (allow)
AWS::ApiGateway::Method yes no-computed-attr (none)
AWS::ApiGateway::Resource yes enriched ResourceId (allow)
AWS::ApiGateway::Stage yes no-computed-attr (none)
AWS::ApiGatewayV2::Api yes sdk-fallback-gap ApiEndpoint (GAP), ApiId (allow)
AWS::ApiGatewayV2::Authorizer yes enriched AuthorizerId (allow)
AWS::ApiGatewayV2::Integration yes enriched IntegrationId (allow)
AWS::ApiGatewayV2::Route yes enriched RouteId (allow)
AWS::ApiGatewayV2::Stage yes no-computed-attr (none)
AWS::AppSync::ApiKey yes sdk-fallback-gap ApiKey (GAP), ApiKeyId (allow), Arn (GAP)
AWS::AppSync::DataSource yes enriched DataSourceArn (allow)
AWS::AppSync::GraphQLApi yes sdk-fallback-gap ApiId (allow), Arn (GAP), GraphQLDns (GAP), GraphQLEndpointArn (GAP), GraphQLUrl (GAP), RealtimeDns (GAP), RealtimeUrl (GAP)
AWS::AppSync::GraphQLSchema yes enriched Id (allow)
AWS::AppSync::Resolver yes enriched ResolverArn (allow)
AWS::AutoScaling::AutoScalingGroup yes sdk-fallback-gap AutoScalingGroupARN (GAP)
AWS::BedrockAgentCore::Browser yes sdk-fallback-gap BrowserArn (allow), BrowserId (GAP), Name (GAP), Status (GAP)
AWS::BedrockAgentCore::CodeInterpreter yes sdk-fallback-gap CodeInterpreterArn (allow), CodeInterpreterId (GAP), Status (GAP)
AWS::BedrockAgentCore::Evaluator yes sdk-fallback-gap CreatedAt (GAP), EvaluatorArn (allow), EvaluatorId (GAP), Status (GAP), UpdatedAt (GAP)
AWS::BedrockAgentCore::Runtime yes sdk-fallback-gap AgentRuntimeArn (GAP), AgentRuntimeId (allow), AgentRuntimeVersion (GAP), CreatedAt (GAP), FailureReason (GAP), LastUpdatedAt (GAP), Status (GAP), WorkloadIdentityDetails (GAP)
AWS::Budgets::Budget yes enriched Id (allow)
AWS::CertificateManager::Certificate yes enriched CertificateArn (allow)
AWS::CloudFormation::Stack yes sdk-fallback-gap ChangeSetId (GAP), CreationTime (GAP), LastUpdateTime (GAP), Outputs (GAP), ParentId (GAP), RootId (GAP), StackId (allow), StackStatus (GAP)
AWS::CloudFormation::WaitConditionHandle yes enriched Id (allow)
AWS::CloudFront::CloudFrontOriginAccessIdentity yes enriched Id (allow), S3CanonicalUserId (OK)
AWS::CloudFront::Distribution yes sdk-fallback-gap DomainName (GAP), Id (allow)
AWS::CloudFront::OriginAccessControl yes enriched Id (OK)
AWS::CloudTrail::Trail yes sdk-fallback-gap Arn (GAP), SnsTopicArn (GAP)
AWS::CloudWatch::Alarm yes sdk-fallback-gap Arn (GAP)
AWS::CloudWatch::AnomalyDetector yes enriched Id (allow)
AWS::CodeBuild::Project yes sdk-fallback-gap Arn (GAP), Id (allow)
AWS::CodeCommit::Repository yes sdk-fallback-gap Arn (GAP), CloneUrlHttp (GAP), CloneUrlSsh (GAP), Id (allow), Name (GAP)
AWS::Cognito::UserPool yes sdk-fallback-gap Arn (GAP), ProviderName (GAP), ProviderURL (GAP), UserPoolId (allow)
AWS::DLM::LifecyclePolicy yes sdk-fallback-gap Arn (GAP), Id (allow)
AWS::DocDB::DBCluster yes sdk-fallback-gap ClusterResourceId (GAP), Endpoint (GAP), Id (allow), ReadEndpoint (GAP)
AWS::DocDB::DBInstance yes sdk-fallback-gap Endpoint (GAP), Id (allow), Port (GAP)
AWS::DocDB::DBSubnetGroup yes enriched Id (allow)
AWS::DynamoDB::GlobalTable yes sdk-fallback-gap Arn (GAP), StreamArn (GAP), TableId (GAP)
AWS::DynamoDB::Table yes sdk-fallback-gap Arn (GAP), StreamArn (OK)
AWS::EC2::EIP yes enriched AllocationId (OK), PublicIp (OK)
AWS::EC2::Instance yes sdk-fallback-gap InstanceId (allow), PrivateDnsName (GAP), PrivateIp (GAP), PublicDnsName (GAP), PublicIp (GAP), State (GAP), VpcId (GAP)
AWS::EC2::InternetGateway yes enriched InternetGatewayId (allow)
AWS::EC2::NatGateway yes sdk-fallback-gap AutoProvisionZones (GAP), AutoScalingIps (GAP), EniId (GAP), NatGatewayId (allow), RouteTableId (GAP)
AWS::EC2::NetworkAcl yes enriched Id (allow)
AWS::EC2::NetworkAclEntry yes enriched Id (allow)
AWS::EC2::Route yes enriched CidrBlock (allow)
AWS::EC2::RouteTable yes enriched RouteTableId (allow)
AWS::EC2::SecurityGroup yes sdk-fallback-gap GroupId (GAP), Id (allow)
AWS::EC2::SecurityGroupIngress yes enriched Id (allow)
AWS::EC2::Subnet yes sdk-fallback-gap BlockPublicAccessStates (GAP), Ipv6CidrBlocks (GAP), NetworkAclAssociationId (GAP), SubnetId (allow)
AWS::EC2::SubnetNetworkAclAssociation yes enriched AssociationId (allow)
AWS::EC2::SubnetRouteTableAssociation yes enriched Id (allow)
AWS::EC2::VPC yes sdk-fallback-gap CidrBlockAssociations (GAP), DefaultNetworkAcl (GAP), DefaultSecurityGroup (GAP), Ipv6CidrBlocks (GAP), VpcId (allow)
AWS::EC2::VPCGatewayAttachment yes enriched AttachmentType (allow)
AWS::ECR::Repository yes enriched Arn (OK), RepositoryUri (OK)
AWS::ECS::Cluster yes sdk-fallback-gap Arn (GAP)
AWS::ECS::Service yes sdk-fallback-gap Name (GAP), ServiceArn (allow)
AWS::ECS::TaskDefinition yes enriched TaskDefinitionArn (allow)
AWS::EFS::AccessPoint yes sdk-fallback-gap AccessPointId (allow), Arn (GAP)
AWS::EFS::FileSystem yes sdk-fallback-gap Arn (GAP), FileSystemId (allow)
AWS::EFS::MountTarget yes enriched Id (allow)
AWS::ElastiCache::CacheCluster yes sdk-fallback-gap ConfigurationEndpoint (GAP), RedisEndpoint (GAP)
AWS::ElastiCache::SubnetGroup yes no-computed-attr (none)
AWS::ElasticLoadBalancingV2::Listener yes enriched ListenerArn (allow)
AWS::ElasticLoadBalancingV2::LoadBalancer yes sdk-fallback-gap CanonicalHostedZoneID (GAP), DNSName (GAP), LoadBalancerArn (allow), LoadBalancerFullName (GAP), LoadBalancerName (GAP)
AWS::ElasticLoadBalancingV2::TargetGroup yes sdk-fallback-gap LoadBalancerArns (GAP), TargetGroupArn (allow), TargetGroupFullName (GAP), TargetGroupName (GAP)
AWS::EMR::Cluster yes sdk-fallback-gap Id (allow), MasterPublicDNS (GAP)
AWS::EMR::InstanceFleetConfig yes enriched Id (allow)
AWS::EMR::InstanceGroupConfig yes enriched Id (allow)
AWS::Events::EventBus yes sdk-fallback-gap Arn (GAP)
AWS::Events::Rule yes enriched Arn (allow)
AWS::FSx::FileSystem yes sdk-fallback-gap DNSName (GAP), Id (allow), LustreMountName (GAP), ResourceARN (GAP), RootVolumeId (GAP)
AWS::Glue::Connection yes enriched Id (allow)
AWS::Glue::Crawler yes no-computed-attr (none)
AWS::Glue::Database yes no-computed-attr (none)
AWS::Glue::Job yes no-computed-attr (none)
AWS::Glue::SecurityConfiguration yes no-computed-attr (none)
AWS::Glue::Table yes enriched Id (allow)
AWS::Glue::Trigger yes no-computed-attr (none)
AWS::Glue::Workflow yes no-computed-attr (none)
AWS::IAM::AccessKey yes sdk-fallback-gap Id (allow), SecretAccessKey (GAP)
AWS::IAM::Group yes sdk-fallback-gap Arn (GAP)
AWS::IAM::InstanceProfile yes sdk-fallback-gap Arn (GAP)
AWS::IAM::ManagedPolicy yes sdk-fallback-gap AttachmentCount (GAP), CreateDate (GAP), DefaultVersionId (GAP), IsAttachable (GAP), PermissionsBoundaryUsageCount (GAP), PolicyArn (allow), PolicyId (GAP), UpdateDate (GAP)
AWS::IAM::Policy yes enriched Id (allow)
AWS::IAM::Role yes sdk-fallback-gap Arn (GAP), RoleId (GAP)
AWS::IAM::User yes sdk-fallback-gap Arn (GAP)
AWS::IAM::UserToGroupAddition yes enriched Id (allow)
AWS::Kinesis::Stream yes sdk-fallback-gap Arn (OK), WarmThroughputObject (GAP)
AWS::Kinesis::StreamConsumer yes sdk-fallback-gap ConsumerARN (allow), ConsumerCreationTimestamp (GAP), ConsumerStatus (GAP)
AWS::KinesisFirehose::DeliveryStream yes sdk-fallback-gap Arn (GAP)
AWS::KMS::Alias yes no-computed-attr (none)
AWS::KMS::Key yes enriched Arn (OK), KeyId (OK)
AWS::Lambda::EventInvokeConfig yes no-computed-attr (none)
AWS::Lambda::EventSourceMapping yes sdk-fallback-gap EventSourceMappingArn (GAP), Id (allow)
AWS::Lambda::Function yes sdk-fallback-gap Arn (GAP), SnapStartResponse (GAP)
AWS::Lambda::LayerVersion yes enriched LayerVersionArn (allow)
AWS::Lambda::MicrovmImage yes sdk-fallback-gap CreatedAt (GAP), ImageArn (allow), LatestActiveImageVersion (GAP), LatestFailedImageVersion (GAP), State (GAP), UpdatedAt (GAP)
AWS::Lambda::Permission yes enriched Id (allow)
AWS::Lambda::Url yes enriched FunctionArn (OK), FunctionUrl (OK)
AWS::Logs::LogGroup yes sdk-fallback-gap Arn (GAP)
AWS::Neptune::DBCluster yes sdk-fallback-gap ClusterResourceId (GAP), Endpoint (GAP), Port (GAP), ReadEndpoint (GAP)
AWS::Neptune::DBInstance yes sdk-fallback-gap Endpoint (GAP), Port (GAP)
AWS::Neptune::DBSubnetGroup yes no-computed-attr (none)
AWS::RDS::DBCluster yes sdk-fallback-gap DBClusterArn (GAP), DBClusterResourceId (OK), Endpoint (OK), ReadEndpoint (OK), StorageEncryptionType (GAP), StorageThroughput (GAP)
AWS::RDS::DBInstance yes sdk-fallback-gap AutomaticRestartTime (GAP), CertificateDetails (GAP), DBInstanceArn (GAP), DBInstanceStatus (GAP), DbiResourceId (GAP), Endpoint (OK), InstanceCreateTime (GAP), IsStorageConfigUpgradeAvailable (GAP), LatestRestorableTime (GAP), ListenerEndpoint (GAP), PercentProgress (GAP), ReadReplicaDBClusterIdentifiers (GAP), ReadReplicaDBInstanceIdentifiers (GAP), ResumeFullAutomationModeTime (GAP), SecondaryAvailabilityZone (GAP), StatusInfos (GAP)
AWS::RDS::DBProxy yes sdk-fallback-gap DBProxyArn (GAP), Endpoint (GAP), VpcId (GAP)
AWS::RDS::DBProxyEndpoint yes sdk-fallback-gap DBProxyEndpointArn (GAP), Endpoint (GAP), IsDefault (GAP), VpcId (GAP)
AWS::RDS::DBProxyTargetGroup yes enriched TargetGroupArn (allow)
AWS::RDS::DBSubnetGroup yes sdk-fallback-gap DBSubnetGroupArn (GAP)
AWS::Route53::HostedZone yes sdk-fallback-gap Id (allow), NameServers (GAP)
AWS::Route53::RecordSet yes enriched Id (allow)
AWS::S3::Bucket yes sdk-fallback-gap Arn (OK), DomainName (GAP), DualStackDomainName (GAP), RegionalDomainName (GAP), WebsiteURL (GAP)
AWS::S3::BucketPolicy yes no-computed-attr (none)
AWS::S3Express::DirectoryBucket yes sdk-fallback-gap Arn (GAP), AvailabilityZoneName (GAP)
AWS::S3Tables::Namespace yes no-computed-attr (none)
AWS::S3Tables::Table yes sdk-fallback-gap TableARN (allow), VersionToken (GAP), WarehouseLocation (GAP)
AWS::S3Tables::TableBucket yes enriched TableBucketARN (allow)
AWS::S3Vectors::VectorBucket yes sdk-fallback-gap CreationTime (GAP), VectorBucketArn (allow)
AWS::Scheduler::Schedule yes sdk-fallback-gap Arn (GAP)
AWS::SecretsManager::Secret yes enriched Id (allow)
AWS::ServiceDiscovery::HttpNamespace yes sdk-fallback-gap Arn (GAP), Id (allow)
AWS::ServiceDiscovery::PrivateDnsNamespace yes sdk-fallback-gap Arn (GAP), HostedZoneId (GAP), Id (allow)
AWS::ServiceDiscovery::PublicDnsNamespace yes sdk-fallback-gap Arn (GAP), HostedZoneId (GAP), Id (allow)
AWS::ServiceDiscovery::Service yes sdk-fallback-gap Arn (GAP), Id (allow)
AWS::SNS::Subscription yes enriched Arn (allow)
AWS::SNS::Topic yes enriched TopicArn (allow)
AWS::SNS::TopicPolicy yes enriched Id (allow)
AWS::SQS::Queue yes sdk-fallback-gap Arn (GAP), QueueUrl (allow)
AWS::SQS::QueuePolicy yes enriched Id (allow)
AWS::SSM::Parameter yes sdk-fallback-gap Arn (GAP)
AWS::StepFunctions::StateMachine yes sdk-fallback-gap Arn (allow), Name (GAP), StateMachineRevisionId (GAP)
AWS::WAFv2::WebACL yes sdk-fallback-gap Arn (GAP), Capacity (GAP), Id (allow), LabelNamespace (GAP)

Enrichment cases without a cached schema

These types have an enrichResourceAttributes case but no cached CFn schema, so their readOnly coverage cannot be verified offline. Refresh the fixture (node scripts/refresh-cfn-schemas.mjs) to bring them under the matrix.

  • AWS::ApiGateway::RestApi
  • AWS::Backup::BackupPlan
  • AWS::Backup::BackupSelection
  • AWS::Backup::BackupVault
  • AWS::ElastiCache::ReplicationGroup
  • AWS::Events::ApiDestination
  • AWS::Events::Connection
  • AWS::Lambda::Version
  • AWS::OpenSearchService::Domain
  • AWS::Pipes::Pipe
  • AWS::Redshift::Cluster
  • AWS::ResourceGroups::Group
  • AWS::Route53::HealthCheck
  • AWS::S3::AccessPoint

Last updated: