Looks good in general. If EDGE is asnychronous to clk, you should observe what's said about double registering. Otherwise, random errors can occur, either triggering of the output on first pulse or ignorance of input events.
Yes, EDGES is asynchronous to CLK. Can you explain more about what you mean by double registering?A google search for verilog double registering didn't seem to return any relevant results.
if your CLK edge is close to transition time of EDGES signal (what must
happen from time to time if the signals are asynchronous )
the 'pos_pulse' will be very short and 'not seen' by rest of your logic;