Skip to content

Non-functional requirements & quality gates ​

As of: 2026-09-22

SymbolMeaning
🟒 MetEvidence in code, infra, or qualification
🟑 Partially MetBuilding blocks; target not demonstrated
πŸ”΄ Not Measured / Not StartedNo harness or not implemented
πŸ”΅ N/ADropped or out of Phase 1

1. Performance & Latency ​

MetricTargetStatusEvidence / gap
Core app p95 response< 2 s (excl. uploads/jobs)πŸ”΄ Not MeasureddurationMs logged; no p95 gate
Stalled live-service detection≀ 60 sπŸ”΄ Not StartedFR17 / AC18
Report readiness after endp95 ≀ 10 min; p99 ≀ 30 minπŸ”΄ Not Measured5 min Lambda timeout; no SLO tracking
Recording availability after endp95 ≀ 30 minπŸ”΄ Not MeasuredNo age metrics
End-of-turn to bot audiop95 ≀ 3 sπŸ”΄ Not MeasuredBot pipeline; not in Sophia repo
Live incident availability (proctoring)p95 ≀ 5 sπŸ”΄ Not StartedFR19 not productized
Detector failure recognition≀ 10 sπŸ”΄ Not StartedPRO05–PRO10
Scheduling usability≀ 3 minπŸ”΄ Not Measuredβ€”
Candidate preflight usability≀ 3 minπŸ”΄ Not Measuredβ€”
Calendar sync≀ 2 / 5 minπŸ”΅ N/ADropped

2. Scale & Load ​

TargetRequirementStatusEvidence / gap
Platform concurrent live10, β‰₯4 workspacesπŸ”΄ Not MetBot default 3
Per-workspace cap3πŸ”΄ Not StartedNo enforcement in API
Soak test90 minπŸ”΄ Not Startedβ€”
Daily workload qual100 sessions/dayπŸ”΄ Not Startedβ€”
100-session mix compositionDurations, shortened, failures, reviewed normalsπŸ”΄ Not Startedβ€”
Bulk import100 rowsπŸ”΅ N/A / πŸ”΄Bulk OPEN
Code reality 3 bots cluster-wideDocumented🟒 MetContradicts release 10
11th / 4th reject without harming confirmedβ€”πŸ”΄ Not StartedHTTP 429 cluster only
API scale ECS min 2 max 6CPU/memory targets🟑 Partially Metinfra/api.ts
Overload blocks new, not confirmedFR17πŸ”΄ Not Startedβ€”

3. Quality Gates ​

GateTargetStatusNotes
Phone detectionβ‰₯90% recall, β‰₯95% precisionπŸ”΄ Not StartedFR19
Person detectionβ‰₯90% / β‰₯95% per categoryπŸ”΄ Not StartedHeld-out β‰₯100 events
Eye/gazeβ‰₯85% sens/spec; macro-F1 β‰₯0.80πŸ”΄ Not StartedCredibility redesign OPEN
Report qualityβ‰₯20 human reviews; zero fabricationπŸ”΄ Not StartedPipeline exists
Usability5 users; β‰₯4/5 tasksπŸ”΄ Not Startedβ€”
Wallet sequencesβ‰₯1,000 randomized + invariantsπŸ”΄ Not StartedΒ§15.1
False escalation≀5% clean sessionsπŸ”΄ Not StartedΒ§15.2
WAL01–WAL24 matrixPer scenarioπŸ”΄ Not Startedβ€”
PRO05–PRO10 failures≀10 s recognize; block/pauseπŸ”΄ Not Startedβ€”
Held-out evaluation setPhone/person/gaze/failures/cleanπŸ”΄ Not StartedΒ§15.2
10 simultaneous + detectorsPass audio/recording/costπŸ”΄ Not Startedβ€”
Eye calibration usabilityβ‰₯95% without engineeringπŸ”΄ Not Startedβ€”
AC03 isolationZero leakageπŸ”΄ Not StartedΒ§16.1

4. Cost & Commercial ​

