{"record":{"id":"df0ef1dc287a121d","repo":"Fission-AI/OpenSpec","slug":"cannot-resolve-artifact-outputs-through-a-linked-d","errorCode":null,"errorMessage":"Cannot resolve artifact outputs through a linked directory cycle: ${currentDir}","messagePattern":"Cannot resolve artifact outputs through a linked directory cycle: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/core/artifact-graph/outputs.ts","lineNumber":41,"sourceCode":"  FileSystemUtils.assertPathWithin(changeDir, outputPath);\n  return outputPath;\n}\n\nfunction assertGlobDirectoryTraversal(\n  changeDir: string,\n  currentDir: string,\n  directorySegments: string[],\n  segmentIndex = 0,\n  visited = new Set<string>(),\n  canonicalChangeDir = FileSystemUtils.canonicalizeExistingPath(changeDir),\n  ancestors = new Set<string>()\n): void {\n  if (segmentIndex >= directorySegments.length) return;\n  const canonicalDir = FileSystemUtils.canonicalizeExistingPath(currentDir);\n  FileSystemUtils.assertPathWithin(canonicalChangeDir, canonicalDir);\n  const visitKey = `${canonicalDir}\\0${segmentIndex}`;\n  if (ancestors.has(visitKey)) {\n    throw new Error(`Cannot resolve artifact outputs through a linked directory cycle: ${currentDir}`);\n  }\n  if (visited.has(visitKey)) return;\n  visited.add(visitKey);\n  ancestors.add(visitKey);\n\n  try {\n    const segment = directorySegments[segmentIndex];\n    if (segment === '**') {\n      // `**` may consume no directory at all.\n      assertGlobDirectoryTraversal(\n        changeDir,\n        canonicalDir,\n        directorySegments,\n        segmentIndex + 1,\n        visited,\n        canonicalChangeDir,\n        ancestors\n      );","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/core/artifact-graph/outputs.ts#L23-L59","documentation":"Error \"Cannot resolve artifact outputs through a linked directory cycle: ${currentDir}\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/core/artifact-graph/outputs.ts:41 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"}