Skip to content

fix(signals-dashboard): refuse ';' desk paths on Windows and keep stash reads read-only - #23

Merged
jennyf19 merged 2 commits into
mainfrom
review-launch-and-stash-fixes
Nov 9, 2026
Merged

jennyf19 merged 2 commits into
mainfrom
review-launch-and-stash-fixes

Conversation

@jennyf19

@jennyf19 jennyf19 commented Nov 9, 2026

Copy link
Copy Markdown
Owner

Mirrors the review fixes on github/awesome-copilot#6302, one commit each:

  • Windows Terminal launch: Windows Terminal reads every ; on its command line as a command separator, even inside an argument (Non-standard command line parsing misinterprets semicolons inside arguments microsoft/terminal#13264), so a desk under a group folder such as a;b-desks/ could make wt -d <path> start a second command. The launcher now refuses to launch when any Windows Terminal argument holds ; (this also covers a workshop path with one), and the canvas falls back to copying the path, as it does for unsafe desk names.
  • Stash reads: readStash runs outside withStashLock but wrote its normalized list back after awaiting filesystem checks, so a refresh that overlapped a restore could stash the restored desk again. Reads no longer write; only the locked stash and restore paths persist the list.

Tests: 34 of 34. The new race test fails without its fix. This copy's test harness doesn't stub process launches, so the launch regression test lives in the awesome-copilot copy.

Jenny Ferries and others added 2 commits November 8, 2026 17:53
…indows Terminal

Windows Terminal reads every ';' on its command line as a command
separator, even inside an argument (microsoft/terminal#13264). Group
folder names only pass the path-traversal check, so a desk under a
folder such as a;b-desks/ could make `wt -d <path>` start a second
command. The shared launcher now refuses to launch when any Windows
Terminal argument holds ';', which also covers a workshop path with one,
and the caller falls back to copying the path, as it already does for
unsafe desk names. Discovery is unchanged.

This copy's test harness doesn't stub process launches, so the launch
regression test lives in the github/awesome-copilot copy.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 23af3266-c56b-4f37-a967-a13587283c2b
…t restore

Page loads and the refresh action read the stash outside withStashLock,
but readStash wrote its normalized list back after awaiting filesystem
checks. A refresh that overlapped a restore could write its older
snapshot last and stash the restored desk again. Reads no longer write:
each read still drops expired entries and normalizes name-only ones, and
only the locked stash and restore paths persist the list.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 23af3266-c56b-4f37-a967-a13587283c2b
@jennyf19
jennyf19 merged commit 44a02bb into main Nov 9, 2026
1 check passed
@jennyf19
jennyf19 deleted the review-launch-and-stash-fixes branch November 9, 2026 02:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant