Skip to content

Parity sweep: burn down items_still_open across all AWS services (685 → 161) - #2482

Merged
agbishop merged 178 commits into
mainfrom
chore/parity-sweep-2026-10-07
Oct 13, 2026
Merged

agbishop merged 178 commits into
mainfrom
chore/parity-sweep-2026-10-07

Conversation

@agbishop

@agbishop agbishop commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Every AWS service's PARITY.md already claimed overall: A. This PR makes those grades honest by working through the 685 items_still_open entries across 152 services. Each item was handled in one of three ways:

  • Fixed: implemented and checked against the pinned aws-sdk-go-v2 shapes, with a table-driven test.
  • Moved to structural_gaps: it can never work in an emulator, for example because it needs a real ML engine, real hardware or billing data.
  • Left open: the SDK and docs don't define the AWS behaviour. Each of these has a one-line reason in its PARITY.md.

685 open items are now 232, across 96 services. The remainder is tracked in a follow-up bd issue.

Highlights

Cross-service wiring (the cli_*_wiring.go files), each covered by a root-level SDK test:

  • Lambda metrics now reach CloudWatch.
  • RDS and DocumentDB managed master passwords are real Secrets Manager secrets.
  • ECS can roll back deployments on ELB health or CloudWatch alarms, and invokes Lambda lifecycle hooks.
  • SWF can schedule Lambda tasks.
  • API Gateway AWS-service integrations call DynamoDB, Step Functions, Kinesis and others directly.
  • CloudControl now creates 18 resource types through the real service backends.
  • CloudFormation fetches templates and policies from S3 and can provision DirectConnect resources.
  • The tagging API covers 7 more services.
  • FIS resolves experiment targets.
  • Object Lambda access points work for GetObject, HeadObject and ListObjects.
  • AppConfig serves configuration stored in SSM, S3 or Secrets Manager.
  • IoT domain certificate status comes from ACM, and rule SQL can decode protobuf.

Real bugs fixed along the way:

  • EventBridge Logs targets never created the log stream.
  • EventBridge CreateEventBus returned a 500 when Tags were given.
  • CodePipeline silently dropped stage conditions sent by a real client.
  • Lambda CreateFunction defaulted to Image instead of Zip.
  • Scheduler accepted the cron tokens L, W and # but never fired on them.
  • DynamoDB GSI updates wiped provisioned throughput.
  • A data race in IoT GetConnection.

Made-up data removed:

  • iotwireless GetPositionEstimate no longer returns [0,0].
  • databrew no longer reports PublishedBy="admin".
  • API Gateway TestInvokeAuthorizer no longer returns a fixed principal.
  • SSM no longer reports a static Custom:Application schema.

Engines added:

  • CloudTrail Lake JOINs, set operations and subqueries.
  • Glacier Select SQL expressions.
  • DynamoDB vector search.
  • S3 MD5/SHA512 and multipart object checksums.
  • KMS rotation of imported key material across versions.
  • STS trust-policy Numeric/IpAddress/Binary condition operators.
  • Cognito device SRP authentication.
  • EC2 regional NAT gateways.

Behaviour changes worth a look

  • elbv2 target group attribute defaults now follow the load balancer family; cross-zone is now use_load_balancer_configuration.
  • elasticache Redis NumCacheNodes > 1 is rejected, and DeleteGlobalReplicationGroup with RetainPrimaryReplicationGroup=false now also deletes the primary replication group.
  • directconnect rejects associating a connection with a LAG at a different location.
  • API Gateway GetExport rejects an unknown stage or export type.
  • WAF tag operations require the resource to exist.
  • shield AutoRenew can only change in the last 30 days of the commitment.
  • CloudFormation AWS::DirectConnect::Lag is created with no connections.

Verification

Run on the final tree:

  • go build ./..., go vet ./... and go vet -tags e2e ./test/e2e/...
  • go test -count=1 . for the root package
  • TestSnapshotVersionGuard and the full persistence package
  • gofmt on all tracked Go files
  • golangci-lint on every touched package
  • go.mod and go.sum unchanged
  • make bd-audit, which found no trailer mismatches

Not run: the terraform and integration suites, which need Docker. Snapshot inventory changes are additive only, with no version bumps.

🤖 Generated with Claude Code

Witness Patrol and others added 30 commits October 7, 2026 22:44
Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ck SyncType on DeleteResourceDataSync

LastModifiedUser/CreatedBy/LastModifiedBy now come from the request's
resolved IAM principal (awsmeta.CallerArn), omitted when unresolved.
items_still_open adjudicated: 14 moved to structural_gaps, 7 left open.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…Events Entity keys, filter ListJobs by namespace

items_still_open adjudicated in both PARITY.md files.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… details, SDK-valid VariantStatus

- list pagination uses pkgs/page tokens instead of integer offsets
- CreatedBy/LastModifiedBy IamIdentity on model package groups, packages, projects
- UpdateProject applies provisioning and template-provider updates
- DescribeProject TemplateProviderDetails used the create-side key; SDK decoded empty entries
- VariantStatus used InService, which the SDK enum lacks; now Creating/Updating with StartTime
- DescribeFeatureGroup OnlineStoreTotalSizeBytes from stored records

Snapshot golden also carries the cloudwatchlogs/iot additive rows.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e, state machine TimeoutSeconds

redshift:
- Tags on parameter groups, snapshots, event subscriptions and IdC apps;
  TagKeys/TagValues filters on their describes
