-
Notifications
You must be signed in to change notification settings - Fork 3
plat 218
Resolved PUL-D7D173FB in the corresponding workflow databases after checking the existing implementation and passing focused regression tests. Full evidence and the complete remaining inventory: reconciliation audit. This is internal tracking closure, not a claim of a new deployed end-to-end run. Previous SQLite records are retained in audit events; unrelated findings remain open. No business data or historical schedule outcome was rewritten.
PLAT-218 — create_human_input_request hid invalid nested HTTP fields behind a false “apply_contract must be an object” error
| Coordination | Value |
|---|---|
| Assigned agent | Codex |
| Ticket state | implemented |
| Last synchronized | 2026-08-29 |
- Priority: P1 — Pulse could not persist an approval-gated repair and then misdiagnosed the correctly transported outer JSON object as damaged by the HTTP bridge.
-
Owner:
agent_go/cmd/server/report_human_inputs.goand the Pulse Review+Fix guidance that constructs the custom HTTP request. -
Related: Upwork
PUL-D7D173FB; the failed decision requesttechnical-decision-derive-route-scripted-migration-2026-08-28.
The retained coding-agent session contains the exact shell and HTTP payload.
It built the request with jq -n and posted it through
$MCP_CUSTOM/create_human_input_request. The HTTP bridge preserved
apply_contract as a JSON object. Two nested fields violated the published
schema instead:
-
approved_scopewas an object; the contract requires one string. -
post_run_proofwas an array; the contract requires one string.
The handler marshalled the outer value and unmarshalled it directly into the
typed Go struct. Any nested type error was collapsed into
apply_contract must be an object, falsely implicating the HTTP boundary and
giving the reviewer no actionable correction.
- Kept the HTTP contract strict; stringified JSON is not accepted as an alternate transport shape.
- Validate that the outer value is an object, then report the exact nested string field whose type is wrong.
- Preserve the underlying decoder error for other malformed contract fields.
- Clarify in both the published tool schema and Pulse Review+Fix guidance that
approved_scopeandpost_run_proofare strings whilepre_run_checksis the string array.
TestReportHumanInputToolReportsExactInvalidApplyContractField covers the
outer-string, nested-object, and nested-array failures. The existing structured
contract persistence test still passes:
go test ./cmd/server -run 'TestReportHumanInputToolReportsExactInvalidApplyContractField|TestReportHumanInputPersistsStructuredApplyContract' -count=1
The full guidance and affected Go package tests are green in the implementation commit.
Auto-synced from docs/ on main. Edit there, not here.