How to restart a transcoder and verify it's active?

Great questions.

As a background, read this post on the difference between reward() and claimEarnings(): Difference between Reward() and ClaimEarnings()

1 - How can I confirm the transcoder is active, is seeing the explorer indicate “active” enough?

If the transcoder shows as “active” in the explorer, that means it is in the active set for the current round (top 15 delegated stake currently). It does not necessarily mean that your node is running correctly. That requires your own monitoring.

2 - Is there anything I can do to claim past rewards?

I think the above post should shed some light on what it means to claim past rewards. In short, your node must invoke the reward() txn every round. If it misses one, there’s no way to go back to invoke it retroactively.

As far as claimEarnings() it’s just an accounting artifact of the protocol. You have to call it once per round to actually move your earnings from the pending pool into your account, however there’s no time requirement for doing this. And you can call it for up to 20 rounds in one transaction, so best to just do it once every twenty rounds, or just submit a couple transactions down the line if you’re changing bonding status.

And the one mistake you can make is claiming earnings for the current round before reward is called, because then you miss the chance to re-allocate the rewards for the current round into your account.

3 - How can I get my transcoder claiming automatically claiming rewards again?

If the node is running, and connecting to a synced geth node, it should automatically call reward. If it’s not, try restarting it, or making sure the geth node is synced. In the meantime, I suggest you manually invoke the reward() function for the current round.

I think the automatic call loop checks every 30 minutes or so, so you may not see it call reward immediately upon a restart.