MetricTargetStatusEvidence / gap
Planning variable cost$0.15/paid minuteπŸ”΄ Not Measuredβ€”
Stress variable cost$0.25 p95 sessionπŸ”΄ Not Measuredβ€”
Release gate blended≀ $0.15 or exceptionπŸ”΄ Not Startedβ€”
Fixed infra launch budget$500/month proposed🟑 Partially Met~$88.50 Fargate ref
QA provider budget$500 proposedπŸ”΄ Not StartedProcess
Alert rolling > $0.15/minβ€”πŸ”΄ Not StartedΒ§8.3
Alert p95 > $0.25/minβ€”πŸ”΄ Not Startedβ€”
Incident spend protectionPause bookingsπŸ”΄ Not StartedWAL23
Reference component costsPlanning tableπŸ”΅ N/AΒ§17.4
Break-even illustrationsFinanceπŸ”΅ N/AΒ§17.4

5. Reliability & Consistency ​

RequirementStatusEvidence / gap
Money ops atomic + idempotent; balances β‰₯ 0🟑 Partially Metcredit.service.ts, transactions
WAL01–WAL24 replay/concurrency🟑 Partially MetWebhook idempotency; matrix not qual
Retries + DLQ review🟑 Partially MetSQS DLQ; no alarms/replay tooling
Replay no duplicate charges🟑 Partially MetNot fault-injection proven
Backup/rollback runbooksπŸ”΄ Not StartedSST retain; no runbooks
Reconciliation cache vs ledgerπŸ”΄ Not StartedComment in credit.repo.ts
AC03 zero cross-tenant🟑 Partially MetRepo discipline; no suite
Global DB rules (integer money, tenant indexes)🟑 Partially MetModels/repos
Partial SQS batch failures🟒 MetpartialResponses: true
Production Mongo required at startup🟒 Met/health degraded when down

6. Availability & Support ​

RequirementStatusEvidence / gap
Support Mon–Fri 09:00–18:00 ISTπŸ”΄ Not StartedProcess
Acknowledgement 1 business dayπŸ”΄ Not Startedβ€”
No 24/7 SLAπŸ”΅ N/APolicy
Named on-call rosterπŸ”΄ Not StartedFR17
Candidate self-service recovery🟑 Partially MetJoin flows partial
Contract tests + real-payment smoke🟑 Partially MetVitest; smoke not documented
Stripe test mode replay paths🟑 Partially MetWebhook verify
ALB /health🟒 Metinfra/api.ts
Production min 2 Fargate tasks🟒 Metinfra/api.ts

7. Security (Β§16) ​

RequirementStatusImplementation notes
Auth Cognito + Google + email🟑 Partially MetFirebase in code
Verification, reset, logout🟑 Partially MetFirebase routes
Candidate expiring scoped credentials🟑 Partially MetJoin token, session token
Authorization every request; immediate role change🟑 Partially MetrequireAuth / requireAdmin
Member own / admin workspace / candidate surfaces🟑 Partially MetAC03 pending
No cross-workspace access🟑 Partially MetTenant repos
Tenant isolation indexes🟑 Partially Metdata-access rules
Phone encrypted; scoped URLs ≀5 min🟑 Partially MetExport flow not started
Operator audit; ledger correctionsπŸ”΄ Not StartedLedger append-only 🟑
Data lifecycle purge / legal holdπŸ”΄ Not StartedretentionExpiresAt only
AC03 isolation testπŸ”΄ Not Startedβ€”
Logs exclude PII content🟑 Partially MetPino redaction
Security headers + CORS🟒 MetsecureHeaders()
Stripe webhook HMAC🟒 Metβ€”
Bot internal token🟒 Metx-internal-token
Rate limiting beyond password verifyπŸ”΄ Not Startedβ€”
Admin 2FA / IP allow-listπŸ”΅ N/AOPEN in spec

8. Notifications (FR15) ​

Email + in-product only; no SMS; candidates never get scores.

Notification typeStatus
Email verificationπŸ”΄ Not Started
Password resetπŸ”΄ Not Started
Team invitation🟑 Partially Met
Candidate booking / change / cancelπŸ”΄ Not Started
Reminder 24h / 1h before startπŸ”΄ Not Started
Unbooked invitation 24h before expiryπŸ”΄ Not Started
Candidate completion (no scores)πŸ”΄ Not Started
Report ready / failedπŸ”΄ Not Started
Calendar sync issuesπŸ”΅ N/A
Admin payment / funding / expiryπŸ”΄ Not Started
Admin alerts (<30 min, zero, blocked, expiry)πŸ”΄ Not Started
Member funding visibilityπŸ”΄ Not Started
ICS in emailπŸ”΄ Not Started
Bounce / retry without duplicatesπŸ”΄ Not Started
Timezone / deactivated creator fallbackπŸ”΄ Not Started

