DynamoDB keeps a reserved word list of several hundred entries that includes name, status, size, timestamp, year, data, count and hash. Using one directly in a ProjectionExpression, FilterExpression, ConditionExpression or UpdateExpression fails with a ValidationException reporting an invalid token and naming the reserved keyword.
The fix is always the same: put a placeholder in the expression and map it through ExpressionAttributeNames, for example #n mapped to name. There is no inline quoting or escaping syntax.
Because the list is long and unmemorable, the safe habit is to route every attribute name through ExpressionAttributeNames unconditionally rather than checking case by case. The DocumentClient in the AWS SDK for JavaScript does not do this for you, and neither do most lightweight wrappers. This is a runtime error, not a schema error, so it only appears when that specific code path executes, which is why it so often reaches production in a rarely used update branch.