Prior generation's recall transaction was reused for a later reroll
because findRecentGenerationRecallTransactionForChat matched by chat
alone and the peer-hook bridge forced reuse. That set shouldRun=false,
skipped runRecall, and bypassed the persisted-recall reuse gate, so
reroll silently inherited the previous fresh result. Stamp each
transaction with the active host generation id and scope recent-lookup
to the same generation, preserving intra-generation hook bridging.