apps/vscode/src/command-relay.ts:78 describes the relay's workspace-scope guard as inert:
// Workspace scope: a single Tower may serve several workspaces, so drop a
// command addressed to a different one. Only enforced when the command carries
// a workspace AND this window knows its own (mirrors builder-spawn-handler);
// absent today, so this is a no-op until a controller populates it.
That last clause is no longer true. Verified against the current tree:
TowerClient.sendCommand(verb, args, workspace) sets body.workspace whenever a workspace is passed (packages/sdk/src/tower-client.ts:919-923).
- Every Stream Deck call site passes one:
actions.ts:57, :149, :235, :277 all call sendCommand(..., this.store.selectedWorkspacePath()).
So the guard is live — in a multi-workspace Tower it is actively dropping relayed commands addressed elsewhere, which is exactly the behavior it was written for.
Why this is worth a one-line fix rather than nothing: the comment tells a future reader that the branch beneath it does nothing, which is an invitation to simplify away a working safety check. A stale "this is a no-op" is more dangerous than no comment at all.
Scope is one comment, no behavior change, no test change. Too small for its own lane — it should ride the next PR that touches command-relay.ts (the relay-verb work in that file is active, so one should come along shortly). Filed only so it is not lost.
Found by the streamdeck architect while source-verifying documentation claims for #1390 / PR #1452, and passed to this lane rather than folded into a docs-only PR.
apps/vscode/src/command-relay.ts:78describes the relay's workspace-scope guard as inert:That last clause is no longer true. Verified against the current tree:
TowerClient.sendCommand(verb, args, workspace)setsbody.workspacewhenever a workspace is passed (packages/sdk/src/tower-client.ts:919-923).actions.ts:57,:149,:235,:277all callsendCommand(..., this.store.selectedWorkspacePath()).So the guard is live — in a multi-workspace Tower it is actively dropping relayed commands addressed elsewhere, which is exactly the behavior it was written for.
Why this is worth a one-line fix rather than nothing: the comment tells a future reader that the branch beneath it does nothing, which is an invitation to simplify away a working safety check. A stale "this is a no-op" is more dangerous than no comment at all.
Scope is one comment, no behavior change, no test change. Too small for its own lane — it should ride the next PR that touches
command-relay.ts(the relay-verb work in that file is active, so one should come along shortly). Filed only so it is not lost.Found by the streamdeck architect while source-verifying documentation claims for #1390 / PR #1452, and passed to this lane rather than folded into a docs-only PR.