Host your own email and enhance your privacy
cognito-user-syncFired by Healthchecks when the cognito-user-sync check has been silent past its 7-day grace beyond the 30-day expected cadence.
The cabal-cognito-counter post-confirmation Lambda has not pinged in 30+ days. This Lambda is the Cognito post-confirmation trigger — it fires once per new sign-up, increments the user counter, and pings Healthchecks. The 30-day cadence is intentionally loose because the Lambda only runs when somebody signs up.
If sign-ups are rare (the common case for a single-operator Cabalmail), this alert is mostly a “are we still wired up correctly?” check, not a fast-feedback signal.
A broken post-confirmation step means new users will exist in Cognito but their post-sign-up provisioning is incomplete. Existing users are unaffected.
aws cognito-idp list-users --user-pool-id <pool-id> --query 'Users[].UserCreateDate' --output text \
| tr '\t' '\n' | sort | tail -5
No recent sign-ups → benign. Pause the check or extend its grace; this isn’t a real issue.
aws logs tail /aws/lambda/cabal-cognito-counter --since 30d | head -50
aws cognito-idp describe-user-pool --user-pool-id <pool-id> \
--query 'UserPool.LambdaConfig.PostConfirmation'
Empty / wrong ARN → Terraform regression; re-apply.
critical because Healthchecks doesn’t have per-check severity overrides; in practice treat it as info — investigate during business hours, no wake-up justified. Phase 4 §3 IaC will fix this with declarative per-check severity once Healthchecks config is code.aws lambda invoke --function-name cabal-cognito-counter \
--cli-binary-format raw-in-base64-out \
--payload '{"userPoolId": "<pool-id>", "userName": "manual-heartbeat", "triggerSource": "PostConfirmation_ConfirmSignUp"}' \
/tmp/out.json
Verify the function tolerates this payload before doing it in prod. The simpler path is just pause the check and accept “no signal until next sign-up”.