# Single-Node Architecture Diagram ## High-Level Flow ``` ┌──────────────────────────────────────────────────────────────────────┐ │ Client Layer │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Agents │ │ Dashboard │ │ CLI Tools │ │ │ │ (Ed25519) │ │ (Web UI) │ │ (curl) │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └──────────────────┴──────────────────┘ │ │ │ │ │ │ HTTPS (443) │ │ ▼ │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ Reverse Proxy Layer │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Nginx / Envoy │ │ │ │ • TLS termination │ │ │ │ • Rate limiting │ │ │ │ • Security headers │ │ │ │ • Request logging │ │ │ └────────────────────────────┬────────────────────────────────────┘ │ │ │ HTTP (18180) │ │ ▼ │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ StemeDB Server │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ stemedb-api Process │ │ │ │ │ │ │ │ ┌───────────────┐ ┌────────────────┐ │ │ │ │ │ HTTP Router │ │ Content │ │ │ │ │ │ (Axum) │──────────▶│ Defense │ │ │ │ │ │ │ │ Layer │ │ │ │ │ │ • /v1/assert │ │ • Quarantine │ │ │ │ │ │ • /v1/query │ │ • Circuit │ │ │ │ │ │ • /v1/health │ │ Breaker │ │ │ │ │ │ • /metrics │ └────────┬───────┘ │ │ │ │ └───────┬───────┘ │ │ │ │ │ │ ▼ │ │ │ │ │ ┌────────────────┐ │ │ │ │ │ │ Ingestion │ │ │ │ │ │ │ Pipeline │ │ │ │ │ │ │ • Validate │ │ │ │ │ │ │ • Sign check │ │ │ │ │ │ │ • BLAKE3 hash │ │ │ │ │ │ └────────┬───────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ │ ┌────────────────┐ │ │ │ │ │ │ WAL │ │ │ │ │ │ │ (fsync) │ │ │ │ │ │ │ /data/wal/ │ │ │ │ │ │ └────────┬───────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ │ ┌────────────────┐ │ │ │ │ └──────────────────▶│ HybridStore │ │ │ │ │ │ • KV Store │ │ │ │ │ ┌───────────────┐ │ • Indexes │ │ │ │ │ │ Query Engine │◀──────────│ • Merkle Tree │ │ │ │ │ │ • Lenses │ │ /data/db/ │ │ │ │ │ │ • Conflict │ └────────────────┘ │ │ │ │ │ Resolution │ │ │ │ │ └───────┬───────┘ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────┐ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────┼──┘ │ │ │ │ │ Port 18180 (HTTP) │ │ └─────────────────────────────────────────────────────────────────┼────┘ │ ▼ ┌──────────────────────┐ │ Metrics Scraper │ │ (Prometheus) │ │ GET /metrics │ └──────────────────────┘ ## Storage Layer ``` /data/ ├── wal/ Write-Ahead Log (crash recovery) │ ├── segment-00001.log 10MB segments │ ├── segment-00002.log Fsync on every write │ └── segment-00003.log 7-day retention │ ├── db/ KV Store + Indexes │ ├── assertions.kv Content-addressed storage │ ├── indexes/ │ │ ├── concept_path.idx Tail-path matching │ │ ├── predicate.idx Predicate lookup │ │ └── agent.idx Agent-based queries │ └── merkle_tree.dat BLAKE3 Merkle tree │ └── metadata.json Assertion count, version ``` ## Backup Flow ``` ┌──────────────┐ │ Cron Job │ Daily at 2 AM │ (2 0 * * *) │ └──────┬───────┘ │ ▼ ┌────────────────────────────┐ │ backup-stemedb.sh │ │ • Stop writes (optional) │ │ • rsync WAL + DB │ │ • Create metadata.json │ │ • Resume writes │ └──────┬─────────────────────┘ │ ▼ ┌────────────────────────────┐ │ /backups/ │ │ stemedb-backup-YYYYMMDD/ │ │ ├── wal/ │ │ ├── db/ │ │ └── metadata.json │ └────────────────────────────┘ ``` ## Failure Mode (Server Down) ``` ┌──────────────┐ │ Clients │ └──────┬───────┘ │ ▼ ❌ Connection refused │ ▼ ┌──────────────────────┐ │ Manual Recovery │ │ 1. Provision server │ │ 2. Restore backup │ │ 3. Update DNS │ │ 4. Validate health │ │ │ │ RTO: ~2 hours │ │ RPO: ~24 hours │ └──────────────────────┘ ``` ## Key Characteristics - **Simplicity:** Single server, easy to deploy and manage - **Cost:** ~$87/month (AWS t3.large) - **Availability:** Single point of failure, no automatic failover - **Capacity:** <10K assertions, <100 queries/sec - **Recovery:** Manual restore from backup (2 hour RTO) - **Use Case:** PoC, friendly pilot, development environments ⚠️ NOT RECOMMENDED FOR PRODUCTION - Use three-node cluster for HA