{"record":{"id":"2f8fd3073481bb4f","repo":"github/spec-kit","slug":"skill-rollback-backup-is-missing-for-original-pa","errorCode":null,"errorMessage":"Skill rollback backup is missing for '{original_path}'","messagePattern":"Skill rollback backup is missing for '(.+?)'","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/_commands.py","lineNumber":2393,"sourceCode":"                    # ownership metadata, which the normal conservative\n                    # unregistrar intentionally refuses to delete. Paths that\n                    # were absent at the destructive boundary are safe to\n                    # remove directly during rollback.\n                    for skill_path in new_skill_paths_absent_before_update:\n                        if skill_path.is_symlink() or skill_path.is_file():\n                            skill_path.unlink()\n                        elif skill_path.exists():\n                            shutil.rmtree(skill_path)\n                    manager._unregister_extension_skills(\n                        skills_to_remove, extension_id\n                    )\n\n                    # Restore all original registered skill artifacts after\n                    # removing skills created by the failed installation.\n                    for original_path, backup_path in backed_up_skill_dirs.items():\n                        backup_skill_dir = Path(backup_path)\n                        if not backup_skill_dir.is_dir():\n                            raise RuntimeError(\n                                \"Skill rollback backup is missing for \"\n                                f\"'{original_path}'\"\n                            )\n                        original_skill_dir = Path(original_path)\n                        if (\n                            original_skill_dir.is_symlink()\n                            or original_skill_dir.is_file()\n                        ):\n                            original_skill_dir.unlink()\n                        elif original_skill_dir.exists():\n                            shutil.rmtree(original_skill_dir)\n                        original_skill_dir.parent.mkdir(parents=True, exist_ok=True)\n                        shutil.copytree(\n                            backup_skill_dir,\n                            original_skill_dir,\n                            symlinks=True,\n                        )\n","sourceCodeStart":2375,"sourceCodeEnd":2411,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/_commands.py#L2375-L2411","documentation":"Error \"Skill rollback backup is missing for '{original_path}'\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/_commands.py:2393 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restore the missing rollback backup for the skill path, or reinstall the extension."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}