- DescribeTags returned the bare cluster id as ResourceName; SDK expects the ARN
- CopyClusterSnapshot kept the source ARN on the copy
- ModifyCluster NewClusterIdentifier re-keys the cluster and its references
- IdC application ServiceIntegrations; GetReservedNodeExchangeConfigurationOptions validation

stepfunctions: top-level TimeoutSeconds was ignored; executions now end
TIMED_OUT with States.Timeout, and RedriveExecution accepts them.

cloudformation: PARITY.md adjudication only.
Snapshot golden rows land with the rds commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…uster restore inheritance, receiver configs

docdb:
- CreateDBCluster GlobalClusterIdentifier was ignored; now joins as secondary
- ReadReplicaIdentifiers was never serialized
- CertificateDetails from the CA catalog; orderable options emit Vpc

rds:
- Failover/SwitchoverGlobalCluster move the writer; non-member targets rejected
- CreateDBInstanceReadReplica honors SourceDBClusterIdentifier
- cluster restores inherit engine/KMS/master user/retention from source
- DBClusterSnapshot records MasterUsername, Port, storage and IAM auth

cleanrooms:
- receiverConfigurations on protected query/job summaries
- request-only type key dropped from ProtectedJob responses
- ability-change types derived for existing members

Snapshot golden includes the redshift rows from da52afb.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tIds, OpenZFS volume config, domain-owner checks

fsx:
- ClientRequestToken honored on create/copy/restore/update ops;
  changed params return IncompatibleParameterError
- SubnetIds required with per-deployment-type counts
- OpenZFS volume config stored, updated and enforced on delete/restore/copy
- DRA S3 auto-import/export, file cache DRAs, self-managed AD config
- UpdateFileCache accepted an invented StorageCapacityGiB member; removed
- CopyBackup SourceRegion

codeartifact: failedVersions carry errorMessage; domain-owner validated.
bedrockruntime: PARITY.md adjudication only.
Snapshot golden fsx rows land with the next commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…fig, shard metrics, DryRun

s3:
- PutObject x-amz-write-offset-bytes appends on directory buckets
- GetBucketMetadataConfiguration returns a computed result, not the create body
- request-metrics tag filters and FirstByteLatency
- list ops emit RestoreStatus when requested
- PutObject Size populated for notifications; ListObjectVersions no longer hardcodes STANDARD

kinesis:
- shard-level enhanced metrics; stream OutgoingRecords/Bytes were missing
- DryRun returns DryRunOperationException without side effects
- unflushed channel buffers persist across restarts

xray: insight detection honors per-group FilterExpression.
quicksight: asset bundle import overrides echoed; KnowledgeBase PrimaryOwnerUsername.
Snapshot golden also carries the fsx rows from a29457c.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ake aggregates, conformance pack params

codepipeline: Custom-owner actions now create real jobs that block the run
until PutJobSuccess/FailureResult; continuation tokens queue follow-ups.
cloudtrail: StartQuery by QueryAlias resolves the dashboard widget;
dashboard refresh starts per-widget queries; lake SQL SUM/AVG/MIN/MAX/HAVING.
awsconfig: conformance pack input parameters substituted; ListDiscoveredResources
IncludeDeletedResources via tombstones; EvaluationTimeout range-checked.
appsync: internal apiId/tags no longer leak onto the wire.
Snapshot golden rows land with the next commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… Splunk failures, replicator Apache Kafka clusters

firehose:
- deliverToSplunk swallowed failures and always reported success
- PutRecord/Batch, backup and per-destination delivery metrics
- Elasticsearch/OpenSearch VpcConfiguration validated against EC2
kafka:
- channels transition CREATING/UPDATING/DELETING
- replicators keep apacheKafkaCluster and ReplicationInfo cluster ids
  (previously dropped, and an empty amazonMskCluster was always emitted)
verifiedpermissions: policy store EncryptionState; Cedar entity Tags converted.
workspaces: IdC ApplicationArn; enum validation on image/application filters.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nt settings, aggregations, remaining filters

ec2:
- Filter.N on peering, route-search, multicast, capacity blocks and more
- DescribeInstanceImageMetadata reported the caller as every image owner
- peering/capacity-block/secondary-interface wire fields
- ModifyReservedInstances mints replacements; CreateFleet ValidUntil enforced
- AssociateVpcCidrBlock applies the VPC user guide restriction matrix
- Docker compute usage metrics
dms: all 18 engine settings blocks round-trip (credentials stripped); CDC window.
elasticbeanstalk: ComposeEnvironments was a stub listing environments; now
reads env.yaml from bundles. RequestId no longer a fixed literal.
inspector2: 12/15 aggregation types, AccountIds, ClientToken replay, CIS sorting,
coverage metadata, ECS GetClustersForImage.
Snapshot golden also carries rows from 49fa96b and 3a5dba6.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nfigs, AppBlockArn checks, finding filters

athena: Identity Center, managed results and S3 access-grant workgroup configs;
UpdateWorkGroup Remove* flags were silently ignored; EngineConfiguration
validated; ImportNotebook reads NotebookS3LocationUri.
appstream: AppBlockArn must exist on Create/UpdateApplication.
accessanalyzer: resourceOwnerAccount/error/resourceControlPolicyRestriction
filters no longer match everything.
vpclattice: required txtMethodConfig members were missing; isManagedAssociation emitted.
workmail: PARITY.md adjudication only.
Snapshot golden athena row lands with the next commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…icky task lists, V2 filters, session expiry

