a7a95e65ed
regenerateHostKey was returning the ssh-keyscan fingerprint, but ssh-keyscan and the Go ssh client can negotiate different host-key types — meaning the fingerprint kandev observes during a real probe does not always match what keyscan saw. The keyscan output was used verbatim as the expected value, which K1 / K3 then asserted against kandev's pinned-fingerprint result, so the specs flapped depending on which algorithm sshd advertised. Drop the return value from regenerateHostKey and have callers hit /api/v1/ssh/test to learn the canonical fingerprint, matching what the SSH fixture already does at seeding time. K2 was polling env.error_message which doesn't exist — the launch fails at SSH dial time before the executor is recorded on the task environment. Point the polling at the task-session error_message instead, where updateTaskSessionState actually persists the dial failure.