{"record":{"id":"2185e6ff81f6d283","repo":"deepseek-ai/deepseek-harness","slug":"skill-entry-fullpath-ignored-failed-to-follow","errorCode":null,"errorMessage":"skill entry ${fullPath} ignored: failed to follow symbolic link: ${errorMessage(error)}","messagePattern":"skill entry (.+?) ignored: failed to follow symbolic link: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/skill/skill-filesystem/src/index.ts","lineNumber":904,"sourceCode":"\nfunction fsReadErrorMessage(target: FsTarget, error: unknown): string {\n  return `failed to read text file at ${target.displayPath}: ${errorMessage(error)}`\n}\n\nasync function nodeEntryKind(fullPath: string, entry: { isDirectory(): boolean; isFile(): boolean; isSymbolicLink(): boolean }, ctx: Context): Promise<'directory' | 'file' | undefined> {\n  if (entry.isDirectory()) return 'directory'\n  if (entry.isFile()) return 'file'\n  /* v8 ignore next -- Non-file directory entries such as FIFOs are platform-specific and intentionally skipped. */\n  if (!entry.isSymbolicLink()) return undefined\n  try {\n    const info = await stat(fullPath)\n    if (info.isDirectory()) return 'directory'\n    /* v8 ignore else -- the special-file symlink branch relies on POSIX /dev/null. */\n    if (info.isFile()) return 'file'\n    /* v8 ignore next -- The special-file symlink fixture relies on POSIX /dev/null. */\n    return undefined\n  } catch (error) {\n    ctx.logger.warn(`skill entry ${fullPath} ignored: failed to follow symbolic link: ${errorMessage(error)}`)\n    return undefined\n  }\n}\n\nfunction parseFrontmatter(raw: string): { data: Record<string, unknown>; body: string } | undefined {\n  const firstLineEnd = raw.indexOf('\\n')\n  if (firstLineEnd < 0) return undefined\n  const firstLine = raw.slice(0, firstLineEnd).replace(/\\r$/, '')\n  if (firstLine !== '---') return undefined\n  const start = firstLineEnd + 1\n  const closing = findClosingFrontmatter(raw, start)\n  if (closing === undefined) return undefined\n  const yaml = raw.slice(start, closing.start)\n  const parsed = parseYaml(yaml) as unknown\n  if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) return undefined\n  return { data: parsed as Record<string, unknown>, body: raw.slice(closing.bodyStart) }\n}\n","sourceCodeStart":886,"sourceCodeEnd":922,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/skill/skill-filesystem/src/index.ts#L886-L922","documentation":"Error \"skill entry ${fullPath} ignored: failed to follow symbolic link: ${errorMessage(error)}\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/skill/skill-filesystem/src/index.ts:904 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Replace the broken symbolic link with a valid target or a regular file.","Verify the symlink target exists and does not form a loop."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}