All notable changes to Qute are documented here. Format follows Keep a Changelog.
NVIDIA Ising QEC integration
IsingDecoderclass inquantum/noise.py— 3D CNN pre-decoder for surface-code quantum error correctiondecode_surface()— full Stim detector → PyMatching → corrected logical pipeline- Verified: D=7, p=0.003, N=20k → 28.6% LER improvement, 37.4× syndrome density reduction
- Verified: D=7, p=0.005, N=100k → 26.6% LER improvement, 27.1× SDR
- Ising QEC Benchmark section in Quantum tab with distance/variant/p/shots controls
- NVIDIA Ising-Decoding source vendored at
vendor/ising_decoding_code/for portability scripts/download_ising_models.pyfor model weight download
Feature vector redesign
- Replaced network-centric 16-dim vector with syslog-aware threat-signal vector
- New dimensions: IP privateness, process risk classification, message pattern keywords (fail/auth/exploit/scan), repeat source detection, temporal anomaly
- Kernel/nmap/masscan added to network process set for port scan detection
sev_hithreshold lowered to 0.60 for firewall/scan processes- Verified: SSH brute force events score 14/16 non-zero dimensions
Demo dataset
- 100 synthetic syslog events with verified ground truth labels (
data/samples/) - 6 attack types: SSH brute force, privilege escalation, port scan, lateral movement, benign routine, benign auth
- 45 anomalous / 55 benign, fixed seed=42 (reproducible), temporally coherent
- 80 high-confidence / 20 medium-confidence labels
Quantum circuit improvements
- 16→4 feature compression via weighted composite aggregation (severity, process, message, context)
- Runtime GPU/CPU backend selection — no rebuild required
- Variable seed in numpy simulation for genuine run-to-run variance
backendparameter threaded throughrun_vqc→QuantumRunner→BenchmarkComparator
Classical detection head
- Replaced severity threshold with 16-dim weighted linear classifier
- Threshold optimised: F1=0.989, Acc=99%, FPR=1.8% on demo dataset
- Zero false negatives across all attack types
GPU support
- GPU build stage in Dockerfile using
nvidia/cuda:12.5.0-runtime-ubuntu22.04 docker-compose.ymlGPU deployment block with NVIDIA Container Toolkit integration- Runtime backend toggle in Quantum tab UI (CPU optimal at 4 qubits, GPU ready for scaling)
- Tested: RTX 2080 Ti, CUDA-Q 0.14.0
Syslog listener
- Live TCP/UDP syslog listener on port 5514
- Persistent state across container restarts via
app_settingsDuckDB table restore_from_settings()auto-restores listener on startup- Schema migration v2 for
app_settingstable
UI — investigation flow
- Investigation state concept tracking events, rules, benchmark results across tabs
- Sidebar replaced with live investigation status panel
- Context banners on each tab showing workflow position and cross-tab navigation
- Rules tab: Pattern Analysis section with event clusters (by process, by source IP, uncovered high-severity)
- Rules tab: event source reordered — High severity first (operational), Random last (exploratory)
- Benchmark tab: Demo mode with one-click synthetic dataset benchmark
- Benchmark tab: "Compare both" mode showing clean vs noisy quantum performance
- Benchmark tab: corpus summary panel before running
- Benchmark tab: noise mode selector (clean / noisy / compare both) with depolarising probability slider
- Report tab: restructured as 4-section investigation summary (Telemetry / Rules / Benchmark / Export)
- Settings tab: Ising decoder status with dependency checks
Benchmark improvements
multi_run_benchmark()with mean/std aggregation across N runs- Module-level
IsingDecodersingleton — model loaded once per process classical_predictionsandquantum_predictionsreturned in report for per-attack-type breakdownnoise_enabledandbackendruntime parameters onBenchmarkComparatorandmulti_run_benchmark
IsingCNNstate dict key mismatch (Sequential→ nestedIsingCNN.netmodule)- Three Ising decoder bugs: ReLU→GELU, wrong trainX source, missing pre_L logical frame correction
apply_depolarising_noise_numpyhardcoded seed removed (genuine variance now)IsingDecoder.decode()clarified as no-op for VQC counts (CNN designed for surface code syndromes)runner.py_get_feature_vectorwas truncating to N_QUBITS=4 before compressioncomparator.pybenchmark tab column bleed into Ingest tab (Rules tab column context fixed)- Syslog listener double-bind on Streamlit rerun (
restore_from_settingsidempotency guard) - rsyslog conflict with Python syslog listener (rsyslog removed from Dockerfile CMD)
ISING_MODEL_DIRnow usesPath(__file__).resolve().parentfor local/Docker portability
QUTE_QUANTUM_BACKENDdefault changed fromcputonvidiain.env.exampleanddocker-compose.yml- Requirements: added
torch,pymatching,safetensors,stim,bcrypt - Dockerfile: added
vendor/COPY step to both CPU and GPU stages - Port 5514 exposed as both TCP and UDP in Dockerfile and docker-compose.yml
- Initial scaffold: DuckDB schema, ECS normaliser, syslog/CEF/JSON parsers
- Classical LLM rule generation via Ollama → pySigma (KQL, SPL, Yara-L)
- Quantum harness: VQC and QSVM circuits via CUDA-Q with numpy fallback
- Benchmark comparator with accuracy/F1/FPR/latency/efficacy metrics
- Streamlit UI: 6 tabs (Ingest, Rules, Quantum, Benchmark, Report, Settings)
- Live syslog listener (TCP/UDP)
- UI authentication (bcrypt password hashing)
- OTel tracing integration
- Docker deployment (CPU stage)
- Apache 2.0 license