swf: decision and activity timeouts enforced; sticky task lists route and
revert; pending task queues persist; empty registrationStatus rejected.
securityhub: GetResourcesV2 ignored its filters; trends/statistics apply
Filters; ListMembers OnlyAssociated defaults true per SDK; BatchUpdateFindings
limits; CreateTicketV2 ClientToken; metadata.uid resolvable.
neptune: SnapshotType public/shared always returned nothing; FailoverState echoed.
redshiftdata: sessions expire after SessionKeepAliveSeconds.
opsworks: ELB VpcId/SubnetIds/AZs derived; errors carry the JSON 1.1 content type.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… token revocation, port ranges, async states

cognitoidp: ClientMetadata reaches every trigger; ConfirmForgotPassword fires
PostConfirmation; RevokeToken invalidates derived access tokens; refresh
RetryGracePeriodSeconds; case-insensitive/alias sign-in; ForceAliasCreation.
ecs: StopServiceDeployment returned a wrapped object, SDK expects the bare ARN;
ROLLBACK stop type; containerPortRange allocation; placement retries on port
collision; resourceManagementType and daemonName filters.
directoryservice: async trust/snapshot/share/setting states; updated settings
stuck in Requested forever; replica Region resolves to the owner directory.
eks: RollbackConfig.TimeoutMinutes validated.
Snapshot golden also carries rows from earlier commits on this branch.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-catalog settings, org feature stats

glue: StartWorkflowRun RunProperties, IncludeGraph, blueprint include flags,
GetPartitions Segment/ExcludeColumnSchema, SearchTables sort, real
TaskRunProperties shape, session tags, ClientToken on glossaries and DQ runs,
UpdateSchema checkpoint, partition CatalogId.
lakeformation: ListPermissions IncludeRelated; Grant/Revoke CatalogId defaults
the resource catalog; data lake settings per catalog.
guardduty: countByFeature and free-trial days from member features.
datasync: ScheduleDetails after a user disables a schedule.
kinesisanalyticsv2: PARITY.md adjudication only.
Snapshot golden rows land with the next commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… qualified function URLs, PITR restore

lambda: AWS/Lambda Invocations/Errors/Duration/Throttles emitted; function URLs
scoped by Qualifier; DeleteFunction leaked URL listeners and ports;
qualifier-level event invoke config for async retries; UpdateFunctionCode DryRun;
ESM tuning validation per SDK; TenancyConfig/CapacityProviderConfig stored.
lightsail: point-in-time database restore; ApplyImmediately defers changes to
the maintenance window; RotateMasterUserPassword was ignored; omitted
PubliclyAccessible reset to false; certificate DomainValidationRecords.
medialive: DeleteReservation keeps DELETED with TTL; busy-channel guards on
DeleteCluster/DeleteNode; UsedChannelEngineVersions.
memorydb: DescribeSnapshots ShowDetail; resharding PendingUpdates; multi-region
ShardCount propagates.
mediatailor: ListAlerts requires resourceArn.
Snapshot golden rows land with the next commit; metrics emitter wiring in cli follows.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e jobs, flow validation, WS metrics

batch: array jobs spawn children with SEQUENTIAL/N_TO_N deps and cascade;
multi-node node jobs and nodeOverrides; ListJobs arrayJobId/multiNodeJobId;
eks/ecs property overrides; env/resource overrides merge by key.
NodeRangeProperty used containerProperties where the SDK uses container
(legacy key aliased in UnmarshalJSON).
bedrockagent: ValidateFlowDefinition covers cycles, reachability, connections,
conditions and loops; PrepareFlow fails on findings; ClientToken replay
survives restart and covers KB document ingest/delete.
apigatewayv2: HTTP DataProcessed, WS IntegrationError, route-level detailed
metrics; WS routing uses the stage's deployment snapshot.
account: region enable/disable and primary email update are async.
acm: ACME domain validation settles VALIDATING to VALID.
Snapshot golden rows land with the next commit.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…dentials, outpost bucket ARNs, SelectColumn metadata

s3control: GetDataAccess was a stub returning empty credentials for any
target; it now matches access grants and returns 403 when none covers the
target. CreateBucket uses X-Amz-Outpost-Id in the ARN; MfaDelete and
ManifestGenerator stored and echoed.
timestreamquery: PrepareQuery Columns use the SelectColumn shape.
sts, ses, servicediscovery, rolesanywhere: PARITY.md adjudication only.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…etrics and DLQ attributes, per-database SQLite, Ethereum nodes

eventbridge: PutEvents and invocation metrics; DLQ messages carry
ERROR_MESSAGE/EXHAUSTED_RETRY_CONDITION/RETRY_ATTEMPTS and the documented
ERROR_FROM_TARGET code instead of an invented one; DLQ send checks the queue policy.
rdsdata: Database selects a distinct SQLite database; ExecuteSql reaches the
real engine; continueAfterTimeout on docker clusters; 1 MB response cap.
networkmanager: attachment updates transition through UPDATING; route
analysis follows TGW peerings (resolver wiring follows).
managedblockchain: Ethereum mainnet nodes; framework attributes were dropped on clone.
mq, mediastoredata: PARITY.md adjudication only.

Refs: gopherstack-9x62.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ective): replication-group topology, domain processing windows, endpoint devices

- elasticache: replication groups own real member clusters per node group;
  Create/Modify cluster, RG, global-datastore and snapshot parameter
  families implemented (placement, scaling, shard changes, failover);
  NoOperationFault/NodeGroupNotFoundFault; StorageEncryptionType and
  EffectiveDurability derived.
