spec-pack-abandon
npx skills add https://github.com/zixun-github/aisdlc --skill spec-pack-abandon
Agent 安装分布
Skill 文档
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
$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
$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ä¸ä¸è´é½å¿ 须忢ã