{"record":{"id":"62a8e6fe3648af27","repo":"github/spec-kit","slug":"refusing-to-use-symlinked-workflow-install-lock","errorCode":null,"errorMessage":"Refusing to use symlinked workflow install lock: {lock_file}","messagePattern":"Refusing to use symlinked workflow install lock: (.+?)","errorType":"exception","errorClass":"OSError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/workflows/_commands.py","lineNumber":687,"sourceCode":"    assert staged_file is not None\n    return _StagedWorkflowFile(staged_file, fd)\n\n\n@contextlib.contextmanager\ndef _workflow_install_transaction(project_root: Path):\n    \"\"\"Serialize workflow file swaps with their registry updates.\"\"\"\n    from ..shared_infra import _ensure_safe_shared_directory\n\n    lock_dir = project_root / \".specify\"\n    try:\n        _ensure_safe_shared_directory(\n            project_root, lock_dir, context=\"workflow install lock directory\"\n        )\n    except ValueError as exc:\n        raise OSError(str(exc)) from exc\n    lock_file = lock_dir / \".workflow-install.lock\"\n    if lock_file.is_symlink():\n        raise OSError(f\"Refusing to use symlinked workflow install lock: {lock_file}\")\n\n    flags = os.O_RDWR | os.O_CREAT\n    flags |= getattr(os, \"O_NOFOLLOW\", 0)\n    flags |= getattr(os, \"O_CLOEXEC\", 0)\n    fd = os.open(lock_file, flags, 0o600)\n    try:\n        if lock_file.is_symlink():\n            raise OSError(\n                f\"Refusing to use symlinked workflow install lock: {lock_file}\"\n            )\n        if os.name == \"nt\":\n            import errno\n            import msvcrt\n            import time\n\n            if os.fstat(fd).st_size == 0:\n                os.write(fd, b\"\\0\")\n            while True:","sourceCodeStart":669,"sourceCodeEnd":705,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/workflows/_commands.py#L669-L705","documentation":"Error \"Refusing to use symlinked workflow install lock: {lock_file}\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/workflows/_commands.py:687 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the symlinked workflow install lock file and retry."],"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"}