Release Notes
Production Hardening (2026-06)
A large block of work across every plane, recorded by ADR. Grouped by area.
LLM and providers
- Credit-aware DeepSeek to Gemini fallback. The provider layer falls back from DeepSeek to Gemini when DeepSeek credit is exhausted, then continues serving (ADR 031).
deepseek-v4-flashis the documented default. The shipped.env.exampleselects thedeepseekbackend withdeepseek-v4-flash(specialist) anddeepseek-v4-pro(orchestrator). Granite via Ollama remains the air-gapped option.- Hosted providers with runtime config. DeepSeek, Gemini, OpenAI, and Anthropic are first-class backends, switchable at runtime from the operator console (ADR 022).
- AI chat hardened against adversarial use. The operator chat now injects the current date and time, reports its active model, defends against direct and indirect prompt injection (input neutralization and untrusted-data fencing, output secret and system-prompt redaction), rate limits per user, and grounds answers in live alerts and cases (ADR 036). See AI Assistant Safety.
Endpoint detection and response (EDR)
- Linux network, file, and DNS telemetry. The Linux sensor now emits network-connection, file-access, and DNS-query OCSF events alongside process execution (ADR 044).
- Inbound TCP scan detection. The sensor captures inbound TCP connection attempts and the collector bridges them to the backend detection plane, so an nmap scan surfaces as a
T1046network-service-discovery alert end to end. - Windows ETW pipeline. The Windows sensor compiles with a real ETW session controller and process-parent table (ADR 045).
- Native investigation GUI. The iced investigation app is feature-complete with a
--demomode, host-isolation control, a last-event line, and a live log tail (ADR 046). - OCSF to timeline mapping. OCSF classes map to operator-console timeline categories.
Cyber-physical systems (CPS)
- STM32 bench node. A USB-serial bridge brings a STM32F401 bench node into the MQTT ingest path (ADR 042).
- ESP32-S3 bench node. A WiFi ESP32-S3 node publishes telemetry over a Mosquitto mTLS listener with full PKI and edge MQTT wiring (ADR 048).
- Network-segment enforcement. A network controller enforces per-segment isolation for CPS devices (ADR 033).
MCP plane
- Tool error and timeout contract. Every MCP tool returns a uniform
{status, error_code, error}envelope and an optional per-call execution budget; internal detail never reaches the agent (ADR 047). - Server boundary protection. A default tool timeout, per-IP rate limiting, OpenTelemetry tracing, and in-flight drain on shutdown protect each MCP server process (ADR 049).
Detection and web defense
- ATT&CK coverage map and purple-team harness. A generated coverage report plus an expanded Sigma corpus (ADR 040).
- Inline web-attack defense. An Envoy
ext_authzfilter blocks OWASP attack classes inline before they reach the protected app (ADR 032), hardened with a fail-mode switch, verdict cache, rate limiting, and client reputation (ADR 039). - Standalone Suricata sensor. A self-contained sensor bundle runs Suricata on separate hardware (Linux container or native Windows) against a mirror or TAP and ships EVE alerts back to the API (ADR 050).
Autonomy and security
- Prompt-injection guardrail. An input guardrail and red-team harness screen agent inputs (ADR 036).
- Pre-LLM triage filter. A deterministic filter scores and auto-resolves alerts before they reach a model (ADR 037).
- Reversibility and kill-switch. A reversibility registry, post-action verification, and an autonomy kill-switch bound what agents can do (ADR 038).
- Per-site continuous learning. An opt-in, instantly reversible learning loop sharpens triage scoring and detection per deployment without raw telemetry leaving a site (ADR 043).
- Automated canary promotion and rollback. A regressing candidate model reverts on its own within one promotion pass (ADR 034).
- Production Vault auto-unseal. A production seal configuration for HashiCorp Vault (ADR 041).
Reports
- Signed, encrypted AI reports. AI-driven report generation with digital signatures and encrypted downloads, plus a corporate HTML and PDF design standard (ADR 035) and an operator-console report detail view with signature verification.
MVP-1.1: Dashboard Polish (in progress)
Highlights
- Streaming AI Chat.
/chatconsumesPOST /api/v1/chat/streamSSE endpoint with token-by-token rendering, a Stop button, Regenerate action, and localStorage persistence across reloads. - MCP/Tools panel for agent-NNN IDs. The MCP catalog resolver accepts dashboard-style identifiers (
agent-001toagent-014) in addition to PascalCase agent names. - Single-host deployment indicator. When only one site is registered the per-agent Deploy to Site button row is replaced by a Running locally on this host status badge.
- Granular MCP/Tool-Call panel states. Panels render distinct loading, error (with retry), empty, and data branches instead of ambiguous still loading placeholders.
GET /api/v1/system/topology. New endpoint returns deployment_mode, hostname, platform, runtime mode, and site list.- Real-mode live-fire bring-up path. Repo-local task starts API, dashboard, Redis task worker, and local A2A agent mesh for single-host operation. Raw events persist in the new
siem_logstable. - WAF telemetry bridge.
scripts/waf_log_bridge.pytails ModSecurity, nginx, AWS WAF, or Cloudflare JSONL events and posts them as WAF telemetry. - Unified SIEM Collector supervisor.
scripts/siem_collector.pyruns Suricata EVE, WAF JSONL, and local host-log bridges under one parent process. - Tamper-evident evidence custody ledger. Case evidence registration appends hash-chained ledger entries with sequence numbers and previous-entry hashes.
- CPS MQTT outbound bridge.
scripts/mqtt_outbound_bridge.pyrelays attestation_request audit events from Redis Streams to device MQTT topics with QoS 2. - Live EDR action adapter contract. Real-mode EDR isolate, unisolate, and scan actions can route to a configured HTTP adapter.
- Site-profile deployment guard. SOC sites carry persisted profile documents with declared asset classes. Agent deployment rejects unsupported site/agent combinations.
MVP-1: Single-Command SOC on a Laptop
Highlights
- Single-model lock.
granite3.2:8bas default for both specialists and orchestrator with shared model pool. make llm-doctor. Validates Ollama connectivity, model presence, and configuration before stack startup.make stack-up. One target boots Postgres, Redis, FastAPI, and the Next.js dashboard against host Ollama.make agents-smoke. Live LLM round-trip smoke for the full fleet using the BeeAI A2A mesh.- Network Command Center. Operator-facing HITL surface with Critical Approval Queue and dispatch deep-link receipts.
- Agent reasoning trail. Each network attack receipt carries the specialist's reasoning trail through the API into the dashboard timeline.
- Distributed mode runbook.
docker-compose.host-ollama.ymllets a second machine target the operator's Ollama.
Operator quick-start
ollama serve &
ollama pull granite3.2:8b
make llm-doctor
make stack-up
make agents-smoke
The dashboard is at http://localhost:3100 and the API at http://localhost:8001. Use make stack-down KEEP_INFRA=1 to stop app processes while keeping Postgres and Redis warm.