Roadmap
Living tracking issue for logfwd implementation phases. Check items off as they land; link PRs in comments.
Completed phases (click to expand)
Proven Core (Phases 0–1)
Performance (Phases 2–3)
Scanner + Pipeline (Phases 4–5)
Verification (Phase 6 + 7a)
Core Hardening (Phase 8) + Column Naming (Phase 10)
Production Readiness (completed items)
Async output worker pool — MRU dispatch, ES/Loki async sinks (PR feat: async output worker pool (MRU dispatch) + ES/Loki async sinks #701 )
Sink trait unification — unified OutputSink/Sink (PR Refactor to unify OutputSink and Sink traits by removing sync outputs #857 )
OTLP wire format fix — raw zstd + correct resource attribute field tag (PR fix: OTLP wire format — raw zstd + correct resource attribute field tag #887 )
File tailing reliability — truncation, OOM, glob dedup, checkpoint validation (PR fix: file tailing reliability — truncation, OOM, glob dedup, checkpoint validation, warnings (#796, #800, #799, #656, #730) #808 )
FileCheckpointStore persistence (PR feat: wire FileCheckpointStore into pipeline — persist and restore file offsets (#588) #784 )
Exclusive instance lock (PR feat: exclusive instance lock — prevent duplicate file processing (#737) #814 )
JSON escape sequence decoding (PR fix(scanner): decode JSON escape sequences in string values (#410) #885 )
Config validation hardening (PR Fix config validation to catch typos and invalid values at load time #854 )
Open work
I/O Correctness Refactor (#1315 ) 🆕
Comprehensive refactor of file tailer, OTLP receiver, OTLP exporter, and new file appender — correct by construction via typestate, Kani proofs, unified error types, and ecosystem libraries. Research: #1283 .
Phase 0 — Shared Infrastructure:
Phase 1 — File Tailer: #1310 — split monolith, typestate, per-file correctness (fixes #797 , #798 , #799 , #800 , #801 , #796 )
Phase 2 — OTLP Receiver: #1311 — axum, streaming decompression, unified receivers (supersedes #689 )
Phase 3 — OTLP Exporter: #1312 — ⚠️ P0 panic recovery, checkpoint fix, jitter, fanout (fixes #1233 , #1232 , #1225 )
Phase 4 — File Appender: #1313 — new component with rotation, cleanup, path templates (fixes #1231 )
Phase 5 — Verification: #1314 — TLA+, Turmoil, OTLP loopback, otelcol oracle, benchmarks
Phase 7: Complete Verification (#895 )
Comprehensive TLA+ modeling + simulation testing + spec-to-code alignment.
7b: Implement `force_stop()` — align code with TLA+ spec (ForceStop action)
7c: Pipeline testability — `with_input()`, `with_checkpoint_store()` builders for test injection
7d: Extract `BatchAccumulator` — pure state machine from run_async, Kani proofs
7e: TLA+ ShutdownProtocol.tla — N input threads + channel + consumer + pool drain coordination (extended by I/O verification suite — TLA+, Turmoil, loopback, otelcol oracle, benchmarks #1314 )
7f: TLA+ PipelineBatch.tla — multi-source batching, checkpoint merge, error handling, backpressure (extended by I/O verification suite — TLA+, Turmoil, loopback, otelcol oracle, benchmarks #1314 )
7g: TLC in CI — run all TLA+ specs on every PR
7h: Simulation test suite — 11 deterministic scenarios (extended by I/O verification suite — TLA+, Turmoil, loopback, otelcol oracle, benchmarks #1314 )
7i: Archive FileCheckpoint.tla — move to research/, update gap analysis
Core Hardening
Crate Restructure (#851 )
Production Readiness
AsyncFanout with circuit breaker (Design: AsyncFanout — independent sink tasks with retry, circuit breaker, per-sink isolation #319 ) → addressed by Output delivery contract — retry, reject, checkpoint, fanout #1312 (I/O refactor Phase 3)
CRI silent truncation fix (Fix: CRI reassembler silently truncates lines exceeding max_line_size #275 )
Structured logging with tracing (P1: Structured logging with tracing crate #191 )
Failure metrics — dropped batches, per-sink errors (P1: Add failure metrics (dropped batches, per-sink errors, buffer size, parse errors) #192 ) → addressed by meta: I/O control-plane substrate — lifecycle, health, readiness, and status #1306 (ComponentMetrics)
TCP/UDP backpressure (P0: TCP/UDP inputs have no backpressure — will OOM under sustained load #576 )
TCP/UDP TLS support (bug: TCP ingress needs TLS/mTLS support (UDP DTLS out of scope) #579 )
Async OTLP sink — migrate from ureq to reqwest (Convert OtlpSink to async reqwest (migrate from ureq) #689 ) → superseded by OTLP receiver refactor — axum, streaming decompression, unified receivers #1311 (receiver refactor)
Async TCP/UDP sinks — migrate from std::net to tokio (Convert TcpSink to async tokio::net::TcpStream #690 , Convert UdpSink to async tokio::net::UdpSocket #691 )
Enrichment config wiring (Enrichment types k8s_path, host_info, static, csv, jsonl have code but no config wiring #540 )
Roadmap
Living tracking issue for logfwd implementation phases. Check items off as they land; link PRs in comments.
Completed phases (click to expand)
Proven Core (Phases 0–1)
Performance (Phases 2–3)
Scanner + Pipeline (Phases 4–5)
Verification (Phase 6 + 7a)
Core Hardening (Phase 8) + Column Naming (Phase 10)
Production Readiness (completed items)
Open work
I/O Correctness Refactor (#1315) 🆕
Comprehensive refactor of file tailer, OTLP receiver, OTLP exporter, and new file appender — correct by construction via typestate, Kani proofs, unified error types, and ecosystem libraries. Research: #1283.
Phase 0 — Shared Infrastructure:
Phase 1 — File Tailer: #1310 — split monolith, typestate, per-file correctness (fixes #797, #798, #799, #800, #801, #796)
Phase 2 — OTLP Receiver: #1311 — axum, streaming decompression, unified receivers (supersedes #689)
Phase 3 — OTLP Exporter: #1312 —⚠️ P0 panic recovery, checkpoint fix, jitter, fanout (fixes #1233, #1232, #1225)
Phase 4 — File Appender: #1313 — new component with rotation, cleanup, path templates (fixes #1231)
Phase 5 — Verification: #1314 — TLA+, Turmoil, OTLP loopback, otelcol oracle, benchmarks
Phase 7: Complete Verification (#895)
Comprehensive TLA+ modeling + simulation testing + spec-to-code alignment.
Core Hardening
Crate Restructure (#851)
Production Readiness
AsyncFanout with circuit breaker (Design: AsyncFanout — independent sink tasks with retry, circuit breaker, per-sink isolation #319)→ addressed by Output delivery contract — retry, reject, checkpoint, fanout #1312 (I/O refactor Phase 3)Failure metrics — dropped batches, per-sink errors (P1: Add failure metrics (dropped batches, per-sink errors, buffer size, parse errors) #192)→ addressed by meta: I/O control-plane substrate — lifecycle, health, readiness, and status #1306 (ComponentMetrics)Async OTLP sink — migrate from ureq to reqwest (Convert OtlpSink to async reqwest (migrate from ureq) #689)→ superseded by OTLP receiver refactor — axum, streaming decompression, unified receivers #1311 (receiver refactor)