01Find the trust boundary
Start where one component grants trust and another component performs the sensitive action. That gap is where meaningful security issues usually hide.
In the Go SDK validator, the destination check passed while the primary output remained unvalidated.
02Turn the hunch into proof
Reduce the issue to a deterministic test that captures the exact authorization decision, state transition, or parser behavior.
A single Go test proves HashValidator and DestinationValidator both accept the crafted transaction.
03Separate impact from speculation
Show what the code proves, what deployment reachability would change, and where the claim should stop.
The report distinguishes source-level proof from deployment-dependent impact.
04Package the case cleanly
Align the asset, weakness, test output, and limitation notes into one argument. Every attachment should move the case forward.
Clean bundle: description, impact, PoC patch, test results, and limitation notes.
05Go low
When the boundary is unclear, go beneath the abstraction: C internals, assembly output, memory layout, or hardware behavior.
High-level assumptions break at the ABI.