agentLiveProposalsByBatch
Returns only proposals in a batch that are still actionable — pending and not expired — using the database clock so it stays in lockstep with the action mutations (which apply the identical guard). The standard agentProposals collection can't express "expires_at > now()" against the DB clock, so it would surface rows the mutation then refuses.
agentLiveProposalsByBatch(
batchId: String!
): [LiveAgentProposal!]!