Deciding between a time and an action does matter. The big difference is when deciding on an action, each general only needs to eventually learn the action to take. When learning a time, each general needs to know the time to attack and they need to need to know the other general knows the time to attack before the time to attack has arrived. Here's a more thorough explanation:
Normally for the two generals problem, you assume if you retry a message indefinitely, the message will eventually be delivered. If this isn't the case, the problem is trivially impossible. If every message is dropped, the two generals cannot communicate with each other at all.
With this assumption, deciding on an action eventually becomes possible. Let's say the two generals strategy is the following. Each general individually decides to attack or retreat, then communicates their plan to the other general. If both general's agree they will execute that plan. Otherwise they will both retreat. To execute this strategy, the generals can use a protocol like TCP.
Each general repeatedly sends their plan to the other general until they receive an acknowledgement. Whenever a general receives a plan from the other general they send an acknowledgement, even if they have acknowledgement before. Based on the assumption above, if the first general keeps sending their plan, the second general will eventually receive it. When this happens the second general sends an acknowledgment. If the acknowledgement gets dropped, this cycle repeats. This is because the first general keeps sending the plan and the second general acknowledges it every time they receive it. Since the second general repeatedly sends the acknowledgement indefinitely, the first general will eventually receive it. Since both generals eventually receive the acknowledgement from the other general, using this algorithm will eventually finish.
This algorithm allows the generals to eventually agree an action. To see why the algorithm doesn't work for deciding on a time to attack, you can notice that in the above algorithm that each general never actually learns when both general's agree on an action. If a general doesn't know if the other general knows the plan, they cannot attack. If one general learns they are going to attack at 2pm, but the other general hasn't yet learned the time to attack, the first general will attack at 2pm, but the second general won't. Not only do you have to decide on a time, but each general needs to know that the other general has agreed with the time.
Doing this is impossible. The proof from Wikipedia looks something like the following. If the two generals eventually reach a point where they both know that "we will attack at 2pm" and "both generals know to attack at 2pm", there must have been some specific message where that statement became true. Without loss of generality, let's say that message was a message sent from the first general to the second. If that message was dropped, everything appears the same to the first general, but not to the second. The first general is now thinking "both generals will attack at 2pm", but the other general doesn't think that yet. This means that its impossible to construct any algorithm that works.
> The big difference is when deciding on an action, each general only needs to eventually learn the action to take.
This is implicitly dropping the requirement that the actions be coordinated.
When the message is what to do, the when must have been previously agreed upon (e.g. "dawn of the day after we figure out what we're going to do").
> using this algorithm will eventually finish
No, the same problem exists as in the other scenario: neither general knows when the other learned the correct action to take, and cannot schedule it correctly.
I agree. The author of the post didn't require that the general's attack at the same time. They only had to reach consensus on whether to attack or retreat. That's what spooneybarger meant by:
> The article incorrectly defines the two generals problem.
> The [actual] problem states that the two generals have decided to attack but need to coordinate on when. Failure to attack at the same time will result in defeat.
Normally for the two generals problem, you assume if you retry a message indefinitely, the message will eventually be delivered. If this isn't the case, the problem is trivially impossible. If every message is dropped, the two generals cannot communicate with each other at all.
With this assumption, deciding on an action eventually becomes possible. Let's say the two generals strategy is the following. Each general individually decides to attack or retreat, then communicates their plan to the other general. If both general's agree they will execute that plan. Otherwise they will both retreat. To execute this strategy, the generals can use a protocol like TCP.
Each general repeatedly sends their plan to the other general until they receive an acknowledgement. Whenever a general receives a plan from the other general they send an acknowledgement, even if they have acknowledgement before. Based on the assumption above, if the first general keeps sending their plan, the second general will eventually receive it. When this happens the second general sends an acknowledgment. If the acknowledgement gets dropped, this cycle repeats. This is because the first general keeps sending the plan and the second general acknowledges it every time they receive it. Since the second general repeatedly sends the acknowledgement indefinitely, the first general will eventually receive it. Since both generals eventually receive the acknowledgement from the other general, using this algorithm will eventually finish.
This algorithm allows the generals to eventually agree an action. To see why the algorithm doesn't work for deciding on a time to attack, you can notice that in the above algorithm that each general never actually learns when both general's agree on an action. If a general doesn't know if the other general knows the plan, they cannot attack. If one general learns they are going to attack at 2pm, but the other general hasn't yet learned the time to attack, the first general will attack at 2pm, but the second general won't. Not only do you have to decide on a time, but each general needs to know that the other general has agreed with the time.
Doing this is impossible. The proof from Wikipedia looks something like the following. If the two generals eventually reach a point where they both know that "we will attack at 2pm" and "both generals know to attack at 2pm", there must have been some specific message where that statement became true. Without loss of generality, let's say that message was a message sent from the first general to the second. If that message was dropped, everything appears the same to the first general, but not to the second. The first general is now thinking "both generals will attack at 2pm", but the other general doesn't think that yet. This means that its impossible to construct any algorithm that works.