SSH output retention | AFTER | 218730a87e Linux / NodeServices native spawner / synthetic SSH executable / 1000ms timeout $ node evidence-driver.ts hang CASE hang | native subprocess | timeoutMs=1000 | keepErrorOutputTail=true Fixture emits stdout progress + synthetic JSON credential; stderr diagnostic; then hang WARNING [ "ssh.command.timedOut", { "alias": "fixture.example", "hostname": "fixture.example", "username": null, "port": null, "timeoutMs": 1000, "remoteCommandArgs": [ "hang" ], "preHostArgs": [], "hasStdin": false, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "REMOTE: waiting for archive extraction\n" } ] RESULT { "kind": "error", "message": "SSH command timed out after 1000ms.", "exitCode": null, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "REMOTE: waiting for archive extraction\n" } CLEANUP fixture process reaped $ node evidence-driver.ts fail CASE fail | native subprocess | timeoutMs=1000 | keepErrorOutputTail=true Fixture emits stdout progress + synthetic JSON credential; stderr diagnostic; then fail WARNING [ "ssh.command.failed", { "alias": "fixture.example", "hostname": "fixture.example", "username": null, "port": null, "command": [ "ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=10", "-o", "ServerAliveInterval=15", "-o", "ServerAliveCountMax=3", "--", "fixture.example", "fail" ], "exitCode": 1, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "REMOTE: waiting for archive extraction\n" } ] RESULT { "kind": "error", "message": "REMOTE: waiting for archive extraction", "exitCode": 1, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "REMOTE: waiting for archive extraction\n" } CLEANUP fixture process reaped $ node evidence-driver.ts fail-stdout CASE fail-stdout | native subprocess | timeoutMs=1000 | keepErrorOutputTail=true Fixture emits stdout progress + synthetic JSON credential; stderr diagnostic; then fail-stdout WARNING [ "ssh.command.failed", { "alias": "fixture.example", "hostname": "fixture.example", "username": null, "port": null, "command": [ "ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=10", "-o", "ServerAliveInterval=15", "-o", "ServerAliveCountMax=3", "--", "fixture.example", "fail-stdout" ], "exitCode": 1, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "" } ] RESULT { "kind": "error", "message": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}", "exitCode": 1, "stdout": "PROGRESS: downloading archive\n{\"credential\":\"[redacted]\"}\n", "stderr": "" } CLEANUP fixture process reaped $ node evidence-driver.ts success CASE success | native subprocess | timeoutMs=1000 | keepErrorOutputTail=true Fixture emits stdout progress + synthetic JSON credential; stderr diagnostic; then success RESULT { "kind": "success", "stdoutPresent": true, "stderr": "REMOTE: waiting for archive extraction\n" } CLEANUP fixture process reaped