Placing Assertions in Interfaces

If I am using Interfaces to declare ports and connectivity between modules in RTL would it be appropriate to add simple protocol assertions within them so they are inherited for all instantiations of the interface?

It is mentioned as possible but I have found few examples online.

Take a simple req/ack interface between two modules that are using said interface, we want to ensure that all slave modules accept the request before it is de-asserted.

interface if_myintf (parameter width=32)
    
    logic               req;
    logic               ack
    logic [width-1:0]   data;
   

    assert property(@(posedge clk) disable iff (!reset) $fell(req) |-> $past(ack))
        else("master did not wait for slave to accept request"); 

 modport master(...)
 modport slave(...)


endinterface

My main questions are,

  1. Is it fine to have this interface in the main interface body?
  2. How best to make clk/reset available to the interface assertion since those won’t usually be declared in the actual interface.
  3. Should the assertion trigger, but this interface is used for many modules, how would the particular module that caused the violation be communicated in simulation reports?