A compose-candidate answer's open input keeps its numbers as written when decoded

The answer's input is now the object the node-engine seat's contract names, so a decoder without UseNumber turns its
numbers into float64 and a checker re-encoding it for the composer would hand on different digits.

Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
This commit is contained in:
2026-11-04 12:43:11 +01:00
parent 42ac1a9a0a
commit f30a53b242
+1
View File
@@ -148,6 +148,7 @@ func checkComposeAnswer(a ComposeCandidateAnswer) error {
func strictDecode(data []byte, v any, what string) error { func strictDecode(data []byte, v any, what string) error {
d := json.NewDecoder(bytes.NewReader(data)) d := json.NewDecoder(bytes.NewReader(data))
d.DisallowUnknownFields() d.DisallowUnknownFields()
d.UseNumber() // a number in an object the contract leaves open (the composition input) keeps its digits as written
if err := d.Decode(v); err != nil { if err := d.Decode(v); err != nil {
return fmt.Errorf("delivery: %s does not fit its shape: %w", what, err) return fmt.Errorf("delivery: %s does not fit its shape: %w", what, err)
} }