- elasticsearch: package association details, domain processing windows
  and per-field OptionStatus, SubnetResolver hook for VPC options.
- directconnect: AwsDevice/AwsDeviceV2/AwsLogicalDeviceId, same-endpoint
  LAG association rule, VirtualGatewayRegion, MACsec secret creator hook.
- comprehend: training status vocabulary fix, VpcConfig/RedactionConfig
  and DocumentReaderConfig validation, flywheel iterations train models.
- codedeploy: legacy String revision type.
- detective: remaining items reclassified as structural.

Snapshot golden rows land with the next commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s, ECS health and metrics, SWF Lambda tasks

- lambda: handler wired into wireServiceMetrics; S3ObjectVersion code
  fetch through a versioned S3 adapter.
- docdb/rds: ManageMasterUserPassword creates, rotates and deletes a real
  Secrets Manager secret.
- iam: delegation request OwnerId/ApproverId from the caller ARN.
- docdb/neptune/medialive: VpcId, SupportedNetworkTypes and channel ENIs
  resolved from EC2 subnets; NetworkTypeNotSupported on DUAL mismatch.
- ecs: CPU/Memory utilization metrics from container stats, ELB-unhealthy
  task replacement, capacity-provider ASG validation.
- swf: ScheduleLambdaFunction decisions invoke Lambda.
- cleanrooms: association schemas from Glue tables; awsconfig conformance
  pack templates from S3/SSM; appsync wafWebAclArn from wafv2; workmail
  DeleteDirectory removes the Directory Service directory.

Includes snapshot golden rows for earlier batches.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ices, cost drivers, job summary aggregation, CSR passthrough

- codebuild: build-matrix batch expansion; RetryBuildBatch state rules,
  RETRY_FAILED_BUILDS carry-forward and PriorBuildSummaryList.
- ce: GetCostComparisonDrivers from the cost ledger; DimensionalValueCount
  for TAG and COST_CATEGORY monitors.
- backup: AggregationPeriod bucketing on job summaries; scan result status.
- acmpca: CSRPassthrough templates, issuer path-length enforcement,
  EXPIRED CA status.
- wafv2: Scope/Vendor/Name validation on managed catalog ops.
- transcribe: MedicalScribeContext.
- ssoadmin: primary Region listed and protected from RemoveRegion.

Snapshot golden rows land with the next commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sis, MQ RAM shares, Logs target authz

- eventbridge: root authz tests attach the events.amazonaws.com
  sqs:SendMessage policy that AWS requires on a DLQ; CloudWatch Logs
  targets authorize logs:PutLogEvents against the log-group resource
  policy and now create the log stream before delivering.
- directconnect: MACsec CAK/CKN keys stored as real Secrets Manager secrets.
- elasticsearch: VPCOptions VPCId and AvailabilityZones from EC2 subnets.
- networkmanager: route analysis walks transit gateway peering attachments
  in both directions.
- mq: DescribeSharedResources reports RAM shares and their resources.
- mediastoredata: ContainerNotFoundException for unknown containers.
- comprehend: training-status test moved to an internal test file.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…,resourcegroupstaggingapi,sqs): live resource queries, delegation endpoints, invoke target validation

- resourcegroups: TAG_FILTERS_1_0 and CLOUDFORMATION_STACK_1_0 queries
  evaluate live with stack QueryErrors.
- resourcegroupstaggingapi: ListRequiredTags reads the Organizations
  effective TAG_POLICY.
- route53resolver: HostVPCId from EC2 subnets; INBOUND_DELEGATION
  endpoints and DELEGATE rules.
- sesv2: EndpointId and identity ARN validation on SendEmail.
- sagemakerruntime: InferenceComponentName and TargetContainerHostname
  validation.
- rekognition: video job NotificationChannel publishes completion to SNS.
- sqs: remaining items reclassified.

Includes snapshot golden rows for earlier batches.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sion promote, run options, XKS keys, owning service

- ram: PromoteResourceShareCreatedFromPolicy requires a matching promoted
  permission (UnmatchedPolicyPermissionException); ClientToken replay on
  13 more ops. The Glue RAM wiring test now promotes the permission first,
  as the SDK documents.
- omics: StartRun configurationName/runId, batch filters and failed
  submissions, outputBucketOwnerId, upload ClientToken, workflow owner
  checks, read set creationType.
- kms: XksKeyId on CreateKey; ALL_KEY_MATERIAL rotations for EXTERNAL keys.
- secretsmanager: OwningService from managed names; owning-service and
  primary-region filters.
- iotdataplane: GetConnection after DeleteConnection reports the
  disconnect.
- mwaa: CreateWebLoginToken IamIdentity from the caller.
- outposts, organizations, mgn: items reclassified.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s, target group attribute defaults, foreign registry checks

- dynamodb: vector indexes on CreateTable/UpdateTable/DescribeTable and
  restore overrides; SearchVectors scores COSINE/EUCLIDEAN/DOT_PRODUCT
  with filters and topK; GSI capacity and transaction metrics.
- elbv2: CreateTargetGroup seeds the documented attribute defaults per
  load balancer family and target type.
- ecr: foreign registryId rejected on repository-scoped ops.
- efs: DescribeTags Marker/MaxItems paging; IpAddressInUse.
- forecast: predictor and forecast lineage fields and DatasetGroupArn
  filters.
