From 4686abd6bcff4c35e777f9e8441e9256b90d55bf Mon Sep 17 00:00:00 2001 From: davekilleen Date: Thu, 6 Aug 2026 16:52:20 +0000 Subject: [PATCH] fix(install): tell users which folder to open their chat app in MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The one-line installer is documented as a Terminal command, so the "Next steps" block is read by someone with no chat app open yet. It said "In Claude Code chat, type: /setup" without saying where to open Claude Code — and opening it somewhere other than the folder you just installed into is the mistake people actually make. Adds one step naming the folder. App detection itself is unchanged. Tests gain a chat_app shim so the detected-app path can be exercised, plus assertions that detection names one app only and never leaks the other. --- core/tests/test_install_convergence.py | 32 ++++++++++++++++++++++++-- install.sh | 8 ++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/core/tests/test_install_convergence.py b/core/tests/test_install_convergence.py index e2b1551db..804774e44 100644 --- a/core/tests/test_install_convergence.py +++ b/core/tests/test_install_convergence.py @@ -16,7 +16,11 @@ def _write_executable(path: Path, content: str) -> None: path.chmod(0o755) -def _install_fixture(tmp_path: Path, scenario: str) -> tuple[Path, dict[str, str]]: +def _install_fixture( + tmp_path: Path, + scenario: str, + chat_app: str | None = None, +) -> tuple[Path, dict[str, str]]: root = tmp_path / "dex-install" root.mkdir() shutil.copy2(REPO_ROOT / "install.sh", root / "install.sh") @@ -88,6 +92,8 @@ def _install_fixture(tmp_path: Path, scenario: str) -> tuple[Path, dict[str, str for command in ("npm", "npx"): _write_executable(shim_dir / command, "#!/bin/sh\nexit 0\n") _write_executable(shim_dir / "xcode-select", "#!/bin/sh\nexit 0\n") + if chat_app is not None: + _write_executable(shim_dir / chat_app, "#!/bin/sh\nexit 0\n") environment = os.environ.copy() environment.update( @@ -105,8 +111,9 @@ def _run_install( tmp_path: Path, scenario: str, *arguments: str, + chat_app: str | None = None, ) -> tuple[subprocess.CompletedProcess[str], list[str]]: - root, environment = _install_fixture(tmp_path, scenario) + root, environment = _install_fixture(tmp_path, scenario, chat_app) result = subprocess.run( ["/bin/bash", "install.sh", *arguments], cwd=root, @@ -174,3 +181,24 @@ def test_migration_failure_stops_install_with_plain_english_recovery(tmp_path: P assert "could not finish the brain/vault split" in result.stdout assert "migration-report-v2.md" in result.stdout assert "Dex installation complete" not in result.stdout + + +def test_install_points_claude_code_users_at_the_install_folder(tmp_path: Path) -> None: + result, _ = _run_install(tmp_path, "zip", chat_app="claude") + + assert result.returncode == 0, result.stdout + result.stderr + assert "Open Claude Code in this folder" in result.stdout + assert "the folder you just installed into" in result.stdout + assert "In Claude Code chat, type: /setup" in result.stdout + # Detection must name one app only, never leak the other. + assert "In Cursor chat, type: /setup" not in result.stdout + + +def test_install_points_cursor_users_at_the_install_folder(tmp_path: Path) -> None: + result, _ = _run_install(tmp_path, "zip", chat_app="cursor") + + assert result.returncode == 0, result.stdout + result.stderr + assert "Open Cursor in this folder" in result.stdout + assert "the folder you just installed into" in result.stdout + assert "In Cursor chat, type: /setup" in result.stdout + assert "In Claude Code chat, type: /setup" not in result.stdout diff --git a/install.sh b/install.sh index 5fed86319..586cbaa5f 100755 --- a/install.sh +++ b/install.sh @@ -333,7 +333,9 @@ if [[ "$WORK_MCP_STATUS" == *"Needs"* ]]; then fi echo "" echo "Next steps:" -echo " 1. In $DEX_CHAT_APP chat, type: /setup" -echo " 2. Answer the setup questions (~5 minutes)" -echo " 3. Start using Dex!" +echo " 1. Open $DEX_CHAT_APP in this folder" +echo " (the folder you just installed into — not somewhere else)" +echo " 2. In $DEX_CHAT_APP chat, type: /setup" +echo " 3. Answer the setup questions (~5 minutes)" +echo " 4. Start using Dex!" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"