Attempts for no-response delivery failures carry no diagnostic information
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Read the discussion on PR #1018 and compare the two response_data design positions described here before changing behavior. Trace how connection-level failures, format failures, and publisher-resolution failures are recorded, and review the attempt model, log store schemas, API type, and SDKs if choosing a dedicated field. Done means no-response attempts expose useful diagnostics assembled only from allowlisted data, without persisting raw transport error strings; the EADDRNOTAVAIL classification is a separate, severable change.
索引モデルが issue の本文から書いたものです。
説明
Problem
When a webhook delivery fails before receiving an HTTP response — DNS failure, connection refused, TLS error, dial timeout — the attempt records a code and nothing else. response_data is NULL.
| failure | code |
response_data |
|---|---|---|
| destination returns 4xx/5xx | "503" |
status, body |
| payload format failure | "ERR" |
the error message |
| publisher resolution failure | "ERR" |
the error message |
| connection-level failure | connection_refused, dns_error, network_error, … |
NULL |
A destination that returns a 500 with an empty body leaves more diagnostic trace than one that could not be reached at all. The network_error catch-all is the worst case: an attempt with that code carries no information whatsoever, so the end user cannot distinguish "my DNS points at a stale IP" from "my service is down" from "my TLS cert expired" without contacting support.
Constraints on a fix
Message content must be safe by construction. Raw Go transport error strings cannot be stored verbatim: proxy failures embed operator-side proxy diagnostics, net.OpError can include a source (pod) address, and errno text reveals sender-host state. Any recorded cause should be assembled from allowlisted parts — classification code, the customer-configured destination host/port, optionally the resolved IP — never from err.Error() passthrough.
Field design needs a decision. Two positions:
response_datais the attempt's explanation field and the name is historical. Two existing no-response paths (format failure, publisher resolution) already store{"error": ...}there, andNewFormatError's doc comment calls it "the customer-facing string persisted on the attempt."response_datashould strictly mean an HTTP response, and failure causes belong in a dedicated field (failure_reason/error) — cleaner, but touchesmodels.Attempt, both log store schemas, the API type, the SDKs, and the{"error": ...}values already in customers' attempt histories.
The inconsistency is customer-visible either way, so whichever path a fix takes should settle this first.
Prior art
PR #1018 implemented position 1 with raw err.Error() on the non-proxy path (proxy errors already stored classification only). Parked: no user demand yet, and the raw passthrough could not be proven leak-free. See discussion there.
Related, severable piece from that PR: classifying source-side ephemeral port exhaustion (EADDRNOTAVAIL) as address_unavailable instead of the network_error catch-all, so sender-side failures are not charged to the destination.
- 主要言語
- Go
- スター
- 1.1k
- フォーク
- 70
- 平均マージ
- 1日 18時間
- マージ済み PR(30日)
- 56
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
hookdeck/outpost のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
hookdeck/outpost#1117 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
メンテナーはふだん 1 日以内に返信
hookdeck/outpost の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
devantler-tech/ksail#7836 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
keyxmakerx/Chronicle#1469 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信
-
bug needs-acceptance wg/router-models-inference-runtime
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
vllm-project/semantic-router#5177 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
Gentleman-Programming/gentle-ai#5565 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信