Repository navigation
Conversation
|
| Filename | Overview |
|---|---|
| src/main/java/io/github/hectorvent/floci/services/cloudformation/CloudFormationResourceProvisioner.java | Propagates the resolved CloudFormation compression format into the Firehose S3 destination. |
| src/test/java/io/github/hectorvent/floci/services/cloudformation/CloudFormationFirehoseIntegrationTest.java | Adds GZIP to the template fixture and verifies it appears in the DescribeDeliveryStream response. |
Reviews (3): Last reviewed commit: "test(cloudformation): assert Firehose co..." | Re-trigger Greptile
pgermosen
left a comment
There was a problem hiding this comment.
@AbarnaaSree — welcome, and thank you for this. The fix itself is correct and well targeted; the main thing I would like changed is one line in the test. Let me explain why, because it is a genuinely easy trap to fall into.
The test does not currently exercise the fix
The test change adds "CompressionFormat": "GZIP" to the template that goes in, but the assertions afterwards only check that the stack reaches CREATE_COMPLETE, that the ARN resolves, and that the delivery stream exists. Nothing checks what compression format came back.
I removed your fix entirely and ran the test again:
Tests run: 1, Failures: 0, Errors: 0 → BUILD SUCCESS
So the test passes with the fix, without the fix, and with the fix deleted. That is why "CloudFormationFirehoseIntegrationTest — 1 passed" cannot serve as verification here — it would have reported exactly the same before your change.
The good news is that it is a one-line fix. Adding an assertion to the existing DescribeDeliveryStream block:
.statusCode(200)
.body(containsString(streamName))
.body(containsString("GZIP"));I tried exactly that locally: with your fix it passes, and with your fix removed it fails. That is the property a regression test needs — it has to be able to fail.
Once you have that, a good habit for future PRs is to run the new test against the unmodified code first and watch it fail. If it passes before the fix, it is not yet testing the fix. Several regular contributors here do that as a matter of course and quote the failure in the description; it is the single most convincing thing you can put in front of a reviewer.
One small wording point in the same area: the description says "Added a regression case", but no new test method was added — the existing test's input template was edited. Worth saying precisely which, since a reviewer will look for the new case.
Your fix is right, and I want to be clear about that
None of the above is a doubt about the change itself. I checked it:
The bug is real. DeliveryStreamDescription defaults compressionFormat to UNCOMPRESSED when it is null, so a stack that asked for GZIP silently described as uncompressed — exactly as you say.
The fix is in the right place, and your claim that it covers both S3DestinationConfiguration and ExtendedS3DestinationConfiguration is accurate. I verified rather than assumed: both resolve into the same s3Node a few lines above, so the single setter genuinely handles both. That was worth checking and it holds.
A few housekeeping items
Nothing here affects the code, but they are worth getting into the habit of:
- The title wants a scope. The convention in this repo is
fix(cloudformation): …orfix(firehose): …rather than a barefix:. The automated check passes either way, since scope is optional in Conventional Commits, but every other change here carries one. - The PR template was replaced rather than filled in. The Type of change, AWS Compatibility and checklist sections are where reviewers look for "which SDK or CLI did you check this against" and "do the tests pass locally", so filling them in saves a round trip.
- No issue is linked. There is a related one — #2328, "Firehose: apply CompressionFormat when delivering to S3" — though it is not the same thing: that one is about actually compressing the delivered data, whereas yours is about preserving the setting through CloudFormation. Worth referencing as related rather than as
Closes, so the other issue stays open. - The code blocks in the description are not fenced, so the JSON and Java render as plain text. Wrapping them in triple backticks makes it much easier to read.
- I have added the
bug,cloudformationandfirehoselabels.
Your CI checks are still waiting on a maintainer to approve the workflow run — that is GitHub's gate on first-time contributors rather than anything wrong with the PR, and it will be sorted out shortly.
Add the assertion and I will be glad to approve. Thanks again for picking this up — a four-line fix in the right place is a good first contribution.
|
Thanks for the detailed review! I’ve added the requested The test passes with the fix and fails when the compression-format propagation is removed. |
pgermosen
left a comment
There was a problem hiding this comment.
The assertion is genuinely load-bearing now, not the earlier detached-semicolon version. Reverted the CompressionFormat propagation and confirmed the test fails (UNCOMPRESSED instead of GZIP), then restored and confirmed it passes. Re-verified against current main with the actual merged tree compiled and tested — clean.
Approving. Thanks for working through the feedback, and welcome to the project.
# [2.0.0](https://github.com/floci-io/floci/compare/1.7.0...2.0.0) (2026-09-01)
* fix(stepfunctions)!: reject JSONata top-level references at definition time ([#2699](https://github.com/floci-io/floci/issues/2699)) ([5534460](https://github.com/floci-io/floci/commit/553446049294499455a70f411d2db3c0050c17ae))
### Bug Fixes
* **acm:** correct wildcard validation record names ([#2575](https://github.com/floci-io/floci/issues/2575)) ([88bf0a2](https://github.com/floci-io/floci/commit/88bf0a293155947487ce72b89cca2514daf7547a))
* **apigateway:** match measured JWT claim wire format and enforce route authorizationScopes ([#2011](https://github.com/floci-io/floci/issues/2011)) ([4980210](https://github.com/floci-io/floci/commit/498021087f23b316d609814c264a280b17a719c5))
* **apigateway:** pass RequestContext to ApiGatewayExecuteController in trailing-slash tests ([#2394](https://github.com/floci-io/floci/issues/2394)) ([41953d8](https://github.com/floci-io/floci/commit/41953d88200017da7b4eb15d0f6ce149aca83c5b)), closes [#2377](https://github.com/floci-io/floci/issues/2377)
* **apigateway:** project HTTP API v2 cookies ([#2391](https://github.com/floci-io/floci/issues/2391)) ([48880aa](https://github.com/floci-io/floci/commit/48880aa79ae9940f4135da25641b70decc7faade))
* **apigateway:** report RestApi as available ([#2816](https://github.com/floci-io/floci/issues/2816)) ([62dbd9d](https://github.com/floci-io/floci/commit/62dbd9ddf953ddbb567818f85c0a49a077f0837b))
* **apigateway:** route CORS preflight (OPTIONS) to deployed API integ… ([#1955](https://github.com/floci-io/floci/issues/1955)) ([0e3391c](https://github.com/floci-io/floci/commit/0e3391cac2de0823f4b30b3b89127b2cbb7d89ba)), closes [#1928](https://github.com/floci-io/floci/issues/1928)
* **apigateway:** support AWS type Lambda integration and fix duplicate Content-Type header ([#2049](https://github.com/floci-io/floci/issues/2049)) ([72dfa63](https://github.com/floci-io/floci/commit/72dfa634f75a849a096804c72c5c4c8ba4fa5442))
* **apigateway:** support underscores in v2 path parameters ([#2721](https://github.com/floci-io/floci/issues/2721)) ([c18af5b](https://github.com/floci-io/floci/commit/c18af5b68adada89c1c81055523e1159208a0568))
* **apigatewayv2:** CloudFormation AuthorizationScopes pass-through and scope-ingestion hardening (follow-up to [#2011](https://github.com/floci-io/floci/issues/2011)) ([#2431](https://github.com/floci-io/floci/issues/2431)) ([d0a96d8](https://github.com/floci-io/floci/commit/d0a96d87b1a9f17d87112b470126c256bfe958df))
* **apigatewayv2:** preserve trailing slash in HTTP API event path ([#2367](https://github.com/floci-io/floci/issues/2367)) ([6469637](https://github.com/floci-io/floci/commit/64696375082a028941488c9cf82d72e18d77c9aa)), closes [#1863](https://github.com/floci-io/floci/issues/1863) [#2136](https://github.com/floci-io/floci/issues/2136)
* **apigatewayv2:** propagate Lambda REQUEST authorizer context to HTTP API backends ([#2715](https://github.com/floci-io/floci/issues/2715)) ([908d70d](https://github.com/floci-io/floci/commit/908d70db3d13c41fa696fe57cd55f3e2976a032f)), closes [#1011](https://github.com/floci-io/floci/issues/1011) [#812](https://github.com/floci-io/floci/issues/812) [#581](https://github.com/floci-io/floci/issues/581)
* **apigatewayv2:** return stage tags across protocols ([#2413](https://github.com/floci-io/floci/issues/2413)) ([5744082](https://github.com/floci-io/floci/commit/5744082c5eb3b99e1a0c52db644b64a67afada77))
* **apigatewayv2:** route requests to API-owning account ([#2377](https://github.com/floci-io/floci/issues/2377)) ([ba9ce84](https://github.com/floci-io/floci/commit/ba9ce8424223f5652ba34f53cbca291372084e53))
* apply S3 Vectors metadata filters ([#2417](https://github.com/floci-io/floci/issues/2417)) ([bd8d99b](https://github.com/floci-io/floci/commit/bd8d99b7575bd70b50fc4fe51f5ec33309c8a14a)), closes [#2160](https://github.com/floci-io/floci/issues/2160)
* **appsync:** honor configured base URL in API URIs ([#2457](https://github.com/floci-io/floci/issues/2457)) ([86e1c01](https://github.com/floci-io/floci/commit/86e1c016cd0bb093be9232f2a4444647a85a97b1))
* **appsync:** use ApiKey.id as the API key value ([#2645](https://github.com/floci-io/floci/issues/2645)) ([2932500](https://github.com/floci-io/floci/commit/29325006bb7fd17714227653a4abcf76e2039a28))
* **appsync:** wait for schema creation in SDK test ([#2456](https://github.com/floci-io/floci/issues/2456)) ([43e5e90](https://github.com/floci-io/floci/commit/43e5e903d16941724b66fee943315dc4143da91b))
* **athena:** route database DDL to Glue ([#2757](https://github.com/floci-io/floci/issues/2757)) ([2480daa](https://github.com/floci-io/floci/commit/2480daaa099bb50d670bcf65b8f22c2cee8dba43))
* **bedrock-agentcore:** allow maxResults up to 1000 ([#2487](https://github.com/floci-io/floci/issues/2487)) ([9792198](https://github.com/floci-io/floci/commit/97921982d70b67725087016bd33e40bf7ffbea0a))
* **bedrock-agentcore:** support memory tagging and dropped fields ([#2501](https://github.com/floci-io/floci/issues/2501)) ([feb669d](https://github.com/floci-io/floci/commit/feb669d58b806965a1a403ba5656f02eeb82e994)), closes [#2316](https://github.com/floci-io/floci/issues/2316)
* **build:** resolve the JSON schema library from Maven Central ([#2811](https://github.com/floci-io/floci/issues/2811)) ([66d910c](https://github.com/floci-io/floci/commit/66d910c61348ed01f9e38563086e18ff864948ee))
* **ci:** replace setup-java's broken maven cache with actions/cache ([#2503](https://github.com/floci-io/floci/issues/2503)) ([a68bfc4](https://github.com/floci-io/floci/commit/a68bfc4e68d265ebf34011b67ae83e0b65e489d5))
* **cloudformation:** adopt managed policy on stack update ([#2717](https://github.com/floci-io/floci/issues/2717)) ([51edcca](https://github.com/floci-io/floci/commit/51edccacbf7ab22977ca765cfb481227d449a1c8))
* **cloudformation:** fail the stack when Lambda S3 code cannot be read ([#2650](https://github.com/floci-io/floci/issues/2650)) ([231c097](https://github.com/floci-io/floci/commit/231c0972b0ec9e663388bf85ec2a15f3ee1ddf38)), closes [#2648](https://github.com/floci-io/floci/issues/2648)
* **cloudformation:** keep a rolled-back stack's diagnostics until the next redeploy ([#2365](https://github.com/floci-io/floci/issues/2365)) ([c54f8dd](https://github.com/floci-io/floci/commit/c54f8ddf023007d975b3dc300873281727e74c66)), closes [#2207](https://github.com/floci-io/floci/issues/2207) [Stack#changeSets](https://github.com/Stack/issues/changeSets) [#2419](https://github.com/floci-io/floci/issues/2419)
* **cloudformation:** no-op stack update for unchanged fixed-name resources ([#2385](https://github.com/floci-io/floci/issues/2385)) ([5864ff6](https://github.com/floci-io/floci/commit/5864ff6aa88e0047b5a3540ac4722c8cfc424e4d)), closes [lex00/floci#16](https://github.com/lex00/floci/issues/16)
* **cloudformation:** reconcile DynamoDB streams declared by StreamSpecification ([#2411](https://github.com/floci-io/floci/issues/2411)) ([c4597f2](https://github.com/floci-io/floci/commit/c4597f2e53ce2c116559353721f516aac1bf3ba1))
* **cloudformation:** resolve IAM assume role policy intrinsics ([#2630](https://github.com/floci-io/floci/issues/2630)) ([6a1d86e](https://github.com/floci-io/floci/commit/6a1d86e43fb0939c833f92a864e9cf44bb6b70cf))
* **cloudformation:** tolerate missing stack resources during deletion ([#2039](https://github.com/floci-io/floci/issues/2039)) ([12b8ddd](https://github.com/floci-io/floci/commit/12b8ddd6291b901a086bc106d346ea87ffb8b09b))
* **cloudfront:** include terraform-required distribution fields ([#1940](https://github.com/floci-io/floci/issues/1940)) ([8ac23de](https://github.com/floci-io/floci/commit/8ac23deb064b243884563db73745943926459f31)), closes [#1930](https://github.com/floci-io/floci/issues/1930)
* **cloudfront:** separate DEVELOPMENT and LIVE function stages ([#2622](https://github.com/floci-io/floci/issues/2622)) ([0dfec3c](https://github.com/floci-io/floci/commit/0dfec3cf3cd4db7d212007472dd7f9393caf4661))
* **cloudwatch:** decompress gzipped cbor bodies. ([#2379](https://github.com/floci-io/floci/issues/2379)) ([f952fff](https://github.com/floci-io/floci/commit/f952fffe77e9c44e05bbeadeeba8fb9d73a6f341))
* **cloudwatch:** evaluate alarms over CloudWatch's wider evaluation range ([#2771](https://github.com/floci-io/floci/issues/2771)) ([cfe8566](https://github.com/floci-io/floci/commit/cfe8566511cf0ac720174f95e72a07b41ff517be)), closes [#2700](https://github.com/floci-io/floci/issues/2700)
* **cognito:** AWS-accurate `UsernameAttributes` pools — UUID username, alias sign-in, and token/revocation parity ([#1849](https://github.com/floci-io/floci/issues/1849)) ([1ca19c7](https://github.com/floci-io/floci/commit/1ca19c722ac8ed3dd20b1a4e396ebb11f58aaec5))
* **cognito:** enforce user pool password policies ([#2070](https://github.com/floci-io/floci/issues/2070)) ([3aaf745](https://github.com/floci-io/floci/commit/3aaf74520eadd2c0a71ec84b2ab06a1b406f2f80)), closes [#2066](https://github.com/floci-io/floci/issues/2066) [#2066](https://github.com/floci-io/floci/issues/2066)
* **cognito:** reject self-managed verification status ([#2532](https://github.com/floci-io/floci/issues/2532)) ([f8597bd](https://github.com/floci-io/floci/commit/f8597bdef91e5538988afb1ac7bec5ab2c90eaa6))
* **docdb:** give a record without an ARN the one it should have had ([#2425](https://github.com/floci-io/floci/issues/2425)) ([7602002](https://github.com/floci-io/floci/commit/760200223a557b8a824d10e856e8d910e051e3d9))
* **docdb:** refuse an engine version a live account does not list ([#2682](https://github.com/floci-io/floci/issues/2682)) ([46d2f4e](https://github.com/floci-io/floci/commit/46d2f4e70f765d4f24842b5530d79d3d078290aa)), closes [#2681](https://github.com/floci-io/floci/issues/2681)
* **docdb:** scope cluster and instance identifiers per region ([#2440](https://github.com/floci-io/floci/issues/2440)) ([3887a6c](https://github.com/floci-io/floci/commit/3887a6ca65479e41fcf7ccc17ee231688c3bba75)), closes [#2408](https://github.com/floci-io/floci/issues/2408)
* **docdb:** store and return cluster and instance settings ([#2651](https://github.com/floci-io/floci/issues/2651)) ([f019573](https://github.com/floci-io/floci/commit/f019573bf164245e8a0555d9d7a3587e5feb7cb9)), closes [#2614](https://github.com/floci-io/floci/issues/2614)
* **dynamodb:** cap GSI multi-attribute key parts at 4 attributes ([#2475](https://github.com/floci-io/floci/issues/2475)) ([13f6867](https://github.com/floci-io/floci/commit/13f68670d770b35bb5341320cd510078866d6a8c)), closes [#2460](https://github.com/floci-io/floci/issues/2460)
* **dynamodb:** enforce composite query order ([#2471](https://github.com/floci-io/floci/issues/2471)) ([e4356de](https://github.com/floci-io/floci/commit/e4356def24503cf6fac01c6e48a2228087c4c37d)), closes [#2462](https://github.com/floci-io/floci/issues/2462)
* **dynamodb:** hybrid persistence ([#2677](https://github.com/floci-io/floci/issues/2677)) ([e531683](https://github.com/floci-io/floci/commit/e5316839caa93c3ca6e856df85723f7be7f6a8be))
* **dynamodb:** recognize every HASH attribute of a composite GSI partition key ([#2474](https://github.com/floci-io/floci/issues/2474)) ([768e96a](https://github.com/floci-io/floci/commit/768e96a33fb3c7de9421b9249f3f3850c2a8a562)), closes [#2461](https://github.com/floci-io/floci/issues/2461)
* **dynamodb:** reject key attribute values whose type does not match the key schema ([#2625](https://github.com/floci-io/floci/issues/2625)) ([bf6c7b0](https://github.com/floci-io/floci/commit/bf6c7b001cbe0c9ec642f34e3a54b8e231d94175)), closes [#2624](https://github.com/floci-io/floci/issues/2624)
* **dynamodb:** reject LSI KeySchema with other than one sort key ([#2476](https://github.com/floci-io/floci/issues/2476)) ([0397826](https://github.com/floci-io/floci/commit/0397826b9087604207464b9dfbcb663475837ba0)), closes [#2459](https://github.com/floci-io/floci/issues/2459)
* **dynamodb:** return LastEvaluatedKey when Limit stops exactly at the last item ([#2389](https://github.com/floci-io/floci/issues/2389)) ([41ff13e](https://github.com/floci-io/floci/commit/41ff13e66d0fde2b3619648bdf80161e478bde2b)), closes [#2383](https://github.com/floci-io/floci/issues/2383)
* **dynamodb:** stop getSortKeyNames() from corrupting persisted tables ([#2463](https://github.com/floci-io/floci/issues/2463)) ([726c9c7](https://github.com/floci-io/floci/commit/726c9c7446b8b2755586d4c2465f2b981d2b45b9)), closes [#2415](https://github.com/floci-io/floci/issues/2415)
* **dynamodb:** tolerate whitespace before a function's own parenthesis ([#2510](https://github.com/floci-io/floci/issues/2510)) ([e4b101d](https://github.com/floci-io/floci/commit/e4b101d5dab2de9f48755f8a80705db9f15c9f70)), closes [#2509](https://github.com/floci-io/floci/issues/2509)
* **dynamodb:** validate cursor key types ([#2470](https://github.com/floci-io/floci/issues/2470)) ([e3df59a](https://github.com/floci-io/floci/commit/e3df59ae1f7e5ffe0a1fe8da6d8669b2e996e735)), closes [#2468](https://github.com/floci-io/floci/issues/2468)
* **dynamodb:** validate index access paths ([#2278](https://github.com/floci-io/floci/issues/2278)) ([30f965d](https://github.com/floci-io/floci/commit/30f965d0563daac32d27e43caab2804089e5d1a3))
* **dynamodb:** validate query key types ([#2469](https://github.com/floci-io/floci/issues/2469)) ([a57c6c8](https://github.com/floci-io/floci/commit/a57c6c8112cd2547eeedcd95dd111fa7bbaca5e2)), closes [#2467](https://github.com/floci-io/floci/issues/2467)
* **ec2:** apply availability-zone filter in DescribeInstances ([#2543](https://github.com/floci-io/floci/issues/2543)) ([3bdcd5b](https://github.com/floci-io/floci/commit/3bdcd5b84fb2d517b4a440cccc907b7ffe2f9556)), closes [#2542](https://github.com/floci-io/floci/issues/2542)
* **ec2:** canonicalize IPv4 route destinations at the API boundary ([#2620](https://github.com/floci-io/floci/issues/2620)) ([8f76e13](https://github.com/floci-io/floci/commit/8f76e13dd69ae8189cdc2227042e1e0629d01c40)), closes [Ec2ServicePersistenceTest#legacyNonCanonicalRouteDestinationCanonicalizesOnRestart](https://github.com/Ec2ServicePersistenceTest/issues/legacyNonCanonicalRouteDestinationCanonicalizesOnRestart)
* **ec2:** create /run/sshd before starting sshd ([#1855](https://github.com/floci-io/floci/issues/1855)) ([3daab4a](https://github.com/floci-io/floci/commit/3daab4a1aec6a518f8b3837131212136926b961c))
* **ec2:** derive default vpc/subnet/sg ids per region ([#2384](https://github.com/floci-io/floci/issues/2384)) ([337dead](https://github.com/floci-io/floci/commit/337dead734f292e3fb9b2f898ab69a926f4693fc)), closes [Ec2ServiceTest#defaultVpcSubnetAndSecurityGroupIdsAreRegionScoped](https://github.com/Ec2ServiceTest/issues/defaultVpcSubnetAndSecurityGroupIdsAreRegionScoped) [lex00/floci#21](https://github.com/lex00/floci/issues/21) [pre-#21](https://github.com/pre-/issues/21) [pre-#21](https://github.com/pre-/issues/21) [#21](https://github.com/floci-io/floci/issues/21) [#21](https://github.com/floci-io/floci/issues/21) [floci-io/floci#21](https://github.com/floci-io/floci/issues/21)
* **ec2:** honour documented Describe* filters and stop ENIs inheriting instance tags ([#2747](https://github.com/floci-io/floci/issues/2747)) ([26ae4ef](https://github.com/floci-io/floci/commit/26ae4ef78acdf990d7123efbf7cc0c6341b3ecb6))
* **ec2:** install packages with yum on Amazon Linux 2 guests ([#2448](https://github.com/floci-io/floci/issues/2448)) ([c9f456e](https://github.com/floci-io/floci/commit/c9f456ea7a0f0fa4ba0ec5e667a9ba5aad0e8fa9)), closes [#2449](https://github.com/floci-io/floci/issues/2449)
* **ec2:** install the SSH client package in guests, not just the server ([#2449](https://github.com/floci-io/floci/issues/2449)) ([f3029ee](https://github.com/floci-io/floci/commit/f3029ee2511d9992381203dc89ed7dc0a364c9ce))
* **ec2:** reject a duplicate route destination with RouteAlreadyExists ([#2546](https://github.com/floci-io/floci/issues/2546)) ([1be97c9](https://github.com/floci-io/floci/commit/1be97c93332de48072dc43ab01f61ea79c4cbe3a))
* **ec2:** report a reachable EIP address, and run gzipped user-data ([#2621](https://github.com/floci-io/floci/issues/2621)) ([41b5148](https://github.com/floci-io/floci/commit/41b5148824e4c481f5949506a08c8e1b68d215b4))
* **ec2:** retry Docker port collisions ([#2029](https://github.com/floci-io/floci/issues/2029)) ([b27b32f](https://github.com/floci-io/floci/commit/b27b32f044da00fa6da20f01e2d39bce2c45c6a6))
* **ec2:** round-trip launch template data instead of discarding it ([#2595](https://github.com/floci-io/floci/issues/2595)) ([f1ad306](https://github.com/floci-io/floci/commit/f1ad306599a3efb643ff60ae0ca8df0d96a26888)), closes [Ec2ServicePersistenceTest#legacyIamProfileAndInstanceTagsSurviveRestart](https://github.com/Ec2ServicePersistenceTest/issues/legacyIamProfileAndInstanceTagsSurviveRestart)
* **ec2:** store and report a route's IPv6 destination, and stop DeleteRoute NPEing ([#2492](https://github.com/floci-io/floci/issues/2492)) ([e18a262](https://github.com/floci-io/floci/commit/e18a262261fc2fb5cb8cfd91c0198999b610886d))
* **ecs:** apply cluster settings given on CreateCluster ([#2845](https://github.com/floci-io/floci/issues/2845)) ([19013b8](https://github.com/floci-io/floci/commit/19013b8b63aa8b60ee31f78ea4875c2af7d66a36)), closes [#2806](https://github.com/floci-io/floci/issues/2806)
* **ecs:** report schedulingStrategy, deploymentController and availabilityZoneRebalancing on services ([#2482](https://github.com/floci-io/floci/issues/2482)) ([13664e7](https://github.com/floci-io/floci/commit/13664e76935b14a881d60611a000d363e419d37d))
* **ecs:** roll service tasks onto a changed task definition ([#2483](https://github.com/floci-io/floci/issues/2483)) ([f3b22e7](https://github.com/floci-io/floci/commit/f3b22e7964c342517fd279e479fa493a6d80f38c))
* **ecs:** round-trip command and entryPoint on container definitions ([#2446](https://github.com/floci-io/floci/issues/2446)) ([5c45c14](https://github.com/floci-io/floci/commit/5c45c146c7fe51a4ed9472dfd90be5be57d53cd4)), closes [#2445](https://github.com/floci-io/floci/issues/2445)
* **ecs:** round-trip runtimePlatform and logConfiguration on task definitions ([#2443](https://github.com/floci-io/floci/issues/2443)) ([a2389e7](https://github.com/floci-io/floci/commit/a2389e7733249102c9736cfb3698cf409f41bc4b))
* **ecs:** scope service tasks by owning service, not by caller-supplied group ([#2731](https://github.com/floci-io/floci/issues/2731)) ([c6b9e4c](https://github.com/floci-io/floci/commit/c6b9e4c34e2ac003254511ce59baf8533e8921b0)), closes [#2716](https://github.com/floci-io/floci/issues/2716)
* **eks:** implement cluster restoration after restart to maintain state ([#2780](https://github.com/floci-io/floci/issues/2780)) ([eaecb36](https://github.com/floci-io/floci/commit/eaecb36425983dbd7fc61ec73ad7e023bbd0958d))
* **elasticache:** keep a replication group's encryption, snapshot settings, tags and ARN ([#2632](https://github.com/floci-io/floci/issues/2632)) ([75f8f42](https://github.com/floci-io/floci/commit/75f8f42d5fbdb5e075e48eea9f18b8cffd2675ac)), closes [#2615](https://github.com/floci-io/floci/issues/2615)
* **elasticache:** report transit encryption, not the auth-token flag ([#2844](https://github.com/floci-io/floci/issues/2844)) ([90d1a19](https://github.com/floci-io/floci/commit/90d1a19310221d674d15f4f87b6a3c7cc81dc25e))
* **elasticache:** return the modeled capacity fault on proxy-port exhaustion ([#2423](https://github.com/floci-io/floci/issues/2423)) ([f40d2e3](https://github.com/floci-io/floci/commit/f40d2e34f3e6fc80bce6878916d4d58a47dd5eb1))
* **elb:** route Classic (v1) requests to a dedicated handler instead of ELBv2 ([#2619](https://github.com/floci-io/floci/issues/2619)) ([afe26c6](https://github.com/floci-io/floci/commit/afe26c6ad17953fecc3452e30f0978c06bc134c1))
* **eventbridge:** AWS-conformant InputTransformer from CloudFormation and PutTargets ([#1885](https://github.com/floci-io/floci/issues/1885)) ([9b3aee6](https://github.com/floci-io/floci/commit/9b3aee6a030575bf688d5ba55686994314c9c5a6))
* **eventbridge:** return 400 for missing resources ([#2553](https://github.com/floci-io/floci/issues/2553)) ([4083d06](https://github.com/floci-io/floci/commit/4083d0667d883426a3d220cf5d822b3637181041))
* **firehose:** use request region in delivery stream ARN ([#2719](https://github.com/floci-io/floci/issues/2719)) ([47e0647](https://github.com/floci-io/floci/commit/47e064786f0c227591fcc4f3b7344320cd6f5f1a))
* **iam:** correct GetAccountSummary provider and access-key counts ([#2426](https://github.com/floci-io/floci/issues/2426)) ([17e77ba](https://github.com/floci-io/floci/commit/17e77ba9d31e6a3e05a27b9cf7441aa60aef86e7))
* **iam:** implement UpdateAccountPasswordPolicy, Get and Delete ([#2616](https://github.com/floci-io/floci/issues/2616)) ([f411a31](https://github.com/floci-io/floci/commit/f411a316a2e8dc6ae6f5555b07c9a46f1c1fe75a))
* inject AWS SDK environment into Flink sidecars ([#2486](https://github.com/floci-io/floci/issues/2486)) ([127e51e](https://github.com/floci-io/floci/commit/127e51e71b0a429de94166e856fc91d78673747d)), closes [#2404](https://github.com/floci-io/floci/issues/2404)
* **kinesis-cbor:** timestamps mis-scaled 1000x on the CBOR path ([#2432](https://github.com/floci-io/floci/issues/2432)) ([39ed771](https://github.com/floci-io/floci/commit/39ed7712a7194322b6cfa38fc5aba3dbe91f4520)), closes [#2368](https://github.com/floci-io/floci/issues/2368)
* **kinesis:** apply CreateStream's Tags instead of dropping them ([#2494](https://github.com/floci-io/floci/issues/2494)) ([564dbf2](https://github.com/floci-io/floci/commit/564dbf204f36ad25e59add7588ebb7df6708e8e8))
* **kinesis:** reject non-blob Data instead of coercing it with asText ([#2551](https://github.com/floci-io/floci/issues/2551)) ([df5581e](https://github.com/floci-io/floci/commit/df5581e5bd7fb592e062b3511dd30f0bb5fb866f)), closes [#2516](https://github.com/floci-io/floci/issues/2516)
* **kms:** grant fidelity ([#2639](https://github.com/floci-io/floci/issues/2639)) ([5400204](https://github.com/floci-io/floci/commit/54002045635852b3cc5fbdcafcc9ff8d1ca71361))
* **lambda:** delete only the named version when DeleteFunction has a Qualifier ([#2824](https://github.com/floci-io/floci/issues/2824)) ([ca4c84c](https://github.com/floci-io/floci/commit/ca4c84c9e0f04a951410c872e73d5265853965b7)), closes [#2819](https://github.com/floci-io/floci/issues/2819)
* **lambda:** honour ListLayers and ListLayerVersions query parameters ([#2817](https://github.com/floci-io/floci/issues/2817)) ([4462963](https://github.com/floci-io/floci/commit/44629631ca1e38836aa6d3405d4cc30a8f45c1fc)), closes [#2808](https://github.com/floci-io/floci/issues/2808)
* **lambda:** honour Publish on CreateFunction and UpdateFunctionCode ([#2825](https://github.com/floci-io/floci/issues/2825)) ([a7b2b79](https://github.com/floci-io/floci/commit/a7b2b794929f9f79a8f31fa374b3bafe06d89097)), closes [#2820](https://github.com/floci-io/floci/issues/2820)
* **lambda:** implement GetLayerVersionByArn ([#2812](https://github.com/floci-io/floci/issues/2812)) ([5b363ff](https://github.com/floci-io/floci/commit/5b363ffa2dd25beadd1cea3b24bea1ce9ddf1128))
* **lambda:** make the code-volume populate concurrency configurable ([#2830](https://github.com/floci-io/floci/issues/2830)) ([968ff78](https://github.com/floci-io/floci/commit/968ff78e252945f651b7ca105dfdb840bedd3159)), closes [#2050](https://github.com/floci-io/floci/issues/2050)
* **lambda:** read deployment packages via the zip central directory ([#2649](https://github.com/floci-io/floci/issues/2649)) ([cd3f367](https://github.com/floci-io/floci/commit/cd3f3677f8e82ba8664368d162ad671da646c1fc)), closes [#2593](https://github.com/floci-io/floci/issues/2593) [#1215](https://github.com/floci-io/floci/issues/1215)
* **lambda:** replace the extracted package instead of merging into it ([#2672](https://github.com/floci-io/floci/issues/2672)) ([e4c6903](https://github.com/floci-io/floci/commit/e4c690351f724223ef9c86192039a712c8bddaac)), closes [#2647](https://github.com/floci-io/floci/issues/2647)
* **lambda:** resolve ARN and function URL invocations in owning account ([#2414](https://github.com/floci-io/floci/issues/2414)) ([c22652d](https://github.com/floci-io/floci/commit/c22652dd15604e5332dba8c462b1394b101cc81f))
* **lambda:** resolve launched-container placeholder creds to the owning account ([#2657](https://github.com/floci-io/floci/issues/2657)) ([be89286](https://github.com/floci-io/floci/commit/be892864db40af1ec7b6c09a21e84ea8434999ab))
* **lambda:** return VpcConfig, SnapStart and LoggingConfig from every read path ([#2527](https://github.com/floci-io/floci/issues/2527)) ([94795dd](https://github.com/floci-io/floci/commit/94795dd67b695b0e06377299d31b5559466f2a5e)), closes [-_/#A-Za-z0-9](https://github.com/floci-io/floci/issues/A-Za-z0-9)
* **lambda:** round-trip StartingPosition on event source mappings ([#2370](https://github.com/floci-io/floci/issues/2370)) ([151e3fc](https://github.com/floci-io/floci/commit/151e3fcc7a4a5cfd6ee663ecb928c48e720f4ceb))
* **lambda:** serialize resource policy mutations ([#2430](https://github.com/floci-io/floci/issues/2430)) ([2314c85](https://github.com/floci-io/floci/commit/2314c85b620b23a5850b633d41a68c7a4fcf0b6e))
* **lifecycle:** run start/ready hooks when FLOCI_PORT is non-default ([#2439](https://github.com/floci-io/floci/issues/2439)) ([ba97c08](https://github.com/floci-io/floci/commit/ba97c084eb51c7149fadbfcca5f7b9439583a77a)), closes [#2437](https://github.com/floci-io/floci/issues/2437)
* **memorydb,neptune,docdb:** degrade gracefully with no Docker daemon ([#2386](https://github.com/floci-io/floci/issues/2386)) ([65b22ff](https://github.com/floci-io/floci/commit/65b22ff01e3fcb24d4024c18ed3557e086a567b5)), closes [lex00/floci#44](https://github.com/lex00/floci/issues/44)
* **msk:** accept an empty serverProperties on Create/UpdateConfiguration ([#2491](https://github.com/floci-io/floci/issues/2491)) ([fcd662f](https://github.com/floci-io/floci/commit/fcd662fb623531a6e98b15f5aa44b7eb0768cf05))
* **msk:** persist CreateCluster broker node groups, encryption, client auth, logging, configuration and tags ([#2366](https://github.com/floci-io/floci/issues/2366)) ([0205e4e](https://github.com/floci-io/floci/commit/0205e4ed7efe267ade3a95c0af8be9f23fbe93b5)), closes [#2571](https://github.com/floci-io/floci/issues/2571)
* **msk:** reject numberOfBrokerNodes values that only look whole after double rounding ([#2571](https://github.com/floci-io/floci/issues/2571)) ([bd436ee](https://github.com/floci-io/floci/commit/bd436eeea1d6e75a6caec0aa684408f757b66901)), closes [MskService#validateCreateRequest](https://github.com/MskService/issues/validateCreateRequest)
* **msk:** return BadRequestException when a configuration ARN does not exist ([#2572](https://github.com/floci-io/floci/issues/2572)) ([247bd59](https://github.com/floci-io/floci/commit/247bd590bcb9bbf3c91366423d69527071818140)), closes [MskService#describeConfiguration](https://github.com/MskService/issues/describeConfiguration)
* **opensearch:** address spawned domain containers by IP, not name ([#2746](https://github.com/floci-io/floci/issues/2746)) ([fcc6067](https://github.com/floci-io/floci/commit/fcc606799c06802302b64ba3d871250886c0bb44))
* preserve Firehose compression format in CloudFormation ([#2406](https://github.com/floci-io/floci/issues/2406)) ([ebd4a07](https://github.com/floci-io/floci/commit/ebd4a078d39198d8a2bdc06420ad73ab21aca100))
* preserve Route 53 private hosted-zone VPC associations ([#2342](https://github.com/floci-io/floci/issues/2342)) ([967ea84](https://github.com/floci-io/floci/commit/967ea843a0b3706143c27e6dfc142d0b21a3d7cc)), closes [#2294](https://github.com/floci-io/floci/issues/2294)
* **rds,docdb:** list DocumentDB clusters and instances in the RDS-family list form ([#2623](https://github.com/floci-io/floci/issues/2623)) ([3b0e31b](https://github.com/floci-io/floci/commit/3b0e31b8880fb1439f5b475280621da8ecc4ee89)), closes [#2613](https://github.com/floci-io/floci/issues/2613) [#1829](https://github.com/floci-io/floci/issues/1829)
* **rds,firehose,cognito:** match AWS's real defaults so a second terraform plan reports no changes ([#2420](https://github.com/floci-io/floci/issues/2420)) ([5ed3a8c](https://github.com/floci-io/floci/commit/5ed3a8cad97fd1ffe1046f6a73c91b4826689697)), closes [FirehoseService#mergeDestination](https://github.com/FirehoseService/issues/mergeDestination)
* **rds:** clear CLIENT_SSL before forwarding the TLS-terminated handshake response to the backend ([#2698](https://github.com/floci-io/floci/issues/2698)) ([0090739](https://github.com/floci-io/floci/commit/009073961725a3881646331ef026903151e03f32))
* **rds:** grant the MySQL/MariaDB master user RDS-master-equivalent privileges ([#2679](https://github.com/floci-io/floci/issues/2679)) ([6c96f47](https://github.com/floci-io/floci/commit/6c96f47f7350cf86bdb5bc47db693de9f93bef27))
* **rds:** keep the tags given to CreateDBSubnetGroup ([#2627](https://github.com/floci-io/floci/issues/2627)) ([20ecb89](https://github.com/floci-io/floci/commit/20ecb89155674e34168b76c811c0deb00da3933d)), closes [#2612](https://github.com/floci-io/floci/issues/2612)
* **rds:** propagate ModifyDBCluster master-password rotations to the backend and every proxy ([#2727](https://github.com/floci-io/floci/issues/2727)) ([895b59f](https://github.com/floci-io/floci/commit/895b59f1eeaf1824de77578469b6520f6a72a2b2)), closes [#2709](https://github.com/floci-io/floci/issues/2709)
* **rds:** propagate ModifyDBInstance master-password rotations to the backend and proxy ([#2709](https://github.com/floci-io/floci/issues/2709)) ([09a05c2](https://github.com/floci-io/floci/commit/09a05c2d77f87a8b04454ae11eda23ea6705f76e))
* **rds:** reject a duplicate create while provisioning is in flight ([#2525](https://github.com/floci-io/floci/issues/2525)) ([7ef698c](https://github.com/floci-io/floci/commit/7ef698c1f408cb0b449c493ab1951eb984d15068)), closes [#2051](https://github.com/floci-io/floci/issues/2051)
* **rds:** store and return the encryption and backup settings given on create ([#2617](https://github.com/floci-io/floci/issues/2617)) ([5033ace](https://github.com/floci-io/floci/commit/5033ace77233db320733228b544b1fd48acce93f)), closes [#2611](https://github.com/floci-io/floci/issues/2611)
* repair main CI (AslExecutor test compilation, Redshift compat test endpoint) ([#2726](https://github.com/floci-io/floci/issues/2726)) ([477e8ae](https://github.com/floci-io/floci/commit/477e8ae7b9106329213b3ee4a1c2109d44b91fa9)), closes [#2703](https://github.com/floci-io/floci/issues/2703) [#2688](https://github.com/floci-io/floci/issues/2688)
* **s3:** accept the log-delivery-write canned ACL ([#2653](https://github.com/floci-io/floci/issues/2653)) ([2a014d2](https://github.com/floci-io/floci/commit/2a014d2add67fb7b243bbf7d1d8021f09b53d1ab))
* **s3:** emit post events for browser uploads ([#2577](https://github.com/floci-io/floci/issues/2577)) ([d8ef1c8](https://github.com/floci-io/floci/commit/d8ef1c8d7b91c7cda9629834f1315eac6de7d90f))
* **s3:** prevent compliance retention downgrade ([#2755](https://github.com/floci-io/floci/issues/2755)) ([2e5935d](https://github.com/floci-io/floci/commit/2e5935d7641a9f0920e8ae7f46db8eab46d6679e))
* **s3:** resolve virtual-hosted buckets whose names contain dots ([#2493](https://github.com/floci-io/floci/issues/2493)) ([ea2b62f](https://github.com/floci-io/floci/commit/ea2b62fb955e7eef3b9b8c46f0b604d4da9703b7))
* **s3:** return x-amz-version-id from presigned POST ([#2608](https://github.com/floci-io/floci/issues/2608)) ([066e6c9](https://github.com/floci-io/floci/commit/066e6c904b4c623b56f14ee01f5a8e44e7fe684f)), closes [#2607](https://github.com/floci-io/floci/issues/2607)
* **s3:** route the replication subresource instead of falling through ([#2519](https://github.com/floci-io/floci/issues/2519)) ([ce4f6d1](https://github.com/floci-io/floci/commit/ce4f6d1c48ed87f72a7906f7ca5d70b52dc8a31a)), closes [#2296](https://github.com/floci-io/floci/issues/2296)
* **secretsmanager,rds:** rotate secrets that an AWS service manages ([#2378](https://github.com/floci-io/floci/issues/2378)) ([23015a7](https://github.com/floci-io/floci/commit/23015a747568e4bffcc7d595573371d9254bbfe1))
* **secretsmanager:** raise InvalidRequestException, not ResourceNotFoundException, for pending-deletion secrets ([#2514](https://github.com/floci-io/floci/issues/2514)) ([fd78ae4](https://github.com/floci-io/floci/commit/fd78ae4f4b474028f4056a5ab69b445051c74480)), closes [#2513](https://github.com/floci-io/floci/issues/2513)
* **secretsmanager:** stop CreateSecret overwriting a secret inside its recovery window ([#2555](https://github.com/floci-io/floci/issues/2555)) ([1e443ac](https://github.com/floci-io/floci/commit/1e443acd0614d57c6cc409a143bc27e60de2f142)), closes [#2549](https://github.com/floci-io/floci/issues/2549)
* **security:** reject unregistered SigV4 access keys and unbound usernames ([#2680](https://github.com/floci-io/floci/issues/2680)) ([f9d28c9](https://github.com/floci-io/floci/commit/f9d28c9649753e527b53512b72a19256c78176ec)), closes [#2657](https://github.com/floci-io/floci/issues/2657)
* serialize Kinesis stream creation timestamps as plain decimals ([#2173](https://github.com/floci-io/floci/issues/2173)) ([c335086](https://github.com/floci-io/floci/commit/c33508651ea14f54002393eefa887b4f173b0df9)), closes [#2099](https://github.com/floci-io/floci/issues/2099)
* **ses:** enforce full AWS tag validation across all SES resources ([#2504](https://github.com/floci-io/floci/issues/2504)) ([29f6e7a](https://github.com/floci-io/floci/commit/29f6e7ac6b56d45cec36042b4864be8a79ec99e2))
* **ses:** reject non-string tag members with SerializationException ([#2512](https://github.com/floci-io/floci/issues/2512)) ([60dd795](https://github.com/floci-io/floci/commit/60dd7957036ea2345acbff9ac8d8d0951c88f122))
* **ses:** report the sending account in send-event payloads ([#2499](https://github.com/floci-io/floci/issues/2499)) ([bd36b02](https://github.com/floci-io/floci/commit/bd36b02728aa8e4c00cb64cad582f425bde20256))
* **ses:** return DeliveryOptions from v1 DescribeConfigurationSet ([#2841](https://github.com/floci-io/floci/issues/2841)) ([7473c57](https://github.com/floci-io/floci/commit/7473c57720840d76668866f08dd4db757d6a8eb2))
* **signin:** preserve AWS token error modes ([#2554](https://github.com/floci-io/floci/issues/2554)) ([399bf20](https://github.com/floci-io/floci/commit/399bf203872d0c59a7bb904cf0df5acadde229be))
* **ssm:** stop re-reading shared mutable state in the command status rollup ([#2477](https://github.com/floci-io/floci/issues/2477)) ([6f1ce9b](https://github.com/floci-io/floci/commit/6f1ce9b23f68cbdca791d394035603dee7672f17)), closes [#2264](https://github.com/floci-io/floci/issues/2264) [#2264](https://github.com/floci-io/floci/issues/2264)
* **ssm:** validate SettingValue and require an account list on ModifyDocumentPermission ([#2635](https://github.com/floci-io/floci/issues/2635)) ([149ac63](https://github.com/floci-io/floci/commit/149ac635f22ea9b3de343d9e13fb8bb213c4642e))
* **stepfunctions:** bound $range allocation at the AWS memory limit ([#2790](https://github.com/floci-io/floci/issues/2790)) ([f7f16cd](https://github.com/floci-io/floci/commit/f7f16cd2a3e72882fc8fcc2c4e80cf2b9f1c827a)), closes [#2738](https://github.com/floci-io/floci/issues/2738) [#2737](https://github.com/floci-io/floci/issues/2737)
* **stepfunctions:** bound a running execution the four ways AWS does ([#2782](https://github.com/floci-io/floci/issues/2782)) ([9288769](https://github.com/floci-io/floci/commit/92887696074b7e709c4f103cf86bb0b4561c742e)), closes [#2733](https://github.com/floci-io/floci/issues/2733)
* **stepfunctions:** bound JSONata evaluation by time and depth ([#2697](https://github.com/floci-io/floci/issues/2697)) ([3954018](https://github.com/floci-io/floci/commit/395401807b4a6a10586fe963c9ba79be49ba365a)), closes [Frame#setRuntimeBounds](https://github.com/Frame/issues/setRuntimeBounds) [#2667](https://github.com/floci-io/floci/issues/2667)
* **stepfunctions:** end the execution when a state throws an Error ([#2693](https://github.com/floci-io/floci/issues/2693)) ([acf8879](https://github.com/floci-io/floci/commit/acf88794ca4e08a5ce26080e33a4e18d081bf99e)), closes [#2666](https://github.com/floci-io/floci/issues/2666)
* **stepfunctions:** fail the state when a JSONata expression returns nothing ([#2689](https://github.com/floci-io/floci/issues/2689)) ([ea11e67](https://github.com/floci-io/floci/commit/ea11e6771948d2d21520feb2393d9356d95ba8b6)), closes [#2665](https://github.com/floci-io/floci/issues/2665)
* **stepfunctions:** keep a JSONata expression's explicit null in the output ([#2684](https://github.com/floci-io/floci/issues/2684)) ([48e0ecd](https://github.com/floci-io/floci/commit/48e0ecd809026b79f7b296e365268368dd31e48a)), closes [#2664](https://github.com/floci-io/floci/issues/2664) [#2665](https://github.com/floci-io/floci/issues/2665)
* **stepfunctions:** let a mocked response with no attempts start the execution ([#2823](https://github.com/floci-io/floci/issues/2823)) ([63a2a60](https://github.com/floci-io/floci/commit/63a2a60a3001bec613b297c39771b1f8479cb789)), closes [#2523](https://github.com/floci-io/floci/issues/2523)
* **stepfunctions:** refuse the definitions AWS refuses, at both validation entry points ([#2786](https://github.com/floci-io/floci/issues/2786)) ([ead70ea](https://github.com/floci-io/floci/commit/ead70eae4dae927668332964b674a96f01be4418))
* **stepfunctions:** resolve the substitutions in a JSONata error cause ([#2687](https://github.com/floci-io/floci/issues/2687)) ([09d813d](https://github.com/floci-io/floci/commit/09d813d13fc7b1f0bc087c0de57222b61607dc03)), closes [#2668](https://github.com/floci-io/floci/issues/2668)
* **stepfunctions:** write a large whole number in full in $string ([#2683](https://github.com/floci-io/floci/issues/2683)) ([2a7ee7a](https://github.com/floci-io/floci/commit/2a7ee7a605800dca7e81ee9f9c144cf6db62446f)), closes [#2669](https://github.com/floci-io/floci/issues/2669)
* **ui:** reconnect the UI sidecar without restarting Floci ([#2718](https://github.com/floci-io/floci/issues/2718)) ([02f9754](https://github.com/floci-io/floci/commit/02f9754ac774963dfd3ce1945f9be00dcf9805e7)), closes [HI#severity](https://github.com/HI/issues/severity)
* update .gitignore to include .mission/ for shared tooling visibility ([#2750](https://github.com/floci-io/floci/issues/2750)) ([2bc3736](https://github.com/floci-io/floci/commit/2bc37365dc01b09b7eb3bf3540718023b375f710))
### Features
* **acm:** certificate validation records and revocation ([#2655](https://github.com/floci-io/floci/issues/2655)) ([3bd9bcc](https://github.com/floci-io/floci/commit/3bd9bcc62b4f1bd9a1c183863ab60360cdd0104b))
* **apigateway:** API key import/usage-plan fidelity and update-operation fixes ([#2631](https://github.com/floci-io/floci/issues/2631)) ([9b9e7f5](https://github.com/floci-io/floci/commit/9b9e7f56a2896bc00fd97f7a8ebd8c49561874b5))
* **apigatewayv2:** OpenAPI import and Terraform-visible API/stage attributes ([#2714](https://github.com/floci-io/floci/issues/2714)) ([881695e](https://github.com/floci-io/floci/commit/881695ea3b1c35e19ad621099f0e041e6d0bee0b))
* **apigatewayv2:** support custom domain names and API mappings ([#2390](https://github.com/floci-io/floci/issues/2390)) ([74da157](https://github.com/floci-io/floci/commit/74da157681dc98af183d3d3704f3f5c3853071f1))
* **applicationautoscaling:** evaluate target-tracking and step-scaling policies against ECS ([#2692](https://github.com/floci-io/floci/issues/2692)) ([2a7c94b](https://github.com/floci-io/floci/commit/2a7c94b04d1f797335c2bd87fcb9ab3730df21ff)), closes [#2565](https://github.com/floci-io/floci/issues/2565)
* **appsync:** Phase 7 — GraphQL execute authentication ([#2380](https://github.com/floci-io/floci/issues/2380)) ([3f12428](https://github.com/floci-io/floci/commit/3f12428d9737584b875ce380874ca2fd49a216f0))
* **aps:** add Amazon Managed Service for Prometheus workspaces ([#2604](https://github.com/floci-io/floci/issues/2604)) ([277809f](https://github.com/floci-io/floci/commit/277809fb416d00dbda8b295bb5b5ffbe5dd86f1e))
* **autoscaling:** P0 operations and lifecycle-hook delete-by-name ([#2673](https://github.com/floci-io/floci/issues/2673)) ([e9a379b](https://github.com/floci-io/floci/commit/e9a379b37a3627cb8e0a3dc752687562e6b00a73))
* **batch:** add update and delete job queue endpoints with corresponding service logic ([#2807](https://github.com/floci-io/floci/issues/2807)) ([6f123e8](https://github.com/floci-io/floci/commit/6f123e83b8cb2aba087fe8c0a3e8c6cfc7f74c66))
* **cloudformation:** apply security-group rules — inline properties and standalone resources ([#1993](https://github.com/floci-io/floci/issues/1993)) ([1461a10](https://github.com/floci-io/floci/commit/1461a10de7b23e03ce6514ba8567c31964a94ee6)), closes [#1992](https://github.com/floci-io/floci/issues/1992)
* **cloudformation:** CDK Provider-framework custom resources and changeset/SSM param fidelity ([#2688](https://github.com/floci-io/floci/issues/2688)) ([08e532a](https://github.com/floci-io/floci/commit/08e532ab1af8ada89ac3c663a55d3069bbcef662)), closes [#2455](https://github.com/floci-io/floci/issues/2455) [#2455](https://github.com/floci-io/floci/issues/2455) [#2666](https://github.com/floci-io/floci/issues/2666)
* **cloudformation:** CodeBuild/CodePipeline CFN provisioning ([#2685](https://github.com/floci-io/floci/issues/2685)) ([ac94232](https://github.com/floci-io/floci/commit/ac94232910e4ac6aeca5e3652cd510823785bd87))
* **cloudformation:** expand SAM AWS::Serverless::HttpApi to ApiGatew… ([#1956](https://github.com/floci-io/floci/issues/1956)) ([6fa53ab](https://github.com/floci-io/floci/commit/6fa53abd7cd9db183addee8d0bd2a80c38449e20))
* **cloudformation:** provision WAFv2 web ACLs and AWS Config rules ([#2701](https://github.com/floci-io/floci/issues/2701)) ([8a705d0](https://github.com/floci-io/floci/commit/8a705d0aae7a64d831ec57bdaa89802c5e441c76)), closes [CloudFormationTemplateEngine#resolveNode](https://github.com/CloudFormationTemplateEngine/issues/resolveNode)
* **cloudfront:** apply response-headers policies when serving ([#1833](https://github.com/floci-io/floci/issues/1833)) ([520c0f4](https://github.com/floci-io/floci/commit/520c0f4da29313978302852f44a11e94f171e740)), closes [#1820](https://github.com/floci-io/floci/issues/1820) [#1823](https://github.com/floci-io/floci/issues/1823)
* **cloudfront:** forward origin custom headers ([#1832](https://github.com/floci-io/floci/issues/1832)) ([f2ad05c](https://github.com/floci-io/floci/commit/f2ad05ce22e34e413177aa5884400cb83adcc925)), closes [#1820](https://github.com/floci-io/floci/issues/1820) [#1823](https://github.com/floci-io/floci/issues/1823)
* **cloudwatch-logs:** add resource policy actions ([#2574](https://github.com/floci-io/floci/issues/2574)) ([859db2f](https://github.com/floci-io/floci/commit/859db2f35223a1d4082dac30a757a2e0d3a77ee7))
* **cloudwatch:** Adds support for orderBy, pagination, limit in DescribeLogStreams response ([#2362](https://github.com/floci-io/floci/issues/2362)) ([846e78d](https://github.com/floci-io/floci/commit/846e78db12a2dae80489bdad86e65297a94da183))
* **codegurureviewer:** repository association lifecycle with tagging ([#2741](https://github.com/floci-io/floci/issues/2741)) ([0b46d80](https://github.com/floci-io/floci/commit/0b46d804c04b01f0d72303f8bcd7ae7907e9b98a))
* **codepipeline:** validate ListPipelineExecutions filters and PutApprovalResult inputs ([#2696](https://github.com/floci-io/floci/issues/2696)) ([a155e66](https://github.com/floci-io/floci/commit/a155e66b153193fc7d7a40d21311ee54cd7fc9d8))
* **cognito:** user pool domain operations (Create/Describe/DeleteUserPoolDomain) ([#2742](https://github.com/floci-io/floci/issues/2742)) ([ed16713](https://github.com/floci-io/floci/commit/ed167135ff63773a88bd1ac8b6bd8b23514941f7))
* **comprehend:** add Amazon Comprehend sync text-analysis actions ([#2674](https://github.com/floci-io/floci/issues/2674)) ([5c1b69c](https://github.com/floci-io/floci/commit/5c1b69c45f7b1dfa727f483ac31aa0eef695cc72)), closes [#2660](https://github.com/floci-io/floci/issues/2660)
* **config:** compliance evaluation loop, retention, pagination ([#2642](https://github.com/floci-io/floci/issues/2642)) ([1b3417a](https://github.com/floci-io/floci/commit/1b3417a7a3c2e90b2fa8e13a552cdfdb134d8cc0))
* **connect:** instance management (CreateInstance family, attributes, storage configs, tags) ([#2740](https://github.com/floci-io/floci/issues/2740)) ([7b6266e](https://github.com/floci-io/floci/commit/7b6266e902a938ba0cb4bbc0d49657392a2819a9))
* **controltower:** add AWS Control Tower with landing-zone and baseline lifecycle ([#2578](https://github.com/floci-io/floci/issues/2578)) ([4524099](https://github.com/floci-io/floci/commit/45240998ac0fb62a466dadf9278f6f9ef63072e2))
* **core:** add configurable mock responses for stub AI services ([#2765](https://github.com/floci-io/floci/issues/2765)) ([e2e69f6](https://github.com/floci-io/floci/commit/e2e69f65f55be1fc81f891c797008931a788a4f9)), closes [#2764](https://github.com/floci-io/floci/issues/2764)
* **core:** label emulated resource containers with io.floci.* identity ([#2497](https://github.com/floci-io/floci/issues/2497)) ([8247014](https://github.com/floci-io/floci/commit/824701481cfcd7a3c9a4056134898712f0228816)), closes [#1818](https://github.com/floci-io/floci/issues/1818) [#1818](https://github.com/floci-io/floci/issues/1818)
* **docs:** guard the service matrix against undocumented services ([#2465](https://github.com/floci-io/floci/issues/2465)) ([700acc6](https://github.com/floci-io/floci/commit/700acc65c78035da2d4988d07bf74a9b6f490d0a)), closes [#2436](https://github.com/floci-io/floci/issues/2436)
* **ec2:** IPAM with real CIDR allocation, EBS encryption defaults, and transit gateway route export ([#2596](https://github.com/floci-io/floci/issues/2596)) ([9563b7e](https://github.com/floci-io/floci/commit/9563b7ef08e9a8cc45da70190221659cc7ea8781)), closes [#2526](https://github.com/floci-io/floci/issues/2526) [floci-io/floci#2605](https://github.com/floci-io/floci/issues/2605)
* **ec2:** support ModifyVpcEndpoint and persist the endpoint policy ([#2526](https://github.com/floci-io/floci/issues/2526)) ([2e8cbc1](https://github.com/floci-io/floci/commit/2e8cbc13d7293fad19c737a034dc17b839822375)), closes [#2317](https://github.com/floci-io/floci/issues/2317)
* **ec2:** support transit gateway route tables, associations and routes ([#2348](https://github.com/floci-io/floci/issues/2348)) ([bc0f88c](https://github.com/floci-io/floci/commit/bc0f88c9b1df3084cd50e2acbe148f963dfcc803)), closes [#2308](https://github.com/floci-io/floci/issues/2308) [#2329](https://github.com/floci-io/floci/issues/2329)
* **ec2:** support transit gateway VPC attachments ([#2347](https://github.com/floci-io/floci/issues/2347)) ([74e43a4](https://github.com/floci-io/floci/commit/74e43a46320c3b3bff8f328d6a9206a80927b9de)), closes [#2308](https://github.com/floci-io/floci/issues/2308)
* **ecs:** rewrite ECR image URIs on RunTask like Lambda already does ([#2641](https://github.com/floci-io/floci/issues/2641)) ([c405093](https://github.com/floci-io/floci/commit/c4050936a84d29c0874d39519a9d21e17c438a19)), closes [#2568](https://github.com/floci-io/floci/issues/2568)
* **efs:** add Elastic File System (file systems, mount targets, access points) ([#2371](https://github.com/floci-io/floci/issues/2371)) ([943b4c1](https://github.com/floci-io/floci/commit/943b4c1b456c9fb43332ff67f5ed321d778a00f4))
* **elasticache:** support cache parameter groups ([#2392](https://github.com/floci-io/floci/issues/2392)) ([6b62817](https://github.com/floci-io/floci/commit/6b628179f3f39b853cf30369ac2b166bb474cef1))
* **elasticache:** support cache subnet groups ([#2401](https://github.com/floci-io/floci/issues/2401)) ([06d58aa](https://github.com/floci-io/floci/commit/06d58aad36ce35cfe5bac7438bf53003d5a5f63e))
* **elasticache:** support cluster-mode replication groups ([#2633](https://github.com/floci-io/floci/issues/2633)) ([97ff0bc](https://github.com/floci-io/floci/commit/97ff0bc3e9ff0aea77faf188550c0587ee0b451b))
* **emrserverless:** support EMR Serverless applications ([#2403](https://github.com/floci-io/floci/issues/2403)) ([8a673fc](https://github.com/floci-io/floci/commit/8a673fc580f2ef57ec11f4153fe013f584327004))
* **eventbridge:** add Connection API actions ([#1897](https://github.com/floci-io/floci/issues/1897)) ([36a55f5](https://github.com/floci-io/floci/commit/36a55f5060e8eb25e878aa1539d371f9aff03c65))
* **firehose:** add StartDeliveryStreamEncryption and StopDeliveryStreamEncryption ([#2583](https://github.com/floci-io/floci/issues/2583)) ([4affa05](https://github.com/floci-io/floci/commit/4affa05ceab19c02a950801a3c41f3eabcb2ca42))
* **firehose:** deliver records from a Kinesis stream source ([#2528](https://github.com/floci-io/floci/issues/2528)) ([009ac0b](https://github.com/floci-io/floci/commit/009ac0b4a62e2e1fbf799c19800bd02e7c05d36b))
* **firehose:** honor CompressionFormat and FileExtension on S3 delivery ([#2410](https://github.com/floci-io/floci/issues/2410)) ([bba5ffb](https://github.com/floci-io/floci/commit/bba5ffb644c02b3ac5a93502b1c85ab436f8cca8)), closes [#2328](https://github.com/floci-io/floci/issues/2328)
* **fis:** add AWS FIS support ([#2435](https://github.com/floci-io/floci/issues/2435)) ([04d120f](https://github.com/floci-io/floci/commit/04d120fdd5f0927bb14ae83682f4e72a1c7396a7))
* **iam:** enforce SCPs and populate aws:PrincipalArn during policy evaluation ([#2637](https://github.com/floci-io/floci/issues/2637)) ([7188b3e](https://github.com/floci-io/floci/commit/7188b3ec9d1ca52defad1246af525116e9da1c0c)), closes [iam.md#service-control-policies-scps](https://github.com/iam.md/issues/service-control-policies-scps) [iam.md#bypass-rules](https://github.com/iam.md/issues/bypass-rules) [hi#water](https://github.com/hi/issues/water)
* **kinesis:** add PutRecords request caps and a per-stream max record size ([#2438](https://github.com/floci-io/floci/issues/2438)) ([353d9c8](https://github.com/floci-io/floci/commit/353d9c842fa81a0c807466253ce3cb748bd210d6))
* **kinesisanalytics:** emit MSF-style JSON CloudWatch logs from Flink ([#2656](https://github.com/floci-io/floci/issues/2656)) ([aaae992](https://github.com/floci-io/floci/commit/aaae99282f8ee737f587b08da98930a345108f52))
* **lakeformation:** lake formation ([#2427](https://github.com/floci-io/floci/issues/2427)) ([ac6cb06](https://github.com/floci-io/floci/commit/ac6cb06af4f529cfaab7449ceddb6863a652cbb2))
* **lambda:** add the ability to name and label lambda containers, code volumes ([#2409](https://github.com/floci-io/floci/issues/2409)) ([f8b07a7](https://github.com/floci-io/floci/commit/f8b07a78ff2aecbbd5fb71dd8efe71626648b160))
* **lambda:** code-signing endpoints and account settings ([#2646](https://github.com/floci-io/floci/issues/2646)) ([c90c5ad](https://github.com/floci-io/floci/commit/c90c5adfcbc2da8309e02e2d96418a03001ebc01)), closes [#2225](https://github.com/floci-io/floci/issues/2225) [#2206](https://github.com/floci-io/floci/issues/2206) [#1987](https://github.com/floci-io/floci/issues/1987)
* **lambda:** support kubernetes as the lambda runner ([#1941](https://github.com/floci-io/floci/issues/1941)) ([bc13801](https://github.com/floci-io/floci/commit/bc1380112168f3600938695c74cfa3d7e87eff7c))
* **logs:** add AssociateKmsKey and DisassociateKmsKey for log groups ([#2584](https://github.com/floci-io/floci/issues/2584)) ([4435c62](https://github.com/floci-io/floci/commit/4435c6284859ad96d72df327c4d15072499e01e0))
* **msk:** add configuration revision actions ([#2344](https://github.com/floci-io/floci/issues/2344)) ([7505110](https://github.com/floci-io/floci/commit/7505110ed96ba65b663101d08d9bf0764a073e0e)), closes [#2339](https://github.com/floci-io/floci/issues/2339) [#2340](https://github.com/floci-io/floci/issues/2340) [#2299](https://github.com/floci-io/floci/issues/2299) [2336/#2343](https://github.com/floci-io/floci/issues/2343) [#2343](https://github.com/floci-io/floci/issues/2343) [MskService#updateConfiguration](https://github.com/MskService/issues/updateConfiguration) [MskConfiguration#addRevision](https://github.com/MskConfiguration/issues/addRevision)
* **networkfirewall:** emulate AWS Network Firewall ([#2580](https://github.com/floci-io/floci/issues/2580)) ([715bab6](https://github.com/floci-io/floci/commit/715bab68e7d0665012883083cd0837b8327aea1d)), closes [#2579](https://github.com/floci-io/floci/issues/2579)
* **organizations:** add AWS Organizations service ([#2489](https://github.com/floci-io/floci/issues/2489)) ([87e8044](https://github.com/floci-io/floci/commit/87e804492aaa0d87b0bbec94110cfcad84c61f3e))
* **organizations:** add CloudFormation resource types ([#2495](https://github.com/floci-io/floci/issues/2495)) ([054508d](https://github.com/floci-io/floci/commit/054508df87a29fbeb40cd4c6be61f3c5286cda3d))
* **organizations:** add ListAccountsWithInvalidEffectivePolicy ([#2628](https://github.com/floci-io/floci/issues/2628)) ([18521ed](https://github.com/floci-io/floci/commit/18521edf287f8006da3c3dc43e075c03e7e9d7fd))
* **organizations:** add management account email configuration and tests ([#2749](https://github.com/floci-io/floci/issues/2749)) ([89fd37a](https://github.com/floci-io/floci/commit/89fd37a5c43fdbeb173199496823bd8040119369))
* **rds-data:** adding data-api support for lable/name and batch ([#2518](https://github.com/floci-io/floci/issues/2518)) ([a3044e0](https://github.com/floci-io/floci/commit/a3044e065e26e0cdf7b3de2e8ee823923323034e))
* **rds,docdb:** answer DescribeGlobalClusters ([#2402](https://github.com/floci-io/floci/issues/2402)) ([29b0d60](https://github.com/floci-io/floci/commit/29b0d600c6a1398ed44dabdb20620174531fcde5))
* **rds,docdb:** tag DocumentDB clusters and parameter groups ([#2408](https://github.com/floci-io/floci/issues/2408)) ([7b83bd5](https://github.com/floci-io/floci/commit/7b83bd5283f7df7650f94ce591c009061c07c301))
* **rds:** add option group CRUD ([#2352](https://github.com/floci-io/floci/issues/2352)) ([3374bfe](https://github.com/floci-io/floci/commit/3374bfeb0492ac353d001c6fd23465617fe2d42a)), closes [#2304](https://github.com/floci-io/floci/issues/2304)
* **rds:** match proxy TLS cert SAN to the advertised endpoint ([#2603](https://github.com/floci-io/floci/issues/2603)) ([b1d7286](https://github.com/floci-io/floci/commit/b1d7286444e5ad54c51c5d2e83ffe6d9f9a66b60))
* **rds:** model Aurora Serverless v2 scaling configuration on DB clusters ([#1829](https://github.com/floci-io/floci/issues/1829)) ([d778a6e](https://github.com/floci-io/floci/commit/d778a6e393ab455b6ec45e11f1ae001adf837ff0))
* **redshift:** implement Redshift emulation with snapshot and parameter group support ([#2472](https://github.com/floci-io/floci/issues/2472)) ([a1383fd](https://github.com/floci-io/floci/commit/a1383fdd3d1df080cf40fe304905e53eca6b57cb))
* **rekognition:** add Amazon Rekognition sync image-analysis actions ([#2706](https://github.com/floci-io/floci/issues/2706)) ([cf6fede](https://github.com/floci-io/floci/commit/cf6fede45357dd9ae619ea7b062463fe836f61ae)), closes [#2705](https://github.com/floci-io/floci/issues/2705)
* **resourceexplorer2:** add AWS Resource Explorer 2 with cross-service resource discovery ([#2485](https://github.com/floci-io/floci/issues/2485)) ([d3871e1](https://github.com/floci-io/floci/commit/d3871e1f258dd2c85cf5ab97f140a20b51774e1c)), closes [#1583](https://github.com/floci-io/floci/issues/1583) [#1797](https://github.com/floci-io/floci/issues/1797)
* **route53resolver:** add Route 53 Resolver with DNS Firewall domain lists ([#2582](https://github.com/floci-io/floci/issues/2582)) ([d60bd6e](https://github.com/floci-io/floci/commit/d60bd6ead21c5f2e3e51c9ddc2a9435285c356c8)), closes [#2579](https://github.com/floci-io/floci/issues/2579)
* **route53:** VPC association lifecycle actions ([#2638](https://github.com/floci-io/floci/issues/2638)) ([e471946](https://github.com/floci-io/floci/commit/e471946f44318b406c3a470b31c725f9a93ac303))
* **s3:** apply VersioningConfiguration in CloudFormation S3 bucket provisioning ([#2626](https://github.com/floci-io/floci/issues/2626)) ([64c38c7](https://github.com/floci-io/floci/commit/64c38c77b9ee0e7439da069abc8b5d6596518fb7))
* **s3:** opt-in global bucket namespace and replication config ([#2640](https://github.com/floci-io/floci/issues/2640)) ([c96dc98](https://github.com/floci-io/floci/commit/c96dc980653e1fd6df8941622d68ff61e34ffb81)), closes [#2519](https://github.com/floci-io/floci/issues/2519)
* **s3:** support bucket metrics configurations ([#2382](https://github.com/floci-io/floci/issues/2382)) ([8d33c65](https://github.com/floci-io/floci/commit/8d33c6512951b7391ea48a456da8c17743d188af))
* **secretsmanager:** persist and return secret resource policies ([#2587](https://github.com/floci-io/floci/issues/2587)) ([8b23ed8](https://github.com/floci-io/floci/commit/8b23ed8f4aa6733538379847e330b0dd7530857a))
* **servicecatalog:** emulate AWS Service Catalog with Control Tower Account Factory ([#2585](https://github.com/floci-io/floci/issues/2585)) ([2e843e9](https://github.com/floci-io/floci/commit/2e843e9f2353092f015d5ee55937085b524bd705))
* **servicequotas,ram:** add Service Quotas and AWS RAM resource sharing ([#2579](https://github.com/floci-io/floci/issues/2579)) ([f912c3b](https://github.com/floci-io/floci/commit/f912c3b717ac19ed7b0d7d2bd36d6ed0384593f2))
* **ses:** extend tag endpoints to contact lists, custom verification email templates, and dedicated IP pools ([#2589](https://github.com/floci-io/floci/issues/2589)) ([c7cd78e](https://github.com/floci-io/floci/commit/c7cd78e3b366a8f00a657a7045bb4957c0264a5a))
* **ses:** support +label subaddressing on mailbox simulator addresses ([#2464](https://github.com/floci-io/floci/issues/2464)) ([c969ffc](https://github.com/floci-io/floci/commit/c969ffc31d1023272d40f137b026548a03909b8e))
* **ses:** support v2 PutAccountDetails and GetAccount Details ([#2498](https://github.com/floci-io/floci/issues/2498)) ([622ba0a](https://github.com/floci-io/floci/commit/622ba0adbd640a1d5270e3cc2c3973ff0605a697))
* **ses:** support v2 tenant CRUD (CreateTenant/GetTenant/ListTenants/DeleteTenant) ([#2644](https://github.com/floci-io/floci/issues/2644)) ([2963601](https://github.com/floci-io/floci/commit/2963601f698a70b98a441886241da21b9c3496dd))
* **ses:** support v2 tenant resource associations ([#2710](https://github.com/floci-io/floci/issues/2710)) ([67f75c7](https://github.com/floci-io/floci/commit/67f75c7e1d9fc1f6f8801aed71198832cd99c6d4))
* **ses:** support v2 tenant suppression attributes and tenant-scoped suppression list ([#2743](https://github.com/floci-io/floci/issues/2743)) ([fc3c283](https://github.com/floci-io/floci/commit/fc3c28323ac907bb88b79b293b2cb2b59722ce79))
* **ses:** support v2 tenant-scoped sending with association gate ([#2815](https://github.com/floci-io/floci/issues/2815)) ([b0fe831](https://github.com/floci-io/floci/commit/b0fe8311a01a609f73cc0508de512c075d4daaaf))
* **sfn:** support mocked service integrations (SFN_MOCK_CONFIG) ([#2452](https://github.com/floci-io/floci/issues/2452)) ([b6418db](https://github.com/floci-io/floci/commit/b6418dbfeea43b7b2906a3256d581bb88becc274)), closes [#2283](https://github.com/floci-io/floci/issues/2283)
* **sfn:** support Retry policies in Task, Parallel, and Map states ([#2455](https://github.com/floci-io/floci/issues/2455)) ([56e74d6](https://github.com/floci-io/floci/commit/56e74d64c6a5452ec9c23451f42bd472bc57b720)), closes [#2283](https://github.com/floci-io/floci/issues/2283)
* **signin:** add secure branded consent flow ([#2429](https://github.com/floci-io/floci/issues/2429)) ([09d7502](https://github.com/floci-io/floci/commit/09d7502b284b5d61a9334b809a5331c52c7814dd))
* **signin:** support AWS login credentials provider ([#2428](https://github.com/floci-io/floci/issues/2428)) ([470ec77](https://github.com/floci-io/floci/commit/470ec777114081f0888460421dd3934b21731096))
* **sns:** deliver topic broadcasts to application-protocol platform endpoints ([#1856](https://github.com/floci-io/floci/issues/1856)) ([f45d64a](https://github.com/floci-io/floci/commit/f45d64a00e70466ccb0e135ac9cc8568cba0d93c))
* **ssm:** document lifecycle, share permissions, and account-scoped service settings ([#2629](https://github.com/floci-io/floci/issues/2629)) ([7f6b875](https://github.com/floci-io/floci/commit/7f6b87513685731b045b0f53e7326eef14513cc5))
* **ssoadmin:** serve Identity Center ListInstances ([#2581](https://github.com/floci-io/floci/issues/2581)) ([a2bd22d](https://github.com/floci-io/floci/commit/a2bd22d5f887b409a35b9d72d63c35bace40fb09)), closes [#2579](https://github.com/floci-io/floci/issues/2579)
* **stepfunctions:** add the JSONata functions of the Step Functions dialect ([#2676](https://github.com/floci-io/floci/issues/2676)) ([eb5134d](https://github.com/floci-io/floci/commit/eb5134da2d7620c75fe276d747fa8ae3d1f40065))
* **stepfunctions:** describe a distributed Map run after it finishes ([#2694](https://github.com/floci-io/floci/issues/2694)) ([ff61c2b](https://github.com/floci-io/floci/commit/ff61c2b2a5b844f5eea153c20f43232adbac776a)), closes [#2671](https://github.com/floci-io/floci/issues/2671)
* **stepfunctions:** dispatch the seven Task service integrations of [#2663](https://github.com/floci-io/floci/issues/2663) ([#2686](https://github.com/floci-io/floci/issues/2686)) ([14112b8](https://github.com/floci-io/floci/commit/14112b8ace5a0272715d17a60d268e67b94ab925))
* **stepfunctions:** emit task history events and chain previousEventId ([#2703](https://github.com/floci-io/floci/issues/2703)) ([5600d21](https://github.com/floci-io/floci/commit/5600d21f32b00ff464243af96252070f52521f91)), closes [#2520](https://github.com/floci-io/floci/issues/2520)
### Performance Improvements
* **cloudformation:** probe Lambda S3 code with headObject, not getObject ([#2728](https://github.com/floci-io/floci/issues/2728)) ([ff36141](https://github.com/floci-io/floci/commit/ff36141c199bfc8bb387db053056526332fbeb4d)), closes [#2648](https://github.com/floci-io/floci/issues/2648) [#2675](https://github.com/floci-io/floci/issues/2675)
### BREAKING CHANGES
* state machines whose JSONata expressions reference a bare
top-level name are now rejected at creation, as on AWS. Anchor the reference
with $states.input.<name> for input or $<name> for an Assign variable.
* fix(stepfunctions): parse a JSONata payload key named after an ASL field
The deny list of fields AWS does not parse as JSONata was applied to every
key at every depth, so a payload key named Next, Comment, Resource, Retry,
Default, ErrorEquals, Credentials, Branches, ItemProcessor or Iterator hid
its expression. AWS parses a payload whole: `Assign: {"Next": "{% phone %}"}`
and `Arguments: {"Payload": {"Comment": "{% phone %}"}}` are both refused
with `Reference to 'phone' at the top level is not supported.` The deny list
now stops applying once the walk enters Output, Assign, Arguments,
ItemSelector or BatchInput.
The same walk refused `ItemReader.ReaderConfig.CSVHeaders`, which holds
literal column names: `validate-state-machine-definition` returns OK for it
and `create-state-machine` stores the machine, so CSVHeaders joins the list.

Fixes an issue where the CompressionFormat configured for an AWS Kinesis Data Firehose delivery stream was not propagated when the stream was created through CloudFormation.
Problem
When a Firehose delivery stream was provisioned using CloudFormation with S3DestinationConfiguration or ExtendedS3DestinationConfiguration, the CompressionFormat property was not copied to the internal S3Destination model.
For example:
{
"S3DestinationConfiguration": {
"BucketARN": "arn:aws:s3:::my-firehose-bucket",
"RoleARN": "arn:aws:iam::000000000000:role/firehose-role",
"Prefix": "logs/",
"CompressionFormat": "GZIP"
}
}
The CompressionFormat value was therefore lost during CloudFormation provisioning.
Solution
Updated CloudFormationResourceProvisioner to read and propagate CompressionFormat from the CloudFormation destination configuration:
s3.setCompressionFormat(
blankToNull(engine.resolve(s3Node.path("CompressionFormat")))
);
This works for both:
S3DestinationConfiguration
ExtendedS3DestinationConfiguration
Tests
Added a regression case to CloudFormationFirehoseIntegrationTest using:
"CompressionFormat": "GZIP"
Verification
CloudFormationFirehoseIntegrationTest — 1 passed, 0 failures
git diff --check — passed
Maven build — BUILD SUCCESS
Related
This ensures CloudFormation-created Firehose delivery streams correctly preserve the requested S3 compression format.