- iotanalytics, fis, cloudcontrol: items reclassified.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…...): template versions, Select SQL expressions, vault policy enforcement, JWT OpenID tokens

- pinpoint: template versions keep content; ?version= on Get/Update/Delete;
  UpdateTemplateActiveVersion pins a version; version numbers no longer
  reused after the trim.
- glacier: Select SQL parentheses/NOT/BETWEEN/IN/LIKE/arithmetic/CAST/
  COALESCE/NULLIF; vault lock and access policy Deny enforced on data ops
  with principal and condition matching.
- databrew: CreatedBy/LastModifiedBy/PublishedBy/StartedBy from the caller
  instead of a literal; required-member validation.
- cognitoidentity: OpenID tokens are JWTs with expiry and principal tags.
- iotwireless: single import tasks keyed by Id with stored fields;
  WirelessDeviceType validation; ClientRequestToken replay persisted.
- grafana: license removal chaos path; SSO grants across identity stores.
- elb: CreateLoadBalancer checks security groups and subnets in EC2.
- codeconnections: sync blocker contexts. codecommit: file/folder merge
  conflict resolution. cloudwatch: ApplyOnTransformedLogs on insight rules.
- mediaconvert, identitystore: items reclassified.

Snapshot golden rows land with the next commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ponse cache, real TestInvokeAuthorizer, translation jobs over S3, AZ ids

- apigateway: embed=methods/apisummary; stage response cache with
  CacheHitCount/CacheMissCount and FlushStageCache; GetExport Accept and
  extensions; GetSdk required parameters; CloneFrom; TestInvokeAuthorizer
  runs the real authorizer instead of returning a fixed principal;
  TestInvokeMethod stage variables, path parameters, client certificates.
- translate: terminology CSV/TSV/TMX parsing with skipped counts;
  parallel data statistics from S3; translation jobs translate S3 input
  documents; EncryptionKey validation.
- autoscaling: LaunchInstances placement, AvailabilityZoneIds,
  IncludeDeletedGroups, InstanceId-derived launch settings.
- applicationautoscaling: ResourceId shape validation per dimension.
- bedrock: automated reasoning test case bodies, client token replay,
  KMS key checks, OfferType validation.
- sns: AuthenticateOnUnsubscribe; SMS and application outcome metrics.
- shield: LockedSubscriptionException outside the renewal window.
- waf: tag ops require an existing resource.
- appconfig, textract: items reclassified.

Snapshot golden rows land with the next commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…# cron tokens fire, function LIVE stage, deep spec validation

- scheduler: L, LW, L-n, nW, nL and n#m cron tokens now match instead of
  being accepted and never firing; day-of-week L-n rejected.
- cloudfront: Stage on Get/Describe(Connection)Function with a LIVE
  snapshot taken at publish; distribution tenant ManagedCertificateRequest
  stored and reflected in GetManagedCertificateDetails.
- appmesh: virtual node, route, gateway and gateway route specs validated
  (required members, unions, enums, ranges).
- s3tables: CreateTable Iceberg Metadata validated and stored.
- apprunner: CreateVpcIngressConnection requires an existing service.
- amplify, transfer, support, appconfigdata, timestreamwrite: items
  reclassified.

Includes snapshot golden rows for earlier batches.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…mination, probe VpcId from EC2, import source resolution test

- emr: AutoTerminationPolicy.IdleTimeout terminates idle WAITING clusters.
- networkmonitor: Probe.VpcId resolved from the source subnet via EC2.
- resiliencehub: ImportResourcesToDraftAppVersion source resolution tested.
- polly: ValidationException wire code covered on remaining ops.
- apigatewaymanagementapi: dead constant removed.
- pipes, opensearch, dax, emrserverless, codestarconnections, mediastore,
  kinesisanalytics: items reclassified.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Witness Patrol and others added 5 commits October 11, 2026 19:50
…ix lightsail LB test race

EFS file systems are backed by host directories (<data-dir>/efs with
--persist) and access points resolve to their RootDirectory.Path,
created with CreationInfo ownership and permissions and contained
against path escapes. Lambda functions with FileSystemConfigs get the
access point bind-mounted at LocalMountPath; Create/Update validate one
config, a VpcConfig with subnets, an access point ARN, the /mnt/ path
pattern, and a mount target in the function's VPC. PosixUser is not
applied (runtime containers run as root).

TestLoadBalancerRoundTrip waits for the instance to reach running
before attaching it, which raced the pending->running transition in CI.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
StartQueryExecution runs SELECT/WITH queries for real: each referenced
Glue table's S3 objects (or registered partitions, with partition keys
as columns) load into a per-query in-memory SQLite database. CSV
(OpenCSVSerde, LazySimpleSerDe with delimiters, header skip and \N
nulls), JSON lines and gzip are read; Parquet/ORC/Avro fail with
NOT_SUPPORTED. The common Presto subset is translated (quoted and
qualified identifiers, CAST, date/time literals and functions,
approx_distinct, regexp_like, CTEs, joins, windows). DDL (CREATE
EXTERNAL TABLE, DROP TABLE, MSCK REPAIR, ADD PARTITION, SHOW, DESCRIBE)
routes to Glue. Results are written to the output location as quoted
CSV plus metadata, with statistics; row, byte and time caps apply and
StopQueryExecution cancels. Interrupted queries restored from a snapshot
are FAILED. CTAS/INSERT/UNLOAD still do not write S3 data.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…S Firewall in the embedded DNS

