Tag transaction ID, address, and attributes. Map the path through interconnect — list bridges. Compare master vs slave VIP logs at each bridge for attribute and ID preservation. Check coherency: is this address in a shareable domain? Are all masters participating? Reduce to 2-transaction litmus: write then read same line from different masters. Name the layer where contract broke.
Common trap: Jumping to widen bus or add FIFO without naming transaction and layer.
Layers separate contracts so implementations and evidence can change independently: software intent, transaction semantics, channel/link delivery and physical signalling. Real ownership often crosses teams, and a bridge may transform identity rather than preserve the same number, but it must maintain an unambiguous end-to-end mapping. Layering improves composition and debug; it is not a claim that a flat interface can never cross a clock domain or scale.
Common trap: Saying 'abstraction' without transaction identity or ownership.
Start with live request context: observed port, ID where present, stored address/shape, sequence and reset epoch. Record clock/time origins and known logging uncertainty. Follow remap/split records across bridges; firmware may need address, descriptor sequence and publication/completion events because it has no bus ID. If several requests remain possible, capture another discriminator rather than claiming an exact match from timestamp proximity.
Common trap: Comparing average throughput logs when a single txn is wrong.