Queues: Only InterviewCompleted, ReportGenerate β€” no notification consumer.


9. Retention (FR16) ​

Policy elementSpecStatusEvidence / gap
Default 60 days evidenceβ€”πŸŸ‘ Partially MetretentionExpiresAt at settlement
Admin 30 days optionβ€”πŸ”΄ Not Startedβ€”
Anchor expiry terminal / unbookedβ€”πŸŸ‘ Partially Metβ€”
Draft files 30 daysβ€”πŸ”΄ Not Startedβ€”
Snapshot + deletion date UIβ€”πŸ”΄ Not Startedβ€”
Cannot shorten promised availabilityβ€”πŸ”΄ Not Startedβ€”
Purge notices 7d / 1dβ€”πŸ”΄ Not StartedField only
PDF + evidence exportβ€”πŸ”΄ Not Startedβ€”
Export page 1h fresh authβ€”πŸ”΄ Not Startedβ€”
Scoped URLs ≀ 5 minβ€”πŸŸ‘ Partially MetFiles module
Export copies purge 24hβ€”πŸ”΄ Not Startedβ€”
Active purge 72hβ€”πŸ”΄ Not Startedβ€”
Backups +30d tombstoneβ€”πŸ”΄ Not Startedβ€”
Legal holdβ€”πŸ”΄ Not Startedβ€”
Financial records 7 yearsβ€”πŸ”΄ Not Startedβ€”
Operational logs 30 daysβ€”πŸŸ‘ Partially MetCloudWatch default
Audit 1 yearβ€”πŸ”΄ Not Startedβ€”
Primary region us-east-1β€”πŸŸ‘ Partially MetACM/ALB
No indefinite customer storageβ€”πŸŸ’ Met (policy)β€”

10. Operations (FR17) ​

Capacity & signup ​

RequirementStatus
10 concurrent / 3 per workspaceπŸ”΄ Not Met
100 completed/day qualπŸ”΄ Not Started
100 rows/importπŸ”΅ N/A / πŸ”΄
Public signup within capacityπŸ”΄ Not Started
Overload blocks new not confirmedπŸ”΄ Not Started

Monitoring ​

SignalStatus
Ledger invariantsπŸ”΄ Not Started
Session/worker/room healthπŸ”΄ Not Started
Provider errorsπŸ”΄ Not Measured
Report/recording ageπŸ”΄ Not Started
Email queuesπŸ”΅ N/A
Stripe reconciliationπŸ”΄ Not Started
SQS consumer health🟑 Partially Met

Alerting ​

RequirementStatus
CloudWatch critical alarmsπŸ”΄ Not Started
DLQ depth > 0πŸ”΄ Not Started
Log-based request.failedπŸ”΄ Not Started
Cost alertsπŸ”΄ Not Started
Stalled runtime ≀60sπŸ”΄ Not Started

Operator console & runbooks ​

RequirementStatus
Audited operator consoleπŸ”΄ Not Started
Backup restoreπŸ”΄ Not Started
Rollback / deploy failure🟑 Partially Met
DLQ replay🟑 Partially Met
Credit adjustment without duplicateπŸ”΄ Not Started

Observability ​

CapabilityStatus
Structured JSON logging (Pino)🟒 Met
Correlation x-request-id API ↔ SQS🟒 Met
PII redaction🟒 Met
Per-request access log🟒 Met
Error envelope🟒 Met
GET /health + smoke🟒 Met
ALS org/user on all logs🟑 Partially Met
Metrics / APM / tracingπŸ”΄ Not Started

Proctoring ops (FR19) ​

RequirementStatus
Preflight all detector paths before paid startπŸ”΄ Not Started
Independent detector heartbeatsπŸ”΄ Not Started
Missing capture block/pause meter🟑 Partially Met
Evidence incidents; no default 100% integrityπŸ”΄ Not Started
Neutral integrity reminders ≀2πŸ”΄ Not Started

Sophia AI Interview Platform β€” Internal Documentation