The embedded DNS server gains an interceptor hook. Route 53 Resolver
maps each query's source IP to a VPC (EC2 ENI/instance IPs, then subnet
CIDRs) and applies, for that VPC: DNS Firewall rule groups by priority
(BLOCK NODATA/NXDOMAIN/OVERRIDE, ALLOW, ALERT), then the most specific
of associated FORWARD/SYSTEM/RECURSIVE rules and private hosted zones.
FORWARD rules query their TargetIps with failover (SERVFAIL when all
fail); private zones answer authoritatively from Route 53; query logs go
to CloudWatch Logs destinations. Unmapped sources keep the static
records. S3/Firehose log destinations, DoH targets and Advanced firewall
rules are not modelled.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
With BATCH_EXECUTE_JOBS=true (--batch-execute-jobs) jobs run in Docker:
SUBMITTED through RUNNABLE, STARTING, RUNNING to SUCCEEDED or FAILED by
the real exit code, with Ref:: parameter substitution, resource limits,
AWS_BATCH_* and endpoint environment, job-role credentials from STS,
retryStrategy with evaluateOnExit, attemptDurationSeconds timeouts,
TerminateJob stopping the container, and output in CloudWatch Logs under
/aws/batch/job. Array children, dependsOn (N_TO_N, SEQUENTIAL), queue
priority and compute environment maxvCpus capacity are honoured. The
default remains the simulated lifecycle.

DescribeJobs now reports exit code 0 (the field was dropped when zero)
and overlays the latest attempt's log stream, exit code and reason.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sults

CREATE TABLE AS (format, external_location, partitioned_by,
field_delimiter, write_compression; IF NOT EXISTS; WITH [NO] DATA)
writes TEXTFILE/CSV/JSON objects (optionally gzipped, key=value
partition layout) and registers the Glue table and partitions; INSERT
INTO appends objects and registers new partitions; UNLOAD writes files
without a table. Non-empty targets fail HIVE_PATH_ALREADY_EXISTS,
existing tables TABLE_ALREADY_EXISTS, and Parquet/ORC/Avro output
NOT_SUPPORTED.

GetQueryResults returns SQL NULL as a Datum with no VarCharValue
(previously an empty string); the result CSV leaves NULL unquoted and
writes "" for empty strings.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Comment thread services/athena/engine_funcs.go Fixed
Comment thread services/athena/engine_funcs.go Fixed
Comment thread services/athena/engine_funcs.go Fixed
Comment thread services/athena/engine_funcs.go Fixed
Comment thread services/athena/engine_funcs.go Fixed
Comment thread services/cloudfront/dataplane_origin.go Fixed
Comment thread services/cloudfront/dataplane_signing.go Fixed
Comment thread services/efs/storage.go Fixed
Comment thread services/elbv2/dataplane_forward.go Fixed
Witness Patrol and others added 4 commits October 11, 2026 22:02
SendCommand to a running, container-backed EC2 instance with an
instance profile runs the document's steps in the container (shell or
pwsh, {{ param }} substitution, working directory, execution timeout):
exit 0 is Success, non-zero Failed with ResponseCode, timeouts TimedOut,
CancelCommand kills the process. MaxConcurrency and MaxErrors are
honoured; stdout/stderr are truncated as documented, with full output
written to the S3 output location and CloudWatch Logs when configured.
tag: targets resolve against these instances, which appear as online
managed instances in DescribeInstanceInformation. Other targets keep the
simulated behaviour, which now also reports ResponseCode.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ServerlessV2ScalingConfiguration is validated on create, modify and
restore (MinCapacity 0-256, MaxCapacity 0.5-256 in 0.5 steps, min <= max,
SecondsUntilAutoPause 300-86400, default 300); ModifyDBCluster used to
ignore it and now merges partial updates. Clusters with MinCapacity 0
pause after their idle window: the engine container stops (data kept),
status stays available as in AWS, zero capacity metrics and pause/resume
events are published. Proxy connections, a new counting forwarder for
MySQL-family engines, and Data API calls count as activity; a connection
resumes the cluster, and a Data API call on a paused cluster starts the
resume and returns DatabaseResumingException until it completes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- athena: date_add returns NULL for amounts outside int32 instead of
  converting an unbounded ParseInt result (go/incorrect-integer-conversion).
- efs: every file operation on a file-system or access-point path checks
  it stays under the storage root (go/path-injection); directories outside
  the root are never removed.
- cloudfront: the canned signed-URL policy is built with json.Marshal
  (go/unsafe-quoting). Custom origins now validate the origin certificate
  against the system pool, as CloudFront does (502 for untrusted chains),
  instead of skipping verification.
- athena: SQLResultPage is exported (CodeFactor unexported-return).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Docker-backed instances in a VPC join a labelled bridge network
(gopherstack-vpc-<id>) whose IPAM subnet is the VPC CIDR, with the
instance's subnet-allocated private IP as a static IP, so instances in a
VPC reach each other by private IP; VPCs are isolated from each other.
On an address-pool conflict the network falls back to Docker IPAM and the
instance is tagged with a note. DeleteVpc removes the network once empty;
idle labelled networks are pruned at start, and unlabelled networks are
never touched.

