fix(init): keep user files in legacy command folders (#1874)
* fix(init): keep user files in legacy command folders Legacy cleanup removed each pre-skills tool's <tool>/commands/openspec/ folder recursively whenever it existed, deleting any command the user kept there along with OpenSpec's three files. init runs that cleanup unprompted when there is no TTY, so agents and CI lost those files without --force. Directory entries now name the files OpenSpec wrote there. Cleanup deletes only those, removes the folder only once nothing else is left in it, and reports each entry it kept. A folder holding none of OpenSpec's files is no longer treated as legacy, and a folder holding only them is removed exactly as before. * docs: drop legacy migration-guide edit from legacy cleanup fix docs/ is legacy; the canonical docs-lab page (help/legacy/migration.md) is still a skeleton, so there is nothing to update there yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(init): recognize legacy command files by their OpenSpec markers Legacy cleanup treated any regular file named proposal/apply/archive in a <tool>/commands/openspec/ folder as OpenSpec's, so a user-authored file with one of those names, including one swapped in while the upgrade prompt waited, was still deleted. Every legacy slash command was generated with the OpenSpec markers, and OpenSpec refused to update one without them. A file now counts as OpenSpec's only when its content still carries them, and cleanup checks that again immediately before each unlink. A symlinked command folder is never followed. Test fixtures now use marker-wrapped content like the real generated files. Closes #1873 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(init): recheck each legacy command file before the directory cleanup deletes it The directory cleanup loop classified a folder's managed files once and then unlinked every one of them. A file the user swapped in after that scan was deleted and reported as deleted. Each file is now checked for the OpenSpec markers immediately before its unlink; a file that fails the check is kept and reported as kept. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Clay Good <hi@claygood.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
D
Dwin Gharibi committed
388d34473a40529320b2b7b9c5bb6723d18322b0
Parent: 2ef6fbd
Committed by GitHub <noreply@github.com>
on 9/16/2026, 3:47:41 PM