spec-pack-abandon
SKILL.md
spec-pack-abandon(废弃/撤销 Spec Pack:清单 + 二次确认 + 删除分支)
概览
当需求出现重大问题需要“废弃当前 spec pack”时,本技能用于安全地撤销:先执行 spec-context 获取上下文并精确定位 {FEATURE_DIR},再生成“将要删除的内容清单”,并在执行任何破坏性操作前要求用户二次确认;最后删除本地/远程分支,并清理工作区中残留的 spec pack 目录。
开始时宣布:「我正在使用 spec-pack-abandon 技能废弃当前 Spec Pack(输出删除清单并二次确认后删除目录与分支)。」
何时使用 / 不使用
- 使用时机
- 需求/约束出现重大问题,决定废弃当前 spec pack(不再继续澄清/设计/实现)。
- 你需要删除:
.aisdlc/specs/{CURRENT_BRANCH}/以及该{CURRENT_BRANCH}分支(本地 + 远程)。
- 不要用在
- 你只是想“回退某个提交”或“重做需求文档”:优先用正常 git 回退/新提交,而不是删分支。
- 当前不在 spec 分支(分支名不符合
{num}-{short-name}):先切到目标 spec 分支再说;否则停止。
硬规则(必须遵守)
- REQUIRED SUB-SKILL:正在执行
spec-context获取上下文,并在对话中回显FEATURE_DIR=...(允许(reuse))。 - 禁止猜路径/猜分支:只能使用
Get-SpecContext的CURRENT_BRANCH与FEATURE_DIR。 - 必须输出删除清单:在任何删除命令前,先输出“将要删除的内容清单”(目录/分支/远程分支存在性/未提交更改概览)。
- 必须二次确认:
- 第一次确认:用户确认“删除清单无误”。
- 第二次确认:用户确认“即将执行的具体删除命令无误”。
- 两次确认都必须要求用户回复精确短语(见下文)。
- 禁止默认丢弃整个工作区:不得建议/执行
git clean -fd这类“全盘清空”命令来图省事。 - 遇到任何验证失败就停止:不得继续给出“直接删”的命令。
删除清单生成(PowerShell)
本段只用于生成清单与风险提示,不执行删除。
. (Join-Path (git rev-parse --show-toplevel) "skills\spec-context\scripts\spec-common.ps1")
$context = Get-SpecContext -SkillName "spec-pack-abandon"
$FEATURE_DIR = $context.FEATURE_DIR
Write-Host ("FEATURE_DIR={0}" -f $FEATURE_DIR)
Write-Host ("CURRENT_BRANCH={0}" -f $context.CURRENT_BRANCH)
$repoRoot = $context.REPO_ROOT
$branch = $context.CURRENT_BRANCH
$featureDir = $context.FEATURE_DIR
$demoDir = Join-Path $repoRoot ("demo\prototypes\{0}" -f $branch)
$hasRemote = $false
git ls-remote --exit-code --heads origin $branch *> $null
if ($LASTEXITCODE -eq 0) { $hasRemote = $true }
$dirty = git status --porcelain
$aheadBehind = git rev-list --left-right --count ("origin/{0}...{0}" -f $branch) 2>$null
Write-Host "=== 删除清单(待确认)==="
Write-Host ("REPO_ROOT: {0}" -f $repoRoot)
Write-Host ("CURRENT_BRANCH(将删除): {0}" -f $branch)
Write-Host ("FEATURE_DIR(将删除/清理): {0}" -f $featureDir)
Write-Host ("demo/prototypes(如存在将删除/清理): {0}" -f $demoDir)
Write-Host ("远程分支 origin/{0} 是否存在: {1}" -f $branch, $hasRemote)
Write-Host ""
Write-Host "=== 工作区风险提示 ==="
if ($dirty) {
Write-Host "检测到未提交更改(将随分支删除而丢失)。git status --porcelain:"
$dirty | ForEach-Object { Write-Host (" {0}" -f $_) }
} else {
Write-Host "未检测到未提交更改。"
}
if ($aheadBehind) {
Write-Host ("与 origin/{0} 的 ahead/behind 计数(若分支未 push 可能为空/报错): {1}" -f $branch, $aheadBehind)
}
第一次确认(必须)
把上面生成的“删除清单”原样展示给用户,然后要求用户回复以下精确短语:
- 第一次确认短语:
确认删除清单
若用户未明确回复该短语(或提出任何疑问/修改),停止,先修正清单再继续。
删除命令准备(只在第一次确认后展示)
本段仍然不执行删除;仅把“将要执行的命令”完整列出来作为第二次确认对象。
. (Join-Path (git rev-parse --show-toplevel) "skills\spec-context\scripts\spec-common.ps1")
$context = Get-SpecContext -SkillName "spec-pack-abandon"
$branch = $context.CURRENT_BRANCH
$featureDir = $context.FEATURE_DIR
$repoRoot = $context.REPO_ROOT
$demoDir = Join-Path $repoRoot ("demo\prototypes\{0}" -f $branch)
$hasRemote = $false
git ls-remote --exit-code --heads origin $branch *> $null
if ($LASTEXITCODE -eq 0) { $hasRemote = $true }
@"
【将要执行的删除命令(待最终确认)】
1) 切到 main(避免在被删分支上删除)
git switch main
git pull
2) 清理本地残留目录(若存在)
if (Test-Path -LiteralPath `"$featureDir`") { Remove-Item -LiteralPath `"$featureDir`" -Recurse -Force }
if (Test-Path -LiteralPath `"$demoDir`") { Remove-Item -LiteralPath `"$demoDir`" -Recurse -Force }
3) 删除本地分支
git branch -D $branch
4) 删除远程分支(若存在)
"@ | Write-Host
if ($hasRemote) {
Write-Host ("git push origin --delete {0}" -f $branch)
} else {
Write-Host ("(跳过远程删除:未检测到 origin/{0})" -f $branch)
}
第二次确认(必须)
要求用户在看到“将要执行的删除命令”后,回复以下精确短语:
- 第二次确认短语:
最终确认执行删除
未收到该短语前,禁止执行任何删除动作。
执行删除(只在二次确认后)
按“删除命令准备”里展示的命令执行即可。执行后做最小验收:
git branch --list $branch
git branch -r | Select-String ("origin/{0}" -f $branch)
Test-Path -LiteralPath $featureDir
期望:
git branch --list $branch无输出- 远程分支查询无匹配(若你执行了远程删除)
Test-Path $featureDir为False
常见错误(出现即按硬规则停止)
- 跳过
spec-context:用“看目录/看打开文件/猜分支名”的方式拼路径。 - 不出清单就删:直接给
git branch -D/git push --delete/Remove-Item。 - 只确认一次:用户说“删吧”不等于完成二次确认门禁。
- 用
git clean -fd清空仓库:这是全盘删除,极易误伤非 spec pack 文件。 - 删 main / 删错误分支:任何分支名与
Get-SpecContext.CURRENT_BRANCH不一致都必须停止。
Weekly Installs
60
Repository
zixun-github/aisdlcGitHub Stars
1
First Seen
Feb 27, 2026
Security Audits
Installed on
claude-code59
cursor58
gemini-cli13
github-copilot13
codex13
kimi-cli13