TCP/UDP ports opened to 0.0.0.0/0 or ::/0 by the instance's security
groups are published on 127.0.0.1; the host ports are listed at
/_gopherstack/ec2/instances/<id>/ports and in a gopherstack:published-ports
tag. Rule changes apply to later launches; intra-VPC security group
enforcement is not modelled.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Comment thread services/elbv2/dataplane_forward.go Dismissed
Witness Patrol and others added 7 commits October 12, 2026 00:38
recordSuccessfulPhases emitted the elapsed phase time as a float, but
the SDK types durationInSeconds as int64, so BatchGetBuilds failed to
decode whenever the elapsed time was fractional. Durations are now
truncated to whole seconds.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd metadata relay; SSM CodeQL fixes

- A reserved create-time tag, gopherstack:id, pins the generated ID of
  EC2 instances/VPCs/subnets/security groups, ECS tasks, KMS keys,
  Cognito user pools, API Gateway REST and HTTP APIs, EFS file systems,
  CloudFront distributions, ELBv2 load balancers, RDS DbiResourceIds and
  Secrets Manager ARN suffixes. The tag is validated against each ID
  format, conflicts return the service's exists error, and it is never
  stored, listed or accepted by tag-on-existing calls. A guard test
  drives all of them through the SDK; see docs/pinned-ids.md.
- LINKLOCAL_PROXY=true attaches ECS task and EC2 instance containers to
  a labelled network with a relay at 169.254.170.2 and 169.254.169.254,
  so tasks use AWS_CONTAINER_CREDENTIALS_RELATIVE_URI and instances use
  the default IMDS address, as SDKs expect. Fixes a cancelled request
  context on half-closed relay connections.
- ssm: no computed allocation size in document parsing; exit codes are
  clamped to int32 (CodeQL).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… for completion

The test created an external table without LOCATION (which Athena
rejects) and read each query's state once immediately, though queries
run asynchronously. It now creates the bucket and Glue database, uses
LOCATION, and polls each query to a terminal state.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rks end to end

ssooidc (sso-oauth): RegisterClient, StartDeviceAuthorization, CreateToken
(device_code with AuthorizationPending/SlowDown/ExpiredToken/AccessDenied,
refresh_token, authorization_code with PKCE) and CreateTokenWithIAM.
Device codes are approved at /_gopherstack/sso/device (optionally as a
named identity-store user); /_gopherstack/sso/authorize serves the
authorization-code redirect.

sso portal (awsssoportal): ListAccounts, ListAccountRoles,
GetRoleCredentials and Logout, scoped to the signed-in user's direct and
group account assignments from SSO Admin and Identity Store.
GetRoleCredentials provisions the AWSReservedSSO_<permission set> role
with the permission set's policies and assumes it, so
GetCallerIdentity returns the assumed SSO role. A full-stack test drives
the SDK device flow and ssocreds provider.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ult values; reject external tables without LOCATION

- cloudwatchlogs: JSON filter patterns support EXISTS, NOT EXISTS,
  IS NULL and IS NOT NULL; space-delimited patterns support &&/|| inside
  a term and an ellipsis at any position; more than three dimensions is
  InvalidParameterException; metric filter defaultValue is now published
  once per period in which a filter matched nothing (for filters without
  dimensions). A full-stack test checks PutLogEvents -> GetMetricData.
- athena: CREATE EXTERNAL TABLE without LOCATION fails (it succeeded and
  registered nothing).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n end-to-end flows

- secretsmanager: PutSecretValue with VersionStages returned 500 (broke
  the AWSPENDING rotation step); replicating to the primary's own Region
  made it its own replica (DeleteSecret then skipped the recovery
  window); partial and mismatched ARNs resolved wrongly; BlockPublicPolicy
  defaulted to true and missed principal lists; KMS failures were 500s the
  SDK retried (now EncryptionFailure/DecryptionFailure).
- ses: template HtmlPart was silently dropped (read as HTMLPart);
  friendly-from sources were rejected; SNS event destinations publish
  Send events with AWS's eventType casing, mail.tags and sendingAccountId.
- sesv2: friendly-from accepted; Send and Delivery events are delivered
  to SNS event destinations (they were stored but never sent).
- appsync: AWS scalars and directives are predefined, so real schemas
  load; results are projected to the selection set (aliases, __typename);
  NONE data sources pass the payload; DynamoDB resolvers return plain
  JSON and PutItem writes attributeValues; a graphql-ws real-time
  endpoint delivers @aws_subscribe subscriptions.
- opensearch: a partial ClusterConfig update keeps omitted members
  (it blanked InstanceType and reset flags).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Comment thread services/appsync/ddb_result.go Fixed
Comment thread services/appsync/ddb_result.go Fixed
Witness Patrol and others added 9 commits October 12, 2026 12:51
…d-to-end flows

- glue: crawlers infer tables from S3 (format, CSV/TSV/JSON column types,
  TablePrefix, per-folder tables, Hive partitions; re-crawls update only
  crawler-owned tables) instead of creating empty placeholder tables (S3
  wiring follows); partitions with the wrong number of values are
  rejected; workflow runs complete when their actions finish (they stayed
  RUNNING and blocked MaxConcurrentRuns); succeeded job runs report
  ExecutionTime.
- emr: steps run one at a time PENDING->RUNNING->COMPLETED (a WAITING
  cluster reads RUNNING meanwhile); terminate cancels pending and
  interrupts running steps; auto-termination applies on describe/list.
- sagemaker: InitialVariantWeight defaults to 1.0 (was 0); training
  artifacts land under <output>/<job>/output; notebook URLs use the
  notebook host (were built from the ARN); pipeline executions list their
  steps.
- bedrock: ListGuardrails with an identifier returns every version;
  completed model customization jobs return endTime.
