fix: disclose the tcsh regression and bring the launch docs in line (release review)

A tcsh login shell worked on 1.48.0 only because the local sh rewrote
${SHELL:-/bin/sh} to this host's shell. With the launch verbatim, tcsh gets -i -l,
refuses it and every stock launch leaves a dead pane. The changeset and
docs/remote-sessions.md described that as a standing limitation; they now name it
as a change in this release, with what the override workaround costs.

Also: extraSshOptions joins the list of values now literal at launch, the stock pane
command is shown as /bin/sh -c in the docs and the builder's JSDoc, the invariants
state how the launch must reach the far end, the manual pages cover $ in an override,
and the invariants no longer say extraSshOptions refuses a bare $ (it never did).

Reworded the em-dashes on the invariants line this rewrites.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer committed 2026-11-06 02:39:42 +01:00
1 parent bf6457e488
commit a8688f14a0
8 files changed
+41 -21

No files matched your search

+3 -6
View File
@@ -129,22 +129,19 @@ describe('remote-hosts domain', () => {
describe('per-mode command overrides', () => {
const modes = ['shell', ...listClis().map((cli) => cli.id)];
const host = { id: 'h', label: 'H', host: '10.0.0.1', username: 'u' };
// `.strict()` refuses an unknown key, so a mode missing here cannot take an override, and
// `commands.*` is the documented way out for a login shell the stock launch cannot run.
it.each(modes)('accepts a %s override on a remote host and a docker host', (mode) => {
const commands = { [mode]: 'exec my-agent' };
const remote = { id: 'h', label: 'H', host: '10.0.0.1', username: 'u', commands };
const docker = { id: 'h', label: 'H', image: 'codeman/agent:base', commands };
expect(RemoteHostSchema.safeParse(remote).success).toBe(true);
expect(RemoteHostSchema.safeParse({ ...host, commands }).success).toBe(true);
expect(DockerHostSchema.safeParse(docker).success).toBe(true);
});
it('still refuses a key that is no mode', () => {
const commands = { nope: 'exec my-agent' };
expect(RemoteHostSchema.safeParse({ id: 'h', label: 'H', host: '10.0.0.1', username: 'u', commands }).success).toBe(
false
);
expect(RemoteHostSchema.safeParse({ ...host, commands: { nope: 'exec my-agent' } }).success).toBe(false);
});
});