Parity grade: A · SDK aws-sdk-go-v2/service/cloudformation@v1.82.0 · last audited 2026-10-09 (54869319e)
| Metric | Value |
|---|---|
| PARITY entries audited | 73 (72 ok, 1 partial) |
| Feature families | 19 (19 ok) |
| Known gaps | 6 |
| Structural gaps (can't be emulated) | 2 |
| Deferred items | 0 |
| Resource leaks | clean |
- Resource-type strictness is by service namespace only: an AWS::Svc::Res whose Svc is unknown to the spec fixture and the provisioner fails with "Template format error: Unrecognized resource types: [X]" (cfn_resource_services.json, generated by cmd/cfnattrgen), but an unmodelled resource of a known service still falls through to the stub path because the committed spec fixture lists types with attributes only. Unknown/mistyped properties and wrong property types are not rejected: no property schema is vendored (resource_type_schemas.go is trimmed; refreshing the full CloudFormationResourceSpecification needs network). Only the required-property set for ~21 certain types is enforced (cfn_required_properties.json); Rules support Fn::Equals/And/Or/Not/Contains/EachMemberEquals/EachMemberIn (no RefAll/ValueOf/ValueOfAll), and the Parameter-constraint, Rules-assertion and Unrecognized-parameter-type wordings are best-effort recollections of CloudFormation text, not SDK-verifiable.
- CreateStack/UpdateStack complete synchronously: CREATE_IN_PROGRESS/UPDATE_IN_PROGRESS are only visible as stack events, never via DescribeStacks.
- Stack policy: Replacement Conditionally is treated as Update:Replace (deliberate, not an AWS-documented rule), and AWS's separate logical-ID/resource-type default-deny note is not modeled; NotAction/NotResource follow plain inversion (gopherstack-cqy3).
- No nested-stack change-set or public-extension version machinery exists, so these stay unmodeled: CreateChangeSet IncludeNestedStacks (no nested-stack diff machinery), UpdateStack RetainExceptOnCreate, RollbackStack RoleARN, ActivateType MajorVersion/VersionBump/TypeNameAlias (no public extension version catalog) (gopherstack-xhu2t).
- SAM transform (AWS::Serverless-2016-10-31) still unexpanded (FunctionUrlConfig and EventInvokeConfig now expand; EventInvokeConfig destinations need an explicit Destination ARN): HttpApi Auth/Domain/DefinitionBody/DefinitionUri/PropagateTags and HttpApi event Auth, Api event RequestParameters/RequestModel/ApiKeyRequired/AWS_IAM authorizers/UsagePlan/ResourcePolicy/Domain, Cognito AuthorizationScopes, ScheduleV2 DeadLetterConfig Type SQS (queue generation), SAM policy templates, Application/Connector/GraphQLApi/WebSocketApi, DeploymentPreference, StateMachine Events. All fail the stack/change set with an explicit reason, never silently dropped.
- SAM HttpApi emits separate AWS::ApiGatewayV2::Integration/Route resources (Integration/Route) instead of the OpenAPI Body real SAM generates, and SAM S3 events omit the Bucket DependsOn Permission edge (it would be circular here); logical IDs for those extras differ from real SAM.
These do not block an A grade — no implementation could produce real data here because the underlying data source cannot exist in an emulator.
- changeset_diff.go requiresRecreation() covers a curated subset of resource types' replacement-forcing properties: CloudFormation resource property schemas are not part of aws-sdk-go-v2, so the full set cannot be derived (gopherstack-e5h).
- ListResourceScanRelatedResources always returns an empty list: no cross-resource relationship graph is computed for a scan, so MaxResults/Resources have nothing to page or seed from.