Skip to content

Roadmap quick wins: Spaces guards, fuzzy-match fix, dead code removal, CI#14

Merged
jamesagarside merged 1 commit into
mainfrom
cleanup/roadmap-quick-wins
Jul 5, 2026
Merged

Roadmap quick wins: Spaces guards, fuzzy-match fix, dead code removal, CI#14
jamesagarside merged 1 commit into
mainfrom
cleanup/roadmap-quick-wins

Conversation

@jamesagarside

Copy link
Copy Markdown
Owner

Summary

Lands the small remaining items from the roadmap (#4):

v0.7 reliability items

  • Every hs.spaces call is pcall-guarded (private macOS APIs); failed Space moves are counted and shown in the restore alert instead of aborting the restore
  • Fuzzy-match edge case fixed: titles that normalize to empty no longer score 0.9 against everything — they fall through to app slotting (tests added)

v0.8 items

  • Disabled drag-to-edge watcher removed (would have maximized the focused window on any near-edge mouse-up)
  • Redundant setMenu in setAutoRestoreMode removed — the menubar-rebuild leak flagged in Settings snapshot: load once instead of a disk read per call #9
  • Cycle-snap uses hs.timer.secondsSinceEpoch() so the 2s window is real
  • URL handler / switchProfile validates profile names — a Stream Deck typo can't activate an empty profile
  • CI: GitHub Actions runs luac -p + the plain-Lua suite (59 tests) on every push/PR; no untrusted event inputs in the workflow

Still open on #4 after this: stable UUID display keys (the big v0.7 item, blocks #3), cross-Space capture verification, Spoon API conventions, docs.json, atomic writes, luacheck/StyLua in CI, community scaffolding, v1.0 launch items.

Testing

  • lua tests/run.lua: 59 passed, 0 failed
  • luac -p clean

https://claude.ai/code/session_018YxEAK2gUQySh3EUW9crDW

…code removal, CI

Closes out the small v0.7/v0.8 items from the roadmap (#4):

- Guard every hs.spaces call with pcall (private macOS APIs that can
  throw on Sonoma/Sequoia); failed Space moves are counted and surfaced
  in the restore alert instead of aborting the restore
- Fuzzy matching: titles that normalize to empty ('14:32', '(3)') no
  longer substring-match anything at 0.9 and steal windows — empty means
  no signal; such windows fall through to app slotting (2 new tests)
- switchProfile validates the name exists, so a Stream Deck URL typo
  can't activate a brand-new empty profile
- Remove the disabled drag-to-edge watcher (as written, any mouse-up
  near an edge would have maximized the focused window)
- Remove the redundant setMenu in setAutoRestoreMode (menu is already
  dynamic via the builder function) — the last piece of #9
- Cycle-snap clock: os.time() → hs.timer.secondsSinceEpoch(), so the 2s
  cycle window is actually 2s rather than 1-3s
- CI: GitHub Actions workflow running luac -p + the plain-Lua suite on
  every push/PR (59 tests)

Claude-Session: https://claude.ai/code/session_018YxEAK2gUQySh3EUW9crDW
@jamesagarside jamesagarside merged commit 76c4285 into main Jul 5, 2026
1 check passed
@jamesagarside jamesagarside deleted the cleanup/roadmap-quick-wins branch July 5, 2026 17:36
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