Summary
Scan's Limit=0 validation message uses 'Limit' (capital L) for the field name. Real DynamoDB uses 'limit' (lowercase l). Single-character difference, surfaced by tier-3 exact-string assertions in the conformance suite at branch feat/error-messages-scan-coverage.
Version: dynoxide 0.9.9
Test: tests/tier3/error-messages/scan.test.ts "Limit of 0: full minimum-value error"
Expected (note lowercase 'limit'):
1 validation error detected: Value '0' at 'limit' failed to satisfy constraint: Member must have value greater than or equal to 1
Actual (capital 'Limit'):
1 validation error detected: Value '0' at 'Limit' failed to satisfy constraint: Member must have value greater than or equal to 1
Query's Limit=0 message (#11) capitalises the same field as 'Limit' and omits the value entirely. So Scan and Query genuinely diverge in real DynamoDB and need different strings in dynoxide.
Reproduction
npx dynoxide --port 8001 &
node -e '
import("@aws-sdk/client-dynamodb").then(async ({ DynamoDBClient, CreateTableCommand, ScanCommand }) => {
const c = new DynamoDBClient({ endpoint: "http://localhost:8001", region: "us-east-1", credentials: { accessKeyId: "f", secretAccessKey: "f" } });
const t = "t" + Date.now();
await c.send(new CreateTableCommand({ TableName: t, AttributeDefinitions: [{ AttributeName: "pk", AttributeType: "S" }], KeySchema: [{ AttributeName: "pk", KeyType: "HASH" }], BillingMode: "PAY_PER_REQUEST" }));
try { await c.send(new ScanCommand({ TableName: t, Limit: 0 })); }
catch (e) { console.log(e.message); }
});
'
Summary
Scan's
Limit=0validation message uses'Limit'(capital L) for the field name. Real DynamoDB uses'limit'(lowercase l). Single-character difference, surfaced by tier-3 exact-string assertions in the conformance suite at branchfeat/error-messages-scan-coverage.Version: dynoxide 0.9.9
Test:
tests/tier3/error-messages/scan.test.ts"Limit of 0: full minimum-value error"Expected (note lowercase
'limit'):Actual (capital
'Limit'):Query's
Limit=0message (#11) capitalises the same field as'Limit'and omits the value entirely. So Scan and Query genuinely diverge in real DynamoDB and need different strings in dynoxide.Reproduction