From 8db722842f11fc8c3f5e462c7cf26d01ee4a8209 Mon Sep 17 00:00:00 2001 From: Ali jawwad <33836051+jawwad-ali@users.noreply.github.com> Date: Wed, 22 Jul 2026 19:00:23 +0500 Subject: [PATCH] fix(scripts): git-ext PowerShell emits the '# To persist' SPECIFY_FEATURE hint (parity) (#3632) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(scripts): git-ext PowerShell emits the '# To persist' SPECIFY_FEATURE hint (parity) The Git extension's create-new-feature-branch.ps1 printed a non-JSON hint 'SPECIFY_FEATURE environment variable set to: ', diverging from every twin: the bash (create-new-feature-branch.sh) and python (create_new_feature_branch.py) siblings of the same extension, and the core create-new-feature.ps1, all emit '# To persist in your shell: $env:SPECIFY_FEATURE = '''. The old wording is also misleading — $env:SPECIFY_FEATURE is set only in this child process and never reaches the agent's shell, so the actionable output is the persist hint. Mirror the core PS twin's $featureAssignment construction and message. Test (pwsh CI): the non-JSON output uses the '# To persist in your shell:' form (fails before: old wording). Verified end-to-end via powershell.exe. Co-Authored-By: Claude Opus 4.8 (1M context) * docs(test): fix doubled apostrophe in persist-hint test docstring Address review: the docstring rendered the documented output form as ''' (two trailing apostrophes) instead of ''. Docstring-only; the assertions were already correct. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.8 (1M context) --------- Co-authored-by: Claude Opus 4.8 (1M context) --- .../powershell/create-new-feature-branch.ps1 | 8 +++++++- tests/extensions/git/test_git_extension.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/extensions/git/scripts/powershell/create-new-feature-branch.ps1 b/extensions/git/scripts/powershell/create-new-feature-branch.ps1 index 1536f9a2b..2d6f2bcfe 100644 --- a/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +++ b/extensions/git/scripts/powershell/create-new-feature-branch.ps1 @@ -565,6 +565,12 @@ if (-not $DryRun) { $env:SPECIFY_FEATURE = $branchName } +# Build the PowerShell-idiomatic persist hint, mirroring the core +# create-new-feature.ps1 twin (and the bash/python twins of this script), which +# all emit "# To persist in your shell: ...". +$quotedBranchName = "'" + $branchName.Replace("'", "''") + "'" +$featureAssignment = '$env:SPECIFY_FEATURE = ' + $quotedBranchName + if ($Json) { $obj = [PSCustomObject]@{ BRANCH_NAME = $branchName @@ -581,6 +587,6 @@ if ($Json) { Write-Output "BRANCH_NAME: $branchName" Write-Output "FEATURE_NUM: $featureNum" if (-not $DryRun) { - Write-Output "SPECIFY_FEATURE environment variable set to: $branchName" + Write-Output "# To persist in your shell: $featureAssignment" } } diff --git a/tests/extensions/git/test_git_extension.py b/tests/extensions/git/test_git_extension.py index 79acfcb79..1354af394 100644 --- a/tests/extensions/git/test_git_extension.py +++ b/tests/extensions/git/test_git_extension.py @@ -698,6 +698,22 @@ class TestCreateFeaturePowerShell: assert rt.returncode == 0, rt.stderr assert "HAS_GIT" not in rt.stdout + def test_persist_hint_matches_twins(self, tmp_path: Path): + """The non-JSON SPECIFY_FEATURE hint must use the '# To persist in your + shell: $env:SPECIFY_FEATURE = '' form — matching the core + create-new-feature.ps1 twin and the bash/python twins of this script — + not the old 'environment variable set to:' wording (the env var is only + set in this child process, so the actionable output is the persist hint).""" + project = _setup_project(tmp_path) + result = _run_pwsh( + "create-new-feature-branch.ps1", project, + "-ShortName", "persist", "Persist hint feature", + ) + assert result.returncode == 0, result.stderr + assert "# To persist in your shell:" in result.stdout + assert "$env:SPECIFY_FEATURE = '001-persist'" in result.stdout + assert "environment variable set to:" not in result.stdout + def test_help_documents_branch_prefix(self, tmp_path: Path): """-Help documents both template config knobs.""" project = _setup_project(tmp_path)