19 lines
1.1 KiB
JSON
19 lines
1.1 KiB
JSON
{
|
|
"feature_id": "F-028",
|
|
"agent": "qa",
|
|
"verdict": "APPROVED",
|
|
"summary": "QA approved. F-028 acceptance criteria covered by tests and green checks.",
|
|
"evidence": [
|
|
"rate-limiter.test.ts covers reject above limit, retry-after, and window reset",
|
|
"cd project && npm run lint/typecheck/build/test passed",
|
|
"DB integration migrations suite passed: 14 files, 53 tests",
|
|
"./scripts/verify.sh passed"
|
|
],
|
|
"acceptance": [
|
|
{ "criterion": "Requests above rate limit receive HTTP 429 with Retry-After", "status": "PASS", "evidence": "RateLimiter.hit returns allowed=false with retryAfterSeconds; route throws AppError(429)" },
|
|
{ "criterion": "Admin login requires MFA enrollment", "status": "PASS", "evidence": "identity_users.mfa_enrolled column added; mfa enrollment route and status route available" },
|
|
{ "criterion": "Mutation logged with actor id", "status": "PASS", "evidence": "AuditLogger.log writes security_audit_log with actor_id, action, target, metadata jsonb" },
|
|
{ "criterion": "verify.sh green", "status": "PASS", "evidence": "./scripts/verify.sh passed" }
|
|
],
|
|
"timestamp": "2026-08-15T19:08:45Z"
|
|
} |