.claude/skills/review-option-interaction/SKILL.md
Test combinatorial interactions between install options, launch modes, and user journeys
npx skillsauth add cwilliams5/Alt-Tabby review-option-interactionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Enter planning mode. Deep-research all interactions between installation options, launch modes, admin state, and user journeys. Think carefully about every path a user could take. Use maximum parallelism — spawn an agent team if desired.
The app has many options, features, and launch modes that interact combinatorially. Past reviews have repeatedly found edge-case bugs where one option conflicts with another or a UAC refusal leaves the system in a half-applied state. The combinatorial space is large and keeps growing.
Before testing combinations, build a current inventory by reading the code. These categories have historically caused interactions, but the code is the source of truth — discover what exists now, don't assume this list is complete:
User-facing options:
Features with interaction surfaces:
--gui-only, --config, --wizard-continue, --enable-admin-task, etc.)Confounding factors (things users do that the code must handle):
For each pair/group of options, trace the user journey through the code. Use query_callchain.ps1 to follow how config option reads flow through functions across files. Use query_ipc.ps1 to check cross-process message flows that can trigger option interactions. Use query_function_visibility.ps1 <funcName> to find all callers of elevation/UAC functions. Use query_global_ownership.ps1 <globalName> to trace install state ownership across files:
Focus on state transitions that span multiple steps — wizard → install → create task → relaunch. If any step fails, is the state recoverable? Does the next launch detect the partial state correctly?
These are intentional — do not propose changing them:
Issues around or caused by these choices (e.g., "what if the user renames the installed exe and then auto-update tries to find it") are real findings. The design choices themselves are not.
Multiple bugs in these flows have come from duplicated logic across files. After identifying bugs, also look for:
DRY findings are secondary to bug findings but help prevent future regressions.
After explore agents report back, validate every finding yourself. These flows have a lot of defensive code that may look like bugs but is handling edge cases intentionally.
For each candidate:
file.ahk lines X–Y" with actual code quoted. Trace the full path through multiple files if the journey spans them.Section 1 — Interaction bugs (specific failure paths):
| Journey | Steps | Failure Point | File:Lines | Impact | Fix |
|---------|-------|--------------|-----------|--------|-----|
| Install → rename exe → update check | 1. Install to PF 2. User renames exe 3. Auto-update downloads | Update writes to hardcoded name, old renamed exe orphaned | update.ahk:142 | Stale exe left behind | Check actual exe name, not hardcoded |
Section 2 — UAC refusal gaps (what happens when elevation is denied):
| Operation | UAC Point | Behavior if Refused | Clean? | Fix if Needed | |-----------|----------|-------------------|--------|--------------| | Enable admin mode | Task creation | Falls back to non-admin | Yes | None | | Install to PF | File copy | ??? | ??? | ??? |
Section 3 — DRY consolidation opportunities:
| Pattern | Files | Variations | Proposed Consolidation |
|---------|-------|-----------|----------------------|
| "Is installed to PF?" check | launcher_main.ahk:30, update.ahk:55, wizard.ahk:80 | Slightly different path comparisons | Shared IsInstalledToProgramFiles() helper |
Order by severity: data-loss risks first, cosmetic inconsistencies last.
Ignore any existing plans — create a fresh one.
tools
Create a new git worktree and switch the session into it
tools
Spawn agent to trace code flow via query tools — answer only, no context cost
tools
Commit, push, and create a PR for the current branch
tools
Retire a shader by moving its files to legacy/shaders_retired