You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug: http output is unsupported on latest master despite being documented and implemented previously #1230
Other sink types still validate on the same commit, for example:
stdout
tcp
otlp
null
Why this looks like a real bug
Pipeline::from_config now routes outputs through build_sink_factory(), but build_sink_factory() has no OutputType::Http arm, so http falls through to the generic type {:?} not yet supported error.
Affected files
crates/logfwd/src/pipeline.rs
crates/logfwd-output/src/lib.rs
Affected commit
Observed on origin/master at eeb7bd6779f27361e01b3ce6d2d72e4d82cfd431.
changed the title [-]bug: multi-output pipelines reject http sinks on latest master with type Http not yet supported[/-][+]bug: http output is unsupported on latest master despite being documented and implemented previously[/+]on Apr 5, 2026
tl;dr: Outcome A — Ready for implementation: http is accepted by config but rejected in sink construction because build_sink_factory() has no OutputType::Http arm, so both single-output and fanout pipelines fail with type Http not yet supported.
Recommendation
Implement Http in the async sink-factory path (not config-only changes): add an OutputType::Http arm in crates/logfwd-output/src/lib.rsbuild_sink_factory(...) and wire it to a real async HTTP sink factory.
Findings
crates/logfwd-output/src/lib.rs:521 — current signature:
Change: add JsonLinesSinkFactory (or equivalent) implementing SinkFactory and creating an async-capable sink that posts newline-delimited JSON over HTTP.
Keep semantics consistent with existing sink result model (SendResult) and output stats accounting.
Update unit tests for new expected behavior
File: crates/logfwd-output/src/lib.rs tests.
Replace test_build_sink_factory_http_not_yet_supported with success-path test:
Open PRs in area: none verified as currently open for this exact regression.
Note
🔒 Integrity filtering filtered 6 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.
resource:search_pull_requests (search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)
Double-check pass on April 6, 2026: this is actively in flight in PR #1319.
That PR restores OutputType::Http wiring in build_sink_factory() and moves the JSON-lines HTTP sink back onto the async sink path used by both single-output and fanout pipelines. I’m leaving this open until #1319 merges, but it should track that PR rather than sit as unowned backlog work.
Planning note from the 2026-04-06 output/config pass: this issue is intentionally no longer bundled into #1272. The fanout delivery bugs (#1232 / #1233) are one execution seam; whether http output should be restored as a supported product surface is a separate decision, especially once #1444 makes the docs reflect the canonical support matrix.
Follow-up planning note: the separation from #1272 is about execution shape, not lack of ownership. #1230 already has an active PR path called out in the tracker; #1272 is now just the sibling fanout-contract batch (#1232 / #1233).
Activity
[-]bug: multi-output pipelines reject http sinks on latest master with type Http not yet supported[/-][+]bug: http output is unsupported on latest master despite being documented and implemented previously[/+]github-actions commentedon Apr 5, 2026
tl;dr: Outcome A — Ready for implementation:
httpis accepted by config but rejected in sink construction becausebuild_sink_factory()has noOutputType::Httparm, so both single-output and fanout pipelines fail withtype Http not yet supported.Recommendation
Implement
Httpin the async sink-factory path (not config-only changes): add anOutputType::Httparm incrates/logfwd-output/src/lib.rsbuild_sink_factory(...)and wire it to a real async HTTP sink factory.Findings
crates/logfwd-output/src/lib.rs:521— current signature:pub fn build_sink_factory(name: &str, cfg: &OutputConfig, stats: Arc(ComponentStats)) -> Result(Arc(dyn SinkFactory), OutputError)crates/logfwd-output/src/lib.rs:665-668— fallback error path emitstype {:?} not yet supported(this is whereHttplands).crates/logfwd-output/src/lib.rs:957-971— unit testtest_build_sink_factory_http_not_yet_supportedcodifies current failure.crates/logfwd/src/pipeline.rs:320-344— both single output and multi-output fanout callbuild_sink_factory(...), so both fail the same way.crates/logfwd-config/src/lib.rs:749-755— config validation treatsOutputType::Httpas endpoint-based output (accepted at config stage).crates/logfwd/tests/it/integration.rs:231-234— HTTP integration test is ignored as unimplemented.master:eeb7bd6([WIP] Delete OutputSink and all backwards compat cruft (#1155)) is HEAD and removed active HTTP sink path.454fe1eupdated tests to keep HTTP unimplemented behavior.Verification
Detailed Action Plan (mechanical)
Add Http factory wiring
crates/logfwd-output/src/lib.rs(insidebuild_sink_factory, near otherOutputType::*arms).OutputType::Http => { ... }arm that:cfg.endpoint(same style as OTLP/Loki/Elasticsearch arms),cfg.compressionto existingCompressionenum (zstd/none; reject unsupported values withOutputError::Construction),build_auth_headers(cfg.auth.as_ref()),Arc(dyn SinkFactory)for HTTP sink.Provide async HTTP sink factory implementation
crates/logfwd-output/src/json_lines.rs,crates/logfwd-output/src/lib.rsexports.JsonLinesSinkFactory(or equivalent) implementingSinkFactoryand creating an async-capable sink that posts newline-delimited JSON over HTTP.SendResult) and output stats accounting.Update unit tests for new expected behavior
crates/logfwd-output/src/lib.rstests.test_build_sink_factory_http_not_yet_supportedwith success-path test:OutputType::Http+ valid endpoint =>build_sink_factory(...)returnsOk(factory).Enable pipeline-level coverage for fanout
crates/logfwd/src/pipeline.rstests.outputs: [stdout, http]and assert pipeline construction succeeds.Unignore integration once sink is wired
crates/logfwd/tests/it/integration.rs.test_http_output_sends_to_serverand keep/assert full line-delivery checks.Verification commands
cargo test -p logfwd-output test_build_sink_factory_httpcargo test -p logfwd --test it test_http_output_sends_to_servercargo test -p logfwd pipelinejust ciRelated Items
eeb7bd6)454fe1e)crates/logfwd-output/src/lib.rs:521,665-668,957-971crates/logfwd/src/pipeline.rs:320-344crates/logfwd-config/src/lib.rs:749-755httpcrates/logfwd/tests/it/integration.rs:231-234Open PRs in area: none verified as currently open for this exact regression.
Note
🔒 Integrity filtering filtered 6 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".)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".)pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)pull_request_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".)What is this? | From workflow: Issue Triage
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
strawgate commentedon Apr 6, 2026
Double-check pass on April 6, 2026: this is actively in flight in PR #1319.
That PR restores
OutputType::Httpwiring inbuild_sink_factory()and moves the JSON-lines HTTP sink back onto the async sink path used by both single-output and fanout pipelines. I’m leaving this open until #1319 merges, but it should track that PR rather than sit as unowned backlog work.strawgate commentedon Apr 6, 2026
Planning note from the 2026-04-06 output/config pass: this issue is intentionally no longer bundled into
#1272. The fanout delivery bugs (#1232/#1233) are one execution seam; whetherhttpoutput should be restored as a supported product surface is a separate decision, especially once#1444makes the docs reflect the canonical support matrix.strawgate commentedon Apr 6, 2026
Follow-up planning note: the separation from
#1272is about execution shape, not lack of ownership.#1230already has an active PR path called out in the tracker;#1272is now just the sibling fanout-contract batch (#1232/#1233).strawgate commentedon Apr 8, 2026
Resolved by PR #1568. HTTP output is now wired in sink factory ( -> ) and validates correctly.