A partial reset is any reset that clears some of a conversation while the rest keeps going: one domain of a handshake, one side of a credit scheme, the pointers but not the memory, the control but not the status the software polls. The cleared half restarts from idle; the surviving half resumes mid-dialogue. Everything after that is two sides speaking different protocols.
Finding it starts from the inconsistency, not the reset. Two pointers that should be equal are not; a credit count the two sides disagree on; a “valid” the receiver never sent paired with data the sender never meant. From the mismatched pair, walk each signal back to its reset net and list which resets clear which half: the reset that touches exactly one half is the partial one.
Reset protocol groups together: both sides of a handshake, both pointers plus the FIFO control, credits on both sides, or neither side resets while traffic can be live.
Where joint reset is impossible, give the surviving side a re-sync event: the reset domain's release raises a flag the neighbour treats as “peer restarted, return to idle”, the same armed-flag idea as the tolerant handshake.
Quiesce before resetting: stop new traffic, drain what is in flight, then reset. A reset that lands on an idle link has nothing to disagree about afterwards.
Make the reset scope reviewable: one table per reset listing every register it clears, so a partial reset of a protocol group is visible on paper before it ships.
Partial reset of a protocol group: the receiver's state was cleared while the sender kept its waiting state. Either reset both sides together or give the receiver a re-sync that returns the pair to idle.
With no transfer in flight and all wires at idle values, neither side holds state the other must match after release. The reset then starts both halves from a mutually known point instead of interrupting a dialogue.