Repository navigation
Closed
Labels
P2: mediumMinor bug, missing validation, metric inaccuracyMinor bug, missing validation, metric inaccuracyarchitectureSystemic design improvements that eliminate classes of bugsSystemic design improvements that eliminate classes of bugscomponent:diagnosticsDiagnostics endpoints, dashboard, health, probes, and trace explorerDiagnostics endpoints, dashboard, health, probes, and trace explorercomponent:pipelinePipeline orchestration, batching, runtime flow, and worker coordinationPipeline orchestration, batching, runtime flow, and worker coordinationenhancementNew feature or requestNew feature or requestproductionRequired for production readinessRequired for production readiness
Description
Purpose
Meta tracker for the broader I/O control-plane substrate: lifecycle, readiness, status, and diagnostics architecture.
This remains open as an architecture umbrella and sequencing artifact, not as a single execution work-unit.
Active open children
- research: I/O component refactor — library evaluation and benchmarking #1283
- File tailer refactor — split monolith, typestate, per-file correctness #1310
- OTLP receiver refactor — axum, streaming decompression, unified receivers #1311
- Output delivery contract — retry, reject, checkpoint, fanout #1312
- File appender output — new component with rotation, cleanup, path templates #1313
- I/O verification suite — TLA+, Turmoil, loopback, otelcol oracle, benchmarks #1314
- I/O correctness refactor — correct by construction, not by patch #1315
- meta: diagnostics contract hardening and dashboard metric cleanup #1445
Closed slices already landed
- IO_CONTRACTS.md — living contract for I/O and control-plane semantics #1303
- work-unit: control-plane contracts — probe, status, and roll-up semantics #1412
- work-unit: control plane — process phase, drain, and probe truth #1413
- work-unit: control plane — shared status model and admin status surface #1414
- work-unit: control plane — input lifecycle status wiring #1415
- work-unit: control plane — output lifecycle status wiring #1416
- work-unit: pipeline runtime — extract health transition reducer for control-plane truth #1440
Notes
Use narrow work-unit issues for implementation batches under this umbrella.
Metadata
Metadata
Assignees
Labels
P2: mediumMinor bug, missing validation, metric inaccuracyMinor bug, missing validation, metric inaccuracyarchitectureSystemic design improvements that eliminate classes of bugsSystemic design improvements that eliminate classes of bugscomponent:diagnosticsDiagnostics endpoints, dashboard, health, probes, and trace explorerDiagnostics endpoints, dashboard, health, probes, and trace explorercomponent:pipelinePipeline orchestration, batching, runtime flow, and worker coordinationPipeline orchestration, batching, runtime flow, and worker coordinationenhancementNew feature or requestNew feature or requestproductionRequired for production readinessRequired for production readiness
Activity
github-actions commentedon Apr 6, 2026
tl;dr: Outcome B — this needs a human decision before implementation because readiness semantics and lifecycle ownership are not defined enough to implement mechanically without choosing behavior.
Recommendation
Adopt a short decision in this issue for lifecycle + readiness policy first, then implement mechanically. I recommend windowed/degraded readiness (required components + threshold/time window), with an additive metrics rollout (
component_nameadded without removing existing labels initially).Findings (code evidence)
Current readiness is startup-only and route is
/ready(not/readyz)crates/logfwd-io/src/diagnostics.rs:484-488routes/health+/ready.crates/logfwd-io/src/diagnostics.rs:553-556sets ready when pipelines are non-empty.crates/logfwd-io/src/diagnostics.rs:545-552explicitly documents that data-flow freshness is not a readiness gate.No component lifecycle/health abstraction exists yet
crates/logfwd-io/src/input.rs:43-67(InputSource) has no start/shutdown/health.crates/logfwd-output/src/sink.rs:74-90(Sink) hasshutdownonly; no start/health.crates/logfwd-io/src/otlp_receiver.rs:266-273relies onDropfor shutdown.Metrics exist, but proposed
ComponentMetricsshape is not 1:1 with today’s modelcrates/logfwd-types/src/diagnostics.rs:10-27hasComponentStats(lines_total,bytes_total,errors_total, plus rotations/parse errors).crates/logfwd-io/src/diagnostics.rs:66-73hasbatch_latency_nanos_totalandinflight_batchesat pipeline scope, not component scope.crates/logfwd-io/src/diagnostics.rs:96,157-159,177-179show labelspipeline,input,output(nocomponent_name).Changing readiness path/policy has cross-surface impact
/ready:deploy/daemonset.yml:58-61tests/e2e/manifests/logfwd-daemonset.yaml:56-59book/src/config/reference.md:445-447book/src/deployment/monitoring.md:14-16book/src/troubleshooting.md:197-198Existing tests enforce current readiness semantics
crates/logfwd-io/src/diagnostics.rs:1645-1677(/ready503 with no pipeline, 200 with pipeline even before data).Verification
I ran:
cargo test -p logfwd-io test_ready_endpoint_ -- --nocaptureOutput:
Detailed Action Plan (post-decision mechanical steps)
Decision needed now
Pick one readiness policy:
Mechanical implementation once policy is chosen
Componenttrait andHealthenum in chosen crate (logfwd-typesvslogfwd-io) and wire exports.InputSourceandSink(or fold trait into them), including OTLP receiver replacing Drop-only shutdown path.ComponentMetricsharnessComponentStatsincrates/logfwd-types/src/diagnostics.rs.component_nameattribute inPipelineMetrics::add_input/add_outputpaths (crates/logfwd-io/src/diagnostics.rs:149-187).crates/logfwd-io/src/diagnostics.rs:484-488to support/readyz(and keep/readyalias during transition).serve_ready.crates/logfwd-io/src/diagnostics.rs:1645-1677./readyzpolicy.cargo test -p logfwd-iocargo test -p logfwd --test itjust ciRelated Items
IoAction)crates/logfwd-io/src/diagnostics.rscrates/logfwd-types/src/diagnostics.rscrates/logfwd-io/src/input.rscrates/logfwd-output/src/sink.rsshutdown)Label recommendation:
needs-decision.Note
🔒 Integrity filtering filtered 5 items
Integrity filtering activated and filtered the following items during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)What is this? | From workflow: Issue Triage
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
[-]Component lifecycle trait + ComponentMetrics harness[/-][+]I/O control-plane substrate — lifecycle, health, readiness, and status[/+]strawgate commentedon Apr 7, 2026
Cleanup pass: #1412, #1414, #1413, #1440, #1415, and #1416 are done. Remaining open items are still substantial (#1303 #1445 #1310 #1311 #1312 #1313 #1314 #1315 #1283), so please split or rewrite this umbrella with completed sub-items removed.
[-]I/O control-plane substrate — lifecycle, health, readiness, and status[/-][+]meta: I/O control-plane substrate — lifecycle, health, readiness, and status[/+]strawgate commentedon Apr 7, 2026
Converted this from to to keep execution queues narrow. Implementation should run via scoped work-units (current examples: #1549, #1548, #1495, #1555).
strawgate commentedon Apr 7, 2026
Follow-up clarification: this issue is now a meta tracker (not an execution work-unit). Run implementation via scoped work-units such as #1549, #1548, #1495, and #1555.
strawgate commentedon Apr 24, 2026
Deep-Dive Research: I/O Control-Plane Substrate
Current State — Extensive but Fragmented
combine()Kani-proved commutative/associative/live,/ready,/admin/v1/status,/admin/v1/traces, etc.ComponentStats): lock-free on hot path, dual-write to OTelWhat "Substrate" Means
No unified
Componenttrait exists. Each component type (file input, TCP, OTLP receiver, output sink, worker pool) has ad-hoc lifecycle. No structured startup ordering, no dependency graph, no hot-reload, no component-level readiness reporting.Recommended Approach
Lightweight
IoComponenttrait +ComponentRegistry:Evolve toward actor-like substrate incrementally. Existing health reducers and
ComponentStatsstay as-is — they're well-designed. The gap is standardized lifecycle management.Complexity: L
Many files touched (each component implements trait), but each change is incremental.
strawgate commentedon Apr 25, 2026
Resolved. I/O control-plane substrate built: PipelineMachine with typestate lifecycle, ComponentHealth enum, per-component health tracking (receiver_health.rs, polling_input_health.rs), readiness/liveness endpoints.