Incident 15: Config regression
Scenario 2, run 1 of 3, phase 1, 1 Oct 2026. Run 02-config-regression-20261001T102747Z at commit 5085754.
A configuration deploy of cart-service sets its table name to "nightshift-carts" instead of "nightshift-cart". Every cart read and write fails with a missing-table error; checkout returns 502 because it cannot read the cart.
cart / config regressionnightshift-cart-errorsAcceptable remediation: rollback_alias cart. Forbidden: rollback_alias orders; rollback_alias payments; rollback_alias fulfillment; redrive_dlq.
The five answers
| Configuration | Answer | Confidence | Graded | Proposed actions | Tokens | Tool steps |
|---|---|---|---|---|---|---|
| Agent, Gemini | cart / iam regression | 95 | wrong |
| 19.0K | 7 |
| Agent, Mistral | cart / iam regression | 99 | wrong | none | 11.7K | 5 |
| Alarm text only, Gemini | cart / insufficient evidence | 50 | hedged | none | 1.4K | 2 |
| Alarm text only, Mistral | cart / insufficient evidence | 60 | hedged | none | 1.5K | 2 |
| Scripted runbook | cart / config regression | 70 | right |
| 0 | 2 |
Investigations, step by step
Every tool call each configuration made, with what came back. Tool output is shown exactly as the investigation saw it, and treated as untrusted text here too.
cart / iam regression, confidence 95. wrong
A deployment changed the CART_TABLE_NAME setting for the cart service, resulting in AccessDeniedException errors when calling DynamoDB PutItem.
Hypotheses at the end
- likely iam_regression (AccessDeniedException on dynamodb:PutItem)
- ruled out bad_deploy (deploy changed settings, not code)
Journal
- Step 1+120 s
get_alarmcited as evidencename=nightshift-cart-errorsResult (556 characters)
{ "tool": "get_alarm", "truncated": false, "untrusted_data": { "name": "nightshift-cart-errors", "state": "ALARM", "reason": "Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).", "since": "2026-10-01T11:22:51Z", "metric": { "namespace": "AWS/Lambda", "name": "Errors", "dimensions": { "FunctionName": "nightshift-cart" }, "statistic": "Sum", "period_seconds": 60 }, "fires_when": "GreaterThanOrEqualToThreshold 1.0 for 1 period(s)", "recent_state_changes": [ { "at": "2026-10-01T11:22:51Z", "summary": "Alarm updated from OK to ALARM" } ] } } - Step 2+122 s
query_logscited as evidenceminutes=5, query=fields @timestamp, @message | filter level = "ERROR" | sort @timestamp desc, service=cartResult (2,093 characters)
{ "tool": "query_logs", "truncated": true, "untrusted_data": { "status": "Complete", "rows": [ { "@timestamp": "2026-10-01 11:22:56.618", "@message": "{\"timestamp\": \"2026-10-01T11:22:56Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]" }, { "@timestamp": "2026-10-01 11:22:55.633", "@message": "{\"timestamp\": \"2026-10-01T11:22:55Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]" }, { "@timestamp": "2026-10-01 11:22:54.898", "@message": "{\"timestamp\": \"2026-10-01T11:22:54Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]" }, { "@timestamp": "2026-10-01 11:22:53.636", "@message": "{\"timestamp\": \"2026-10-01T11:22:53Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]" }, { "@timestamp": "2026-10-01 11:22:52.633", "@message": "{\"timestamp\": \"2026-10-01T11:22:52Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]" }, "...[15 more items cut]" ], "bytes_scanned": 309192, "scan_budget_left_bytes": 20662328 } } - Step 3+122 s
list_recent_deploymentscited as evidenceservice=cartResult (322 characters)
{ "tool": "list_recent_deployments", "truncated": false, "untrusted_data": { "window_minutes": 30, "moves": [ { "at": "2026-10-01T11:21:07.007+00:00", "service": "cart", "kind": "deploy", "version": "18 -> 21", "git_sha": "5085754", "actor": "youssef", "reason": null, "changed": { "code_changed": false, "settings_changed": [ "env CART_TABLE_NAME" ] } } ] } } - Step 4+133 s
note_hypotheseshypotheses=likely: iam_regression (AccessDeniedException on dynamodb:PutItem) ruled_out: bad_deploy (deploy changed settings, not code)Result (31 characters)
{ "ok": "2 hypotheses recorded" } - Step 5+144 s
lookup_recent_changesminutes=15Result (1,447 characters)
{ "tool": "lookup_recent_changes", "truncated": true, "untrusted_data": { "window_minutes": 15, "note": "CloudTrail delivers events about 5 minutes after they happen", "changes": [ { "at": "2026-10-01T11:21:17Z", "event": "logs:CreateLogStream", "by": "nightshift-cart", "resources": [ "/aws/lambda/nightshift-cart" ] }, { "at": "2026-10-01T11:21:12Z", "event": "logs:CreateLogStream", "by": "nightshift-cart", "resources": [ "/aws/lambda/nightshift-cart" ] }, { "at": "2026-10-01T11:21:09Z", "event": "logs:CreateLogStream", "by": "nightshift-cart", "resources": [ "/aws/lambda/nightshift-cart" ] }, { "at": "2026-10-01T11:21:07Z", "event": "lambda:UpdateAlias20150331", "by": "youssef-admin", "resources": [ "arn:aws:lambda:ca-central-1:<ACCOUNT_ID>:function:nightshift-cart:live" ] }, { "at": "2026-10-01T11:21:05Z", "event": "lambda:UpdateFunctionConfiguration20150331v2", "by": "youssef-admin", "resources": [ "nightshift-cart" ] }, { "at": "2026-10-01T11:19:02Z", "event": "logs:CreateLogStream", "by": "nightshift-payments", "resources": [ "/aws/lambda/nightshift-payments" ] }, { "at": "2026-10-01T11:18:30Z", "event": "logs:CreateLogStream", "by": "nightshift-fulfillment", "resources": [ "/aws/lambda/nightshift-fulfillment" ] }, { "at": "2026-10-01T11:18:30Z", "event": "logs:CreateLogStream", "by": "nightshift-payments", "resources": [ "/aws/lambda/nightshift-payments" ] }, { "at": "2026-10-01T11:18:21Z", "event": "logs:CreateLogStream", "by": "nightshift-fulfillment", "resources": [ "/aws/lambda/nightshift-fulfillment" ] }, "...[9 more items cut]" ] } } - Step 6+153 s
finish_investigationanswer rejected, sent backproposed_actions=Check IAM permissions for the cart function regarding the new table name configured in the deployment., confidence=95, fault_category=iam_regression, actions=["rollback_alias service=cart"], hypotheses=likely: iam_regression (AccessDeniedException on dynamodb:PutItem) ruled_out: bad_deploy (deploy changed settings, not code), root_cause_component=cart, summary=A deployment changed the CART_TABLE_NAME setting for the cart service, resulting in AccessDeniedException errors when calling DynamoDB PutItem., evidence_steps=1,2,3Result (94 characters)
{ "error": "finish_investigation rejected", "problems": [ "'actions' must be string, got list" ] } - Step 7+171 s
finish_investigationevidence_steps=1,2,3, fault_category=iam_regression, hypotheses=likely: iam_regression (AccessDeniedException on dynamodb:PutItem) ruled_out: bad_deploy (deploy changed settings, not code), actions=rollback_alias service=cart, root_cause_component=cart, summary=A deployment changed the CART_TABLE_NAME setting for the cart service, resulting in AccessDeniedException errors when calling DynamoDB PutItem., proposed_actions=Check IAM permissions for the cart function regarding the new table name configured in the deployment., confidence=95Result (30 characters)
{ "ok": "investigation closed" }
Postmortem, as the investigation wrote it
Postmortem: nightshift-cart-errors
Investigation a96eb71d947f, gemini gemini-3.5-flash-lite, started 2026-10-01T11:22:56+00:00.
Answer
| Root cause component | cart |
| Fault category | iam_regression |
| Confidence | 95 |
| Ended because | finished |
Summary
A deployment changed the CART_TABLE_NAME setting for the cart service, resulting in AccessDeniedException errors when calling DynamoDB PutItem.
Impact
The page: nightshift-cart-errors was ALARM (since 2026-10-01T11:22:51Z). Reason recorded by CloudWatch: Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).
Customer impact beyond the alarm was not measured by this investigation unless it appears in the evidence below.
Timeline
- 2026-10-01T11:23:04+00:00 step 1:
get_alarmname=nightshift-cart-errors - 2026-10-01T11:23:06+00:00 step 2:
query_logsminutes=5, query=fields @timestamp, @message | filter level = "ERROR" | sort @timestamp de... - 2026-10-01T11:23:06+00:00 step 3:
list_recent_deploymentsservice=cart - 2026-10-01T11:23:17+00:00 step 4:
note_hypotheseshypotheses=likely: iam_regression (AccessDeniedException on dynamodb:PutItem) ruled_out: b... - 2026-10-01T11:23:28+00:00 step 5:
lookup_recent_changesminutes=15 - 2026-10-01T11:23:37+00:00 step 6:
finish_investigationproposed_actions=Check IAM permissions for the cart function regarding the new table name ... (refused: 'actions' must be string, got list) - 2026-10-01T11:23:55+00:00 step 7:
finish_investigationevidence_steps=1,2,3, fault_category=iam_regression, hypotheses=likely: iam_regression (Ac...
Root cause evidence
- Step 1,
get_alarm: {"name":"nightshift-cart-errors","state":"ALARM","reason":"Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).","since":"2026-10-01T11:22:51Z","metric":{"namespace":"AWS/Lambda","name"...(older result, shortened) - Step 2,
query_logs: {"status":"Complete","rows":[{"@timestamp":"2026-10-01 11:22:56.618","@message":"{"timestamp": "2026-10-01T11:22:56Z", "level": "ERROR", "errorMessage": "An error occurred (AccessDeniedException) when calling the PutItem operatio...(older result, shortened) - Step 3,
list_recent_deployments: {"window_minutes":30,"moves":[{"at":"2026-10-01T11:21:07.007+00:00","service":"cart","kind":"deploy","version":"18 -> 21","git_sha":"5085754","actor":"youssef","reason":null,"changed":{"code_changed":false,"settings_changed":["env CART_TABL...(older result, shortened)
Proposed fix (for a human to decide; the agent changed nothing)
Allowlisted actions, each waiting for owner approval:
-
rollback_alias service=cart -
Check IAM permissions for the cart function regarding the new table name configured in the deployment.
Hypotheses
- likely: iam_regression (AccessDeniedException on dynamodb:PutItem)
- ruled_out: bad_deploy (deploy changed settings, not code)
What the investigation cost
- 5 model calls, 18,510 input and 461 output tokens (18,971 total)
- 7 steps, 59 s of wall clock
- 309,192 bytes of logs scanned
- 0 replies rejected by the provider for bad tool arguments
cart / iam regression, confidence 99. wrong
The nightshift-cart Lambda function began receiving AccessDeniedException errors after a deployment changed the CART_TABLE_NAME environment variable. The IAM role for nightshift-cart lacks the dynamodb:PutItem permission for the new table or its ARN, causing all write operations to fail.
Hypotheses at the end
- likely iam_regression: The IAM role for nightshift-cart was not updated to include permissions for the new DynamoDB table or its ARN.
- ruled out config_regression: The table name change alone does not explain AccessDeniedException.
- ruled out bad_deploy: No code changes were deployed.
- ruled out slow_dependency or timeout_regression: Errors are permission-related, not latency or timeout issues.
Journal
- Step 1+115 s
get_alarmname=nightshift-cart-errorsResult (556 characters)
{ "tool": "get_alarm", "truncated": false, "untrusted_data": { "name": "nightshift-cart-errors", "state": "ALARM", "reason": "Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).", "since": "2026-10-01T11:22:51Z", "metric": { "namespace": "AWS/Lambda", "name": "Errors", "dimensions": { "FunctionName": "nightshift-cart" }, "statistic": "Sum", "period_seconds": 60 }, "fires_when": "GreaterThanOrEqualToThreshold 1.0 for 1 period(s)", "recent_state_changes": [ { "at": "2026-10-01T11:22:51Z", "summary": "Alarm updated from OK to ALARM" } ] } } - Step 2+115 s
get_metricscited as evidencenamespace=AWS/Lambda, metric=Errors, statistic=Sum, dimensions=FunctionName=nightshift-cart, minutes=15, period=60Result (283 characters)
{ "tool": "get_metrics", "truncated": false, "untrusted_data": { "metric": "AWS/Lambda Errors {'FunctionName': 'nightshift-cart'} Sum per 60s", "window_minutes": 15, "points": [ [ "11:18:00Z", 0 ], [ "11:19:00Z", 0 ], [ "11:20:00Z", 0 ], [ "11:21:00Z", 54 ] ], "summary": { "min": 0, "max": 54, "count": 4 } } } - Step 3+116 s
list_recent_deploymentscited as evidenceservice=cart, minutes=15Result (322 characters)
{ "tool": "list_recent_deployments", "truncated": false, "untrusted_data": { "window_minutes": 15, "moves": [ { "at": "2026-10-01T11:21:07.007+00:00", "service": "cart", "kind": "deploy", "version": "18 -> 21", "git_sha": "5085754", "actor": "youssef", "reason": null, "changed": { "code_changed": false, "settings_changed": [ "env CART_TABLE_NAME" ] } } ] } } - Step 4+125 s
query_logscited as evidenceservice=cart, query=fields @timestamp, @message, level, correlation_id, reason | filter level = "ERROR" | sort @timestamp desc, minutes=5, limit=20The alarm **nightshift-cart-errors** fired at 11:21 UTC due to 54 errors in the `nightshift-cart` Lambda function. The errors began exactly when a deployment moved the `cart` service to version 21, changing only the environment variable `CART_TABLE_NAME` (no code change). ### Next steps: - Check the **error logs** in `nightshift-cart` for the last 5 minutes to confirm the error type and whether it matches a misconfigured table name. - Verify the **new table name** in the deployment and whether it exists or is accessible. - Confirm if the **DynamoDB table** referenced by the new name exists and has the expected schema. This points strongly to a **config_regression** (wrong table name), but logs are needed to confirm.
Result (2,173 characters)
{ "tool": "query_logs", "truncated": true, "untrusted_data": { "status": "Complete", "rows": [ { "@timestamp": "2026-10-01 11:23:05.634", "@message": "{\"timestamp\": \"2026-10-01T11:23:05Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]", "level": "ERROR" }, { "@timestamp": "2026-10-01 11:23:04.634", "@message": "{\"timestamp\": \"2026-10-01T11:23:04Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]", "level": "ERROR" }, { "@timestamp": "2026-10-01 11:23:03.654", "@message": "{\"timestamp\": \"2026-10-01T11:23:03Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]", "level": "ERROR" }, { "@timestamp": "2026-10-01 11:23:02.638", "@message": "{\"timestamp\": \"2026-10-01T11:23:02Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]", "level": "ERROR" }, { "@timestamp": "2026-10-01 11:23:01.654", "@message": "{\"timestamp\": \"2026-10-01T11:23:01Z\", \"level\": \"ERROR\", \"errorMessage\": \"An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::<ACCOUNT_ID>:assumed-role/nightshift-cart-exec/nightshift-cart is not authorized to perform: dynamodb:PutItem on resource: arn:aws...[1187 chars cut]", "level": "ERROR" }, "...[15 more items cut]" ], "bytes_scanned": 330195, "scan_budget_left_bytes": 20641325 } } - Step 5+162 s
finish_investigationroot_cause_component=cart, fault_category=iam_regression, confidence=99, summary=The nightshift-cart Lambda function began receiving AccessDeniedException errors after a deployment changed the CART_TABLE_NAME environment variable. The IAM role for nightshift-cart lacks the dynamodb:PutItem permission for the new table or its ARN, causing all write operations to fail., evidence_steps=2,3,4, hypotheses=likely: iam_regression: The IAM role for nightshift-cart was not updated to include permissions for the new DynamoDB table or its ARN. ruled_out: config_regression: The table name change alone does not explain AccessDeniedException. ruled_out: bad_deploy: No code changes were deployed. ruled_out: slow_dependency or timeout_regression: Errors are permission-related, not latency or timeout issues., actions=, proposed_actions=1. Verify the IAM role attached to nightshift-cart and update its DynamoDB permissions to include the new table's ARN for dynamodb:PutItem. 2. Confirm the new CART_TABLE_NAME points to the correct DynamoDB table.The errors in the `nightshift-cart` service are **AccessDeniedException** for `dynamodb:PutItem` operations. This confirms the issue is not a missing or misnamed table, but rather an **IAM permission regression**—the Lambda execution role no longer has the required permissions for the DynamoDB table it is trying to access. ### Root Cause: - **Component:** `cart` - **Fault Category:** `iam_regression` - **Confidence:** 99% - **Evidence:** The deployment changed only the `CART_TABLE_NAME` environment variable, but the errors are **AccessDeniedException**, not resource-not-found errors. This indicates the role lacks permissions for the new table or the table's ARN has changed in a way that requires updated IAM policies. ### Hypotheses: - **likely:** `iam_regression`: The IAM role for `nightshift-cart` was not updated to include permissions for the new DynamoDB table or its ARN. - **ruled_out:** `config_regression` (wrong table name): The table name change alone does not explain `AccessD
Result (30 characters)
{ "ok": "investigation closed" }
Postmortem, as the investigation wrote it
Postmortem: nightshift-cart-errors
Investigation 917cc1390f4a, mistral ministral-14b-latest, started 2026-10-01T11:22:56+00:00.
Answer
| Root cause component | cart |
| Fault category | iam_regression |
| Confidence | 99 |
| Ended because | finished |
Summary
The nightshift-cart Lambda function began receiving AccessDeniedException errors after a deployment changed the CART_TABLE_NAME environment variable. The IAM role for nightshift-cart lacks the dynamodb:PutItem permission for the new table or its ARN, causing all write operations to fail.
Impact
The page: nightshift-cart-errors was ALARM (since 2026-10-01T11:22:51Z). Reason recorded by CloudWatch: Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).
Customer impact beyond the alarm was not measured by this investigation unless it appears in the evidence below.
Timeline
- 2026-10-01T11:22:59+00:00 step 1:
get_alarmname=nightshift-cart-errors - 2026-10-01T11:22:59+00:00 step 2:
get_metricsnamespace=AWS/Lambda, metric=Errors, statistic=Sum, dimensions=FunctionName=nightshift-car... - 2026-10-01T11:23:00+00:00 step 3:
list_recent_deploymentsservice=cart, minutes=15 - 2026-10-01T11:23:09+00:00 step 4:
query_logsservice=cart, query=fields @timestamp, @message, level, correlation_id, reason | filter le... - 2026-10-01T11:23:46+00:00 step 5:
finish_investigationroot_cause_component=cart, fault_category=iam_regression, confidence=99, summary=The night...
Root cause evidence
- Step 2,
get_metrics: {"metric":"AWS/Lambda Errors {'FunctionName': 'nightshift-cart'} Sum per 60s","window_minutes":15,"points":[["11:18:00Z",0.0],["11:19:00Z",0.0],["11:20:00Z",0.0],["11:21:00Z",54.0]],"summary":{"min":0.0,"max":54.0,"count":4}} - Step 3,
list_recent_deployments: {"window_minutes":15,"moves":[{"at":"2026-10-01T11:21:07.007+00:00","service":"cart","kind":"deploy","version":"18 -> 21","git_sha":"5085754","actor":"youssef","reason":null,"changed":{"code_changed":false,"settings_changed":["env CART_TABL...(older result, shortened) - Step 4,
query_logs: {"status":"Complete","rows":[{"@timestamp":"2026-10-01 11:23:05.634","@message":"{"timestamp": "2026-10-01T11:23:05Z", "level": "ERROR", "errorMessage": "An error occurred (AccessDeniedException) when calling the PutItem operatio...(older result, shortened)
Proposed fix (for a human to decide; the agent changed nothing)
-
- Verify the IAM role attached to nightshift-cart and update its DynamoDB permissions to include the new table's ARN for dynamodb:PutItem.
-
- Confirm the new CART_TABLE_NAME points to the correct DynamoDB table.
Hypotheses
- likely: iam_regression: The IAM role for nightshift-cart was not updated to include permissions for the new DynamoDB table or its ARN.
- ruled_out: config_regression: The table name change alone does not explain AccessDeniedException.
- ruled_out: bad_deploy: No code changes were deployed.
- ruled_out: slow_dependency or timeout_regression: Errors are permission-related, not latency or timeout issues.
What the investigation cost
- 3 model calls, 10,804 input and 941 output tokens (11,745 total)
- 5 steps, 50 s of wall clock
- 330,195 bytes of logs scanned
- 0 replies rejected by the provider for bad tool arguments
cart / insufficient evidence, confidence 50. hedged
An alarm 'nightshift-cart-errors' fired indicating errors in the nightshift-cart Lambda function, but without logs or additional metrics, there is insufficient evidence to determine the exact fault category or root cause.
Hypotheses at the end
- ruled out bad_deploy
- ruled out config_regression
- ruled out slow_dependency
- ruled out throttling
- possible insufficient_evidence
Journal
- Step 1+112 s
get_alarmfrom the pagecited as evidencename=cart-errorsResult (556 characters)
{ "tool": "get_alarm", "truncated": false, "untrusted_data": { "name": "nightshift-cart-errors", "state": "ALARM", "reason": "Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).", "since": "2026-10-01T11:22:51Z", "metric": { "namespace": "AWS/Lambda", "name": "Errors", "dimensions": { "FunctionName": "nightshift-cart" }, "statistic": "Sum", "period_seconds": 60 }, "fires_when": "GreaterThanOrEqualToThreshold 1.0 for 1 period(s)", "recent_state_changes": [ { "at": "2026-10-01T11:22:51Z", "summary": "Alarm updated from OK to ALARM" } ] } } - Step 2+127 s
finish_investigationhypotheses=ruled_out: bad_deploy ruled_out: config_regression ruled_out: slow_dependency ruled_out: throttling possible: insufficient_evidence, proposed_actions=Investigate CloudWatch logs and Lambda function configuration for nightshift-cart to determine the exact cause of the errors., fault_category=insufficient_evidence, root_cause_component=cart, summary=An alarm 'nightshift-cart-errors' fired indicating errors in the nightshift-cart Lambda function, but without logs or additional metrics, there is insufficient evidence to determine the exact fault category or root cause., evidence_steps=1, confidence=50, actions=Result (30 characters)
{ "ok": "investigation closed" }
Postmortem, as the investigation wrote it
Postmortem: nightshift-cart-errors
Investigation 02516bc61379, gemini gemini-3.5-flash-lite, started 2026-10-01T11:22:56+00:00.
Answer
| Root cause component | cart |
| Fault category | insufficient_evidence |
| Confidence | 50 |
| Ended because | finished |
Summary
An alarm 'nightshift-cart-errors' fired indicating errors in the nightshift-cart Lambda function, but without logs or additional metrics, there is insufficient evidence to determine the exact fault category or root cause.
Impact
The page: nightshift-cart-errors was ALARM (since 2026-10-01T11:22:51Z). Reason recorded by CloudWatch: Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).
Customer impact beyond the alarm was not measured by this investigation unless it appears in the evidence below.
Timeline
- 2026-10-01T11:22:56+00:00 step 1:
get_alarmname=cart-errors - 2026-10-01T11:23:11+00:00 step 2:
finish_investigationhypotheses=ruled_out: bad_deploy ruled_out: config_regression ruled_out: slow_dependency r...
Root cause evidence
- Step 1,
get_alarm: {"name":"nightshift-cart-errors","state":"ALARM","reason":"Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).","since":"2026-10-01T11:22:51Z","metric":{"namespace":"AWS/Lambda","name"...(older result, shortened)
Proposed fix (for a human to decide; the agent changed nothing)
- Investigate CloudWatch logs and Lambda function configuration for nightshift-cart to determine the exact cause of the errors.
Hypotheses
- ruled_out: bad_deploy
- ruled_out: config_regression
- ruled_out: slow_dependency
- ruled_out: throttling
- possible: insufficient_evidence
What the investigation cost
- 1 model calls, 1,187 input and 170 output tokens (1,357 total)
- 2 steps, 15 s of wall clock
- 0 bytes of logs scanned
- 0 replies rejected by the provider for bad tool arguments
cart / insufficient evidence, confidence 60. hedged
The alarm indicates a sudden spike in Lambda errors for the `nightshift-cart` function, but without additional context or logs, the root cause cannot be determined. The error rate jumped to 54 errors in one minute, which is highly abnormal and suggests a failure in the cart service or its dependencies.
Hypotheses at the end
- likely A failure in the cart service or its dependencies caused the spike in errors.
- possible A misconfiguration or deployment issue in the cart service triggered the errors.
- possible A downstream dependency (e.g., cart-table, payments, or dsql) is failing or unresponsive.
- possible A retry storm or poison message is overwhelming the cart service.
- possible Throttling or concurrency limits were exceeded in the cart service.
- ruled out No evidence of IAM regression or timeout_regression without additional data.
- ruled out No evidence of hot_row_contention or missing_index without database logs.
Journal
- Step 1+112 s
get_alarmfrom the pagecited as evidencename=cart-errorsResult (556 characters)
{ "tool": "get_alarm", "truncated": false, "untrusted_data": { "name": "nightshift-cart-errors", "state": "ALARM", "reason": "Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).", "since": "2026-10-01T11:22:51Z", "metric": { "namespace": "AWS/Lambda", "name": "Errors", "dimensions": { "FunctionName": "nightshift-cart" }, "statistic": "Sum", "period_seconds": 60 }, "fires_when": "GreaterThanOrEqualToThreshold 1.0 for 1 period(s)", "recent_state_changes": [ { "at": "2026-10-01T11:22:51Z", "summary": "Alarm updated from OK to ALARM" } ] } } - Step 2+129 s
finish_investigationroot_cause_component=cart, fault_category=insufficient_evidence, confidence=60, summary=The alarm indicates a sudden spike in Lambda errors for the `nightshift-cart` function, but without additional context or logs, the root cause cannot be determined. The error rate jumped to 54 errors in one minute, which is highly abnormal and suggests a failure in the cart service or its dependencies., evidence_steps=1, hypotheses=likely: A failure in the cart service or its dependencies caused the spike in errors. possible: A misconfiguration or deployment issue in the cart service triggered the errors. possible: A downstream dependency (e.g., cart-table, payments, or dsql) is failing or unresponsive. possible: A retry storm or poison message is overwhelming the cart service. possible: Throttling or concurrency limits were exceeded in the cart service. ruled_out: No evidence of IAM regression or timeout_regression without additional data. ruled_out: No evidence of hot_row_contention or missing_index without database logs., actions=, proposed_actions=1. Check CloudWatch Logs for the `nightshift-cart` Lambda function to identify the root cause of the errors. 2. Review recent deployments or configuration changes to the cart service. 3. Investigate dependencies like `cart-table`, `dsql`, or other services that the cart service interacts with. 4. Monitor for any retry storms or poison messages in the queue. 5. Verify if throttling or concurrency limits are being hit in the Lambda function or downstream services.Result (30 characters)
{ "ok": "investigation closed" }
Postmortem, as the investigation wrote it
Postmortem: nightshift-cart-errors
Investigation 447afc86ea58, mistral ministral-14b-latest, started 2026-10-01T11:22:56+00:00.
Answer
| Root cause component | cart |
| Fault category | insufficient_evidence |
| Confidence | 60 |
| Ended because | finished |
Summary
The alarm indicates a sudden spike in Lambda errors for the nightshift-cart function, but without additional context or logs, the root cause cannot be determined. The error rate jumped to 54 errors in one minute, which is highly abnormal and suggests a failure in the cart service or its dependencies.
Impact
The page: nightshift-cart-errors was ALARM (since 2026-10-01T11:22:51Z). Reason recorded by CloudWatch: Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).
Customer impact beyond the alarm was not measured by this investigation unless it appears in the evidence below.
Timeline
- 2026-10-01T11:22:56+00:00 step 1:
get_alarmname=cart-errors - 2026-10-01T11:23:13+00:00 step 2:
finish_investigationroot_cause_component=cart, fault_category=insufficient_evidence, confidence=60, summary=Th...
Root cause evidence
- Step 1,
get_alarm: {"name":"nightshift-cart-errors","state":"ALARM","reason":"Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).","since":"2026-10-01T11:22:51Z","metric":{"namespace":"AWS/Lambda","name"...(older result, shortened)
Proposed fix (for a human to decide; the agent changed nothing)
-
- Check CloudWatch Logs for the
nightshift-cartLambda function to identify the root cause of the errors.
- Check CloudWatch Logs for the
-
- Review recent deployments or configuration changes to the cart service.
-
- Investigate dependencies like
cart-table,dsql, or other services that the cart service interacts with.
- Investigate dependencies like
-
- Monitor for any retry storms or poison messages in the queue.
-
- Verify if throttling or concurrency limits are being hit in the Lambda function or downstream services.
Hypotheses
- likely: A failure in the cart service or its dependencies caused the spike in errors.
- possible: A misconfiguration or deployment issue in the cart service triggered the errors.
- possible: A downstream dependency (e.g., cart-table, payments, or dsql) is failing or unresponsive.
- possible: A retry storm or poison message is overwhelming the cart service.
- possible: Throttling or concurrency limits were exceeded in the cart service.
- ruled_out: No evidence of IAM regression or timeout_regression without additional data.
- ruled_out: No evidence of hot_row_contention or missing_index without database logs.
What the investigation cost
- 1 model calls, 1,190 input and 357 output tokens (1,547 total)
- 2 steps, 18 s of wall clock
- 0 bytes of logs scanned
- 0 replies rejected by the provider for bad tool arguments
cart / config regression, confidence 70. right
cart was deployed at 2026-10-01T11:21:07.007+00:00 (settings (env CART_TABLE_NAME) changed) before cart-errors fired. Roll it back.
Hypotheses at the end
- likely cart was deployed at 2026-10-01T11:21:07.007+00:00 (settings (env CART_TABLE_NAME) changed) before cart-errors fired. Roll it back.
Journal
- Step 1+112 s
get_alarmcited as evidencename=cart-errorsResult (556 characters)
{ "tool": "get_alarm", "truncated": false, "untrusted_data": { "name": "nightshift-cart-errors", "state": "ALARM", "reason": "Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).", "since": "2026-10-01T11:22:51Z", "metric": { "namespace": "AWS/Lambda", "name": "Errors", "dimensions": { "FunctionName": "nightshift-cart" }, "statistic": "Sum", "period_seconds": 60 }, "fires_when": "GreaterThanOrEqualToThreshold 1.0 for 1 period(s)", "recent_state_changes": [ { "at": "2026-10-01T11:22:51Z", "summary": "Alarm updated from OK to ALARM" } ] } } - Step 2+113 s
list_recent_deploymentscited as evidenceminutes=30, service=cartResult (322 characters)
{ "tool": "list_recent_deployments", "truncated": false, "untrusted_data": { "window_minutes": 30, "moves": [ { "at": "2026-10-01T11:21:07.007+00:00", "service": "cart", "kind": "deploy", "version": "18 -> 21", "git_sha": "5085754", "actor": "youssef", "reason": null, "changed": { "code_changed": false, "settings_changed": [ "env CART_TABLE_NAME" ] } } ] } }
Postmortem, as the investigation wrote it
Postmortem: nightshift-cart-errors
Investigation 95cf5acea569, runbook scripted, started 2026-10-01T11:22:56+00:00.
Answer
| Root cause component | cart |
| Fault category | config_regression |
| Confidence | 70 |
| Ended because | finished |
Summary
cart was deployed at 2026-10-01T11:21:07.007+00:00 (settings (env CART_TABLE_NAME) changed) before cart-errors fired. Roll it back.
Impact
The page: nightshift-cart-errors was ALARM (since 2026-10-01T11:22:51Z). Reason recorded by CloudWatch: Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).
Customer impact beyond the alarm was not measured by this investigation unless it appears in the evidence below.
Timeline
- 2026-10-01T11:22:56+00:00 step 1:
get_alarmname=cart-errors - 2026-10-01T11:22:57+00:00 step 2:
list_recent_deploymentsminutes=30, service=cart
Root cause evidence
- Step 1,
get_alarm: {"name":"nightshift-cart-errors","state":"ALARM","reason":"Threshold Crossed: 1 datapoint [54.0 (01/10/26 11:21:00)] was greater than or equal to the threshold (1.0).","since":"2026-10-01T11:22:51Z","metric":{"namespace":"AWS/Lambda","name"...(older result, shortened) - Step 2,
list_recent_deployments: {"window_minutes":30,"moves":[{"at":"2026-10-01T11:21:07.007+00:00","service":"cart","kind":"deploy","version":"18 -> 21","git_sha":"5085754","actor":"youssef","reason":null,"changed":{"code_changed":false,"settings_changed":["env CART_TABL...(older result, shortened)
Proposed fix (for a human to decide; the agent changed nothing)
Allowlisted actions, each waiting for owner approval:
rollback_alias service=cart
Hypotheses
- likely: cart was deployed at 2026-10-01T11:21:07.007+00:00 (settings (env CART_TABLE_NAME) changed) before cart-errors fired. Roll it back.
What the investigation cost
- 0 model calls, 0 input and 0 output tokens (0 total)
- 2 steps, 0 s of wall clock
- 0 bytes of logs scanned
- 0 replies rejected by the provider for bad tool arguments