Last known good
June 18 · 14:31Payload contained the required phone_number key.
Sample rescue packet / R-001
This packet demonstrates the evidence, repair boundary, verification, and handoff a tightly scoped workflow rescue should produce.
Observed path
01 / Evidence
Last known good
June 18 · 14:31Payload contained the required phone_number key.
First failure
June 18 · 15:04Form update renamed the outgoing field to phone.
Visible symptom
CRM HTTP 422Email confirmation succeeded, masking the failed CRM handoff.
The form changed one outgoing key. The workflow treated the CRM rejection as a completed run, so no retry or human alert fired.
02 / Written repair boundary
The agreed definition of done
“A new test submission using either supported phone-field name creates exactly one CRM contact, assigns the sales owner, and produces a visible alert if the CRM rejects the request.”
03 / Smallest safe repair
{
"phone_number": payload.phone_number,
"email": payload.email
}const phone = normalize(
payload.phone_number ?? payload.phone
)
if (!phone) routeToException(payload)
else createOrUpdate({ phone, email })
onReject(alertWorkflowOwner)Example logic only. A real repair uses the client’s actual platform, node types, API contract, test data, and access controls.
04 / Verification packet
Executable proof
The downloadable JSON was imported and executed with n8n 2.31.7. The final node returned all_passed: true, four PASS results, one exception event, and one duplicate update. It performs no network requests.
05 / Handoff
Exact nodes, mappings, and alerts changed.
Test inputs, execution IDs, outputs, and timestamps.
Restore the preserved configuration if a regression appears.
Revoke temporary access and watch the next live executions.
Have a real failure?
You will get a fit answer before any paid diagnosis or repair begins.