{"record":{"id":"cb4844d6ed4d9c8a","repo":"Fission-AI/OpenSpec","slug":"archive-change-symlink","errorCode":"archive_change_symlink","errorMessage":"Change '${changeName}' is a symbolic link. Replace it with a real directory before archiving.","messagePattern":"Change '(.+?)' is a symbolic link\\. Replace it with a real directory before archiving\\.","errorType":"exception","errorClass":"ArchiveBlockedError","httpStatus":null,"severity":"error","filePath":"src/core/archive.ts","lineNumber":1161,"sourceCode":"      if (!selectedChange) {\n        console.log('No change selected. Aborting.');\n        return null;\n      }\n      changeName = selectedChange;\n    }\n\n    const changeNameProblem = folderStyleNameProblem(changeName, 'Change name');\n    if (changeNameProblem) {\n      throw new ArchiveBlockedError('archive_change_name_invalid', changeNameProblem);\n    }\n\n    const changeDir = path.join(changesDir, changeName);\n\n    // Verify change exists\n    try {\n      const stat = await fs.lstat(changeDir);\n      if (stat.isSymbolicLink()) {\n        throw new ArchiveBlockedError(\n          'archive_change_symlink',\n          `Change '${changeName}' is a symbolic link. Replace it with a real directory before archiving.`\n        );\n      }\n      if (!stat.isDirectory()) {\n        throw new Error(`Change '${changeName}' not found.`);\n      }\n    } catch (error) {\n      if (error instanceof ArchiveBlockedError) throw error;\n      const available = await listActiveChangeNames(changesDir);\n      throw new ArchiveBlockedError(\n        'archive_change_not_found',\n        available.length > 0\n          ? `Change '${changeName}' not found. Available changes: ${available.join(', ')}`\n          : `Change '${changeName}' not found. No active changes exist in this root.`\n      );\n    }\n","sourceCodeStart":1143,"sourceCodeEnd":1179,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/core/archive.ts#L1143-L1179","documentation":"Error \"Change '${changeName}' is a symbolic link. Replace it with a real directory before archiving.\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/core/archive.ts:1161 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6926ccb18afa4ff621112813e9968334576ee11a","analyzedAt":"2026-08-25T12:29:45.729Z","schemaVersion":2},"datasetVersion":"2026-08-25T16:17:27.014Z"}