- codepipeline: action executions report input and pipelineVersion.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…esolvers; SESv2 SNS events; Redshift Serverless lifecycle; leak tests out of the unit budget

- appsync: DynamoDB resolvers support UpdateItem, DeleteItem, Query,
  Scan, BatchGetItem, BatchPutItem and BatchDeleteItem with conditions
  (ConditionalCheckFailedException in errorType), pagination and the
  AppSync result shapes; resolvers on non-root types run with
  $ctx.source.
- sesv2: SNS event destinations are wired to SNS.
- redshift: Serverless workgroups go CREATING/MODIFYING/DELETING with an
  opt-in --lifecycle-redshiftserverless window; busy resources reject
  updates and deletes with ConflictException; name, capacity and port
  validation. redshift-data checks WorkgroupName exists and is AVAILABLE.
- ci: TestLeak* skip under -short (the sharded unit run hit its 10m
  limit) and run in a dedicated leak-tests job (make leak-test).
- CodeQL: appsync result allocation and ssm exit-code narrowing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd-to-end flows

- kafka: GetBootstrapBrokers returned localhost:9092 always; it now lists
  one b-N.<cluster>.<id>.c2.kafka.<region>.amazonaws.com endpoint per
  broker, follows broker-count updates and ClientBroker (TLS-only by
  default; serverless returns only SASL/IAM). SCRAM batch responses carry
  clusterArn. Opt-in lifecycle delay: CREATING, UPDATING with operation
  tracking.
- memorydb: DeleteCluster reported available; node CreateTime moved on
  every describe; snapshot restores ignored explicit node type, shards,
  engine and port; updates never showed updating; an existing
  FinalSnapshotName was silently overwritten.
- docdb, neptune: deletes report deleting; snapshot restore keeps master
  username, port and KMS key (and final snapshots get an ARN); static
  parameter changes and group switches show pending-reboot until reboot;
  missing cluster parameter groups are DBClusterParameterGroupNotFound.
  Neptune instances report their parameter group.
- elasticache: EngineVersion resolved against the catalog (it was
  ignored); clusters report their parameter group; node groups follow the
  replication group's transitional states; global datastores require an
  existing primary.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rce, CodeBuild and S3 deploy; kafka lifecycle knob

- glue: crawlers are wired to S3 (regional siblings inherit it), so
  StartCrawler infers tables, columns and partitions from the data.
- codepipeline: Source/S3 reads the object and stages the output
  artifact in the artifact store (missing object fails with
  ConfigurationError); Build/CodeBuild starts the build with the input
  artifact as source and stays InProgress until the build finishes, then
  succeeds or fails with its status; Deploy/S3 copies or extracts the
  artifact. Builds pass the input through unchanged (no buildspec runs).
- kafka: --lifecycle-kafka / KAFKA_LIFECYCLE_DELAY reaches the backend.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…pass on end-to-end flows

- iot: CreateKeysAndCertificate/CreateCertificateFromCsr/provisioning
  returned one constant unparseable PEM; they now issue real X.509
  certificates with SHA-256 certificate IDs. Fleet indexing parses Lucene
  queries (wildcards, boolean, ranges). DescribeEndpoint returns the
  per-type endpoints. The iot-jobs-data device API exists (jobs used to
  stay QUEUED forever). Thing type deprecation, recursive group listing
  and attach validation.
- backup: jobs go CREATED -> RUNNING -> COMPLETED; ResourceType comes
  from the ARN; vault-lock retention is enforced; report plans and
  templates are validated.
- transfer: resource IDs match the SDK patterns (Terraform validates
  workflow IDs); identity provider and home directory rules.
- cognitoidentity: LookupDeveloperIdentity read a field the SDK never
  sends; re-login maps to the same identity (iss+sub); expired or
  foreign-client tokens are NotAuthorized; role and mapping validation;
  ASIA access key shape.
- organizations: delegated-admin constraint reasons; policy types require
  ALL features; resource policy IDs match the SDK pattern.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…onvert default queue

TestCloudFormationDashboard created a stack with no resources, which
template preflight now rejects as AWS does; TestMediaConvertDashboard
expected an empty queue list, but the account now has the SYSTEM Default
queue AWS creates.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…stic ec2 port fake

GetShardIterator stamped iterators with the backend clock, but
decodeIterator checked expiry against wall time and GetRecords stamped
the next iterator with time.Now(). With a backend clock that differs
from wall time (fake clocks in tests, delayed parallel subtests in CI),
iterators read as expired, so the Kinesis Analytics sampler and the
EventBridge Kinesis target saw no records. Expiry and chaining now both
use the backend clock; a root test drives every in-process Kinesis
reader with the clock skewed both ways.

The ec2 port-publishing test fake assigned host ports in map order;
it now iterates sorted and the test asserts exact host ports.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
startProxy and startForwarder published the front end (atomic Store)
before wg.Go(acceptLoop), while reap loads it in another goroutine and
calls wg.Wait(); the first Add was not ordered before Wait, which the
race detector flags when a backend closes while an engine unit starts.
Add now happens before the Store, with Done deferred in the accept loop.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The root package runs with coverage instrumentation of every package
plus -race and now exceeds 10m on CI runners (about 150s locally without
coverage).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@agbishop
agbishop merged commit c4f1ac8 into main Oct 13, 2026
40 checks passed
@agbishop
agbishop deleted the chore/parity-sweep-2026-10-07 branch October 13, 2026 03:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants