Follow cobra's testing philosophy: the completion protocol (candidates +
directive) is business logic and belongs in Go, while the shell wrappers only
need to be checked for how they interpret each directive.
- Add completion/protocol_test.go: a table-driven black-box test that runs the
real `task __complete` binary and asserts the offered values and the emitted
directive. Unlike the in-process engine tests, it exercises the actual
entrypoint dispatch, runComplete wiring and — crucially — the real flag set,
so it catches drift between the completion enum/directive maps and the flag
definitions. Runs on every OS, including Windows where the shell smokes don't.
- Delete completion/tests/engine.sh (the protocol is now covered in Go) and drop
it from run.sh.
- Reduce the bash/zsh/fish/powershell smokes to directive routing only (files vs
dirs vs no-files vs no-space), removing the task/alias/var assertions that the
Go tests already own.