Context is Everything logo

11. Non-Functional Requirements

Security

Requirement Current State Notes
Password hashing bcrypt Default salt rounds
Token authentication JWT (no expiry) See Q1 in open questions
API key storage bcrypt hash Full key shown once, irretrievable
Secret encryption AES-256-GCM Cloud credentials, Bedrock keys, named secrets
Path traversal prevention safePath() utility All user-controlled paths validated
Rate limiting express-rate-limit Default: 100 req/15 min, configurable
Security headers Helmet.js Enabled by default
CORS Express CORS middleware TBD: exact configuration
SQL injection Parameterized queries (better-sqlite3) Prepared statements throughout
XSS React (auto-escaped), rehype-raw for markdown rehype-raw in markdown rendering needs review
Dependency scanning CodeQL, Semgrep, OSV (GitHub Actions) Automated on PRs
Container scanning Trivy/Grype (GitHub Actions) Scans Docker images

Privacy

Requirement Current State
Data isolation Single-tenant per container
Data location Configurable (Sliplane regions, AWS regions)
Data at rest SQLite file on Docker volume, no filesystem encryption
Data in transit HTTPS (TLS termination at load balancer/Sliplane)
PII handling User data in SQLite, knowledge base on filesystem
Data deletion User delete cascades in DB, files remain on filesystem
Audit trail hook_events, execution_history, api_key_usage tables

Performance

Metric Target Current Implementation
Time to first token < 100ms (after Claude responds) WebSocket streaming, no server buffering
Page load < 2s Vite production build, code splitting
File upload 50MB default limit Configurable via MAX_FILE_SIZE
Database queries < 50ms typical SQLite with indexes, synchronous API
File tree rendering < 1s for 1000 files File tree caching (fileTreeCache.js)
Memory usage < 2GB per container Docker resource limits, memory monitoring

Reliability

Requirement Current State
Uptime target No formal SLA (customer-deployed)
Health check GET /health endpoint, Docker HEALTHCHECK
Auto-restart Docker restart: unless-stopped
Database integrity PRAGMA integrity_check on startup
Session resilience Filesystem-based (survives browser data clearing)
Graceful shutdown TBD: shutdown handling for CLI processes
Error boundaries React ErrorBoundary wraps main content

Observability

Component Mechanism
Server logs stdout/stderr (Docker logs)
Execution logs JSONL files (EXECUTION_LOG_FILE, SCHEDULER_LOG_FILE)
Hook analytics hook_events, hook_tool_execs tables
Usage metrics usage_events table (tokens, cost, latency)
Quality signals response_quality_signals table
Activity logging sessions, raw_exchanges tables
Memory monitoring memoryMonitor.js, containerMemory.js
Event loop monitoring eventLoopMonitor.js
Debug flags 10+ DEBUG_* env vars for targeted logging

Scalability

Dimension Current Capacity Scaling Strategy
Users per instance ~10-50 (single-tenant) Deploy more containers
Concurrent sessions Limited by Claude API rate limits Per-container isolation
Knowledge base size Limited by filesystem/volume size EFS for large bases
Database size SQLite practical limit ~100GB Retention policies, archival
File storage Volume-dependent EFS or S3 mount

Accessibility

Requirement Current State
Keyboard navigation Partial (standard HTML controls)
Screen reader support TBD -- not verified
Color contrast Dark/light themes, TBD: WCAG compliance
Focus management TBD
ARIA labels TBD -- not systematically applied

Browser/Device Support

Platform Support Level
Chrome (latest) Primary
Firefox (latest) Supported
Safari (latest) Supported
Edge (latest) Supported
Mobile browsers Responsive layout, MobileNav component
IE11 Not supported

Compliance & Data Retention

Requirement Current State
GDPR TBD -- single-tenant helps (data stays with customer)
HIPAA TBD -- depends on deployment configuration
SOX TBD
Data retention Configurable via retention services (ACTIVITY_LOG_RETENTION_DAYS, QUALITY_RETENTION_DAYS)
Right to deletion User delete cascades in DB; file cleanup TBD
Audit logging Hook events, execution history, API key usage