If a command chain is set up in the following manner:
Start > Chain - Conditional > Chain - Unconditional
When the start command fails, causing the second block in the chain to not execute, the third still executes.
This can be easily demonstrated by chaining the following 3 commands:
Start: testfor Fails
Chain - Conditional: w @p 1
Chain - Unconditional: w @p 2
According to correct command block logic, what should happen is this:
Start: Command fails. Notifies the next block.
Chain - C: Gets notification. Checks > Finds failure condition. Does not execute. DOES NOT notify next block, as execution did not occur.
Chain - U: No notification.
Instead, this happens, and the chat gets spammed:
Start: Command fails. Notifies the next block.
Chain - C: Gets notification. Checks > Finds failure condition. Executes logic, does not run command. Notifies next block, as execution of something did occur.
Chain - U: Gets notification. Does not check. Executes command.
This is very annoying for efficiency reasons (being able to quickly and easily switch off large chain sections based on given criteria). Please put priority on it.
There is no 'notification' system in place. Every command block in a chain is executed separately (though in order). If a command block is conditional, it will perform a check behind it for a successful command block. If this is the case, it will run. If it is unconditional, it will run regardless.