➜ api (main) gh pr merge 482 --squash
✓ Merged #482: payouts in practice-local time2 approvals
➜ api (main) pytest -q
✓ 214 passed, 0 failed8.3s
➜ api (main) cdk deploy ApiStack --require-approval never
ApiStack: creating changeset…
✓ ApiStack deployed, 3 lambdas updated41s
✓ Health check 200, p95 112 msprod
➜
➜ api (main) k6 run load/checkout.js --vus 300 --duration 5m
checks 100% ✓ 41 820 ✗ 05m
http_req_duration p95 180 ms p99 310 msok
➜ api (main) aws ecs describe-services --cluster prod
✓ desiredCount 3 → 9, all tasks healthy6s
✓ Autoscaling policy held p95 under 200 msprod
➜ api (main) git tag v2.14.0 && git push --tags
✓ Release notes posted to #releasesdone
➜
ALARM api-5xx-rate > 2% for 2 min03:14
➜ api (main) aws logs tail /prod/api --since 5m | grep ERROR
! KeyError: 'practice_tz' in payouts/cutoff.py:48root cause
➜ api (hotfix/tz-fallback) pytest tests/payouts -q
✓ 38 passed, 1 regression test added2.1s
➜ api (main) cdk deploy ApiStack
✓ Error rate back to 0.1%, alarm cleared11 min
➜
➜ infra (main) aws ce get-cost-and-usage --granularity MONTHLY
RDS db.r6g.xlarge $412 avg CPU 9%oversized
NAT gateway $138 38% of egress is S3fixable
➜ infra (main) cdk diff InfraStack
~ RDS instance class r6g.xlarge → r6g.largechange
+ S3 gateway endpoint for private subnetsadd
➜ infra (main) cdk deploy InfraStack
✓ Projected saving $290/month, no downtimeapproved
➜