錯誤訊息說「請求失敗」,其實是回應太大裝不下——害人往網路問題查很久 #92

Open
opened 2026-08-11 14:45:02 +00:00 by Leo · 0 comments
Owner

[總管收錄] 2026-08-11 實撞,不是推測。

症狀:它說「請求失敗」,而其實是東西太大裝不下

http_request 零件遇到回應大於 64 KB 時,回的是:

{"success":false,"error":"HTTP request failed"}

這句話完全看不出真正原因。撞到的人會往網路、DNS、憑證、權限的方向查很久——
而那幾個方向全都是好的。

根因(已定位,省下重查)

registry/components/http_request/main.go:88 寫死緩衝區 64 KB
outBuf := make([]byte, 65536))。host function 寫不下就回非 0,
而第 105 行一律寫成 writeError("HTTP request failed")
——成因被抹平成同一句話

實撞脈絡

Leo/InkStoneCo#17global_index 工作流要讀 Gitea 五個 repo 的 issue 清單:

repo 回應大小 結果
arcrun-rag 256 KB
Arcrun 125 KB
InkStoneCo 68 KB

全部超過 64 KB,全部只拿到那句「HTTP request failed」。
最後改走 recipe(由 cypher-executor 直接 fetch,不經 WASM)才通。

「讀一個清單」是很普通的需求,而 Gitea/GitHub 這類 API 的清單回應輕易就破 64 KB。
這不是罕見邊角,是會反覆絆倒人的一格。

要達成什麼

  1. 「回應塞不進緩衝」這件事要在錯誤訊息裡看得出來,不要偽裝成一般的請求失敗。
  2. 讓撞到的人知道正解是什麼(例如:改走 recipe、或分頁抓)。

錯誤訊息的價值不在於「有沒有報錯」,在於它有沒有把人導向對的方向
這一則把人導向了完全錯誤的三個方向。

怎麼驗才算數

對一個確定會回超過 64 KB 的端點跑一次,
錯誤訊息要能讓人一眼判斷是緩衝上限,而不是網路問題。貼實測輸出。

🔴 紅線

  • 守本 repo 既有規約:零件只能 TinyGo/AssemblyScript
    cypher-executor 的 TS 不實作業務邏輯
  • 動 code 前先讀對應的 SDD找不到對應 SDD 就停下來問,不要自行建 SDD(D35 生命週期)。
  • 推自己的分支,不要推 main

相關

Leo/InkStoneCo#17(實撞來源)|Leo/Arcrun#88(同一家族:零件層的回答會誤導判斷)

> **[總管收錄]** 2026-08-11 實撞,不是推測。 ## 症狀:它說「請求失敗」,而其實是東西太大裝不下 `http_request` 零件遇到**回應大於 64 KB** 時,回的是: ```json {"success":false,"error":"HTTP request failed"} ``` 這句話**完全看不出真正原因**。撞到的人會往網路、DNS、憑證、權限的方向查很久—— 而那幾個方向全都是好的。 ## 根因(已定位,省下重查) `registry/components/http_request/main.go:88` 寫死緩衝區 64 KB (`outBuf := make([]byte, 65536)`)。host function 寫不下就回非 0, 而第 105 行**一律**寫成 `writeError("HTTP request failed")` ——**成因被抹平成同一句話**。 ## 實撞脈絡 `Leo/InkStoneCo#17` 的 `global_index` 工作流要讀 Gitea 五個 repo 的 issue 清單: | repo | 回應大小 | 結果 | |---|---|---| | `arcrun-rag` | **256 KB** | ❌ | | `Arcrun` | **125 KB** | ❌ | | `InkStoneCo` | **68 KB** | ❌ | 全部超過 64 KB,全部只拿到那句「HTTP request failed」。 最後改走 recipe(由 cypher-executor 直接 fetch,不經 WASM)才通。 ⇒ **「讀一個清單」是很普通的需求**,而 Gitea/GitHub 這類 API 的清單回應輕易就破 64 KB。 這不是罕見邊角,是**會反覆絆倒人**的一格。 ## 要達成什麼 1. **「回應塞不進緩衝」這件事要在錯誤訊息裡看得出來**,不要偽裝成一般的請求失敗。 2. **讓撞到的人知道正解是什麼**(例如:改走 recipe、或分頁抓)。 > 錯誤訊息的價值不在於「有沒有報錯」,在於**它有沒有把人導向對的方向**。 > 這一則把人導向了完全錯誤的三個方向。 ## 怎麼驗才算數 對一個**確定會回超過 64 KB** 的端點跑一次, **錯誤訊息要能讓人一眼判斷是緩衝上限,而不是網路問題**。貼實測輸出。 ## 🔴 紅線 - 守本 repo 既有規約:**零件只能 TinyGo/AssemblyScript**; **cypher-executor 的 TS 不實作業務邏輯**。 - **動 code 前先讀對應的 SDD**;**找不到對應 SDD 就停下來問,不要自行建 SDD**(D35 生命週期)。 - 推自己的分支,**不要推 main**。 ## 相關 `Leo/InkStoneCo#17`(實撞來源)|`Leo/Arcrun#88`(同一家族:零件層的回答會誤導判斷)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#92