Goal: validate the deployed v1.0 stack against real audio for 2 hours, with deliberately injected failures, before declaring the system event-ready.
Run this: AFTER Phase 1 + Phase 2 are deployed, BEFORE the deploy-frozen final week (2026-06-29 → 2026-07-01).
Total wall-clock: ~2.5 hours including setup and post-mortem.
aws cloudformation describe-stacks --region ap-northeast-1 --stack-name HibikiTranslate-Split --query 'Stacks[0].LastUpdatedTime'aws cloudformation describe-stacks --region ap-northeast-1 --stack-name HibikiStage-Tokyo --query 'Stacks[0].LastUpdatedTime'OpsAlarmsTopicArn (CFN output of HibikiTranslate-Split): aws sns subscribe --region ap-northeast-1 --topic-arn <ARN> --protocol email --notification-endpoint <YOUR_EMAIL> then confirm via the email linkHibikiTranslate-Split_______________localStorage.setItem('hibiki_translate_token', 'expired-fake-token-string')refreshToken() runs, retry succeeds, no Cognito form[auth] warnings)pass / fail / details: _______________aws ecs stop-task --cluster HibikiStage-Tokyo-... --task <TASK_ARN> --reason "soak test"pass / fail / details: _______________pass / fail / details: _______________This is the trickiest one because we can't actually break Bedrock. Two options:
chain.primary.timeout_s = 0.05 in the settings UI. This guarantees Sonnet always times out; chain hedges to Nova. Watch chain-metrics: errors/timeouts on Sonnet should climb. Restore the setting after.pass / fail / details: _______________This is the critical validation for Phase 1.
bash
cd /home/robinwllms/git/kizuna-translate/cdk
CDK_DOCKER=docker CDK_DEFAULT_ACCOUNT=108782074531 cdk deploy HibikiTranslate-Split --require-approval never \
-c deployMode=split -c instanceType=g6e.xlarge -c region=ap-northeast-1 \
-c account=108782074531 -c vpcId=vpc-0274625e1a6eda10b \
-c cognitoUserPoolId=ap-northeast-1_DF0shsAHl -c cognitoClientId=a524o4kd9u2v2ujglulnhgo7d \
-c hostedZoneId=Z05584763IOXJBZJEIZL1 -c hostedZoneName=liveprod.cloud \
-c acmCertArn=arn:aws:acm:us-east-1:108782074531:certificate/3d3915d3-cb49-4203-a5f7-926aff42ccaa \
-c cloudMapNamespaceId=ns-6yfyu72qov56dats -c cloudMapNamespaceName=hibiki.localpass / fail / details: _______________OperatorSilentAlarm fires; SNS email arrivespass / fail / details: _______________Pull these metrics for the soak window:
bash
for service in <Grpc> <Web> <Wlk>; do
aws cloudwatch get-metric-statistics --region ap-northeast-1 \
--namespace AWS/ECS --metric-name MemoryUtilization \
--dimensions Name=ClusterName,Value=HibikiTranslate-Split-... \
Name=ServiceName,Value=$service \
--start-time <T+0> --end-time <T+2> --period 300 --statistics Average,Maximum
done___ end ___ max ___ (should be flat or near-flat)___ end ___ max ___[ ] WLK memory: start ___ end ___ max ___ (will be high; should not grow)
[ ] GPU utilization (if available in CloudWatch container insights for the WLK task)
[ ] Total alarms fired during the window:
bash
aws cloudwatch describe-alarm-history --region ap-northeast-1 \
--history-item-type StateUpdate \
--start-date <T+0 ISO8601> --end-date <T+2 ISO8601>
Expected: 1 silent-output alarm (from T+1:30 injection). Anything else needs explanation.
[ ] Re-anchor / drift count over the window:
bash
aws logs filter-log-events --region ap-northeast-1 \
--log-group-name HibikiTranslate-Split-SharedLogsBEDC897C-Ax81o4KVjOcP \
--start-time <T+0 ms> --end-time <T+2 ms> \
--filter-pattern '?"re-anchored after shrink" ?"drift detected"' \
--query 'events | length(@)'
Note the count: ___
[ ] Bedrock chain failure count (markers):
bash
aws logs filter-log-events --region ap-northeast-1 \
--log-group-name HibikiTranslate-Split-SharedLogsBEDC897C-Ax81o4KVjOcP \
--start-time <T+0 ms> --end-time <T+2 ms> \
--filter-pattern '"all hedges failed"' \
--query 'events | length(@)'
Note the count: ___ (expect 0 outside the T+0:45 simulation window)
[ ] Row distribution (sanity-check min_chars floor):
bash
aws logs filter-log-events --region ap-northeast-1 \
--log-group-name HibikiTranslate-Split-SharedLogsBEDC897C-Ax81o4KVjOcP \
--start-time <T+0 ms> --end-time <T+2 ms> \
--filter-pattern '"POST-STITCH" "Fire"' \
--query 'events[*].message' --output text \
| grep -oE '\([0-9]+ chars' | awk '{print $1}' | tr -d '(' | sort -n | uniq -c
min_chars (modulo timeout-fires which the post-stitcher's Timeout fire log line marks)The soak passes if ALL of these are true:
If ANY of these fails, file it as a regression to fix before the event. Do not ship to production with known soak failures.
Within 24 hours of the soak:
runbook.md if any new failure mode was discoveredcdk/stacks/split_stack.py if the soak data suggests they're too sensitive or too loosegit tag v1.0-soak-passed-YYYY-MM-DD