hcengineering/platform · error

Folder not found, _id

Error message

Folder not found, _id: ${ref}

What it means

FolderTitleProvider mirrors FileTitleProvider for folders: it looks up drive.class.Folder by _id and throws if the folder cannot be found. Title resolution must always succeed for valid references, so missing folders are surfaced as errors.

Solutions

  1. Verify the folder exists before resolving its title
  2. Catch and substitute a placeholder title for deleted folders
  3. Clean up dangling folder references on delete
  4. Confirm the correct id and provider pairing (folder vs file)

Example fix

// before
const title = await FolderTitleProvider(client, ref)
// after
const folder = await client.findOne(drive.class.Folder, { _id: ref })
const title = folder ? folder.title : '(deleted folder)'
Defensive patterns

Strategy: fallback

Validate before calling

const folder = doc ?? await client.findOne(drive.class.Folder, { _id: ref })
if (folder === undefined) return '(deleted folder)'

Type guard

async function folderExists(client: Client, ref: Ref<Folder>): Promise<boolean> {
  return (await client.findOne(drive.class.Folder, { _id: ref })) !== undefined
}

Try / catch

try {
  return await FolderTitleProvider(client, ref, doc)
} catch (err) {
  if (err.message.startsWith('Folder not found')) {
    return '(deleted folder)'
  }
  throw err
}

Prevention

When it happens

Trigger: Rendering a title for a Folder ref that was deleted or never existed; stale references in notifications/activity; passing a file id to the folder provider.

Common situations: Folder removed by another user before a referencing view loads; import/export tooling carrying stale ids; cascade deletes not cleaning up references.

Related errors


AI-assisted analysis of hcengineering/platform@63e28dc964 (2026-08-29). Data as JSON: /api/errors/adbcff1904184902. Report an issue: GitHub.

Appendix: source

Thrown at plugins/drive-resources/src/index.ts:259

  const results = await Promise.all(
    doc.map(async (p) => {
      return permissions.restrictedSpaces.has(p.space)
        ? canRemoveDoc(drive.class.Folder, p.space, permissions)
        : await canDeleteObject(doc)
    })
  )
  return results.every(Boolean)
}

export async function FileTitleProvider (client: Client, ref: Ref<File>, doc?: File): Promise<string> {
  const object = doc ?? (await client.findOne(drive.class.File, { _id: ref }))
  if (object === undefined) throw new Error(`File not found, _id: ${ref}`)
  return object.title
}

export async function FolderTitleProvider (client: Client, ref: Ref<Folder>, doc?: Folder): Promise<string> {
  const object = doc ?? (await client.findOne(drive.class.Folder, { _id: ref }))
  if (object === undefined) throw new Error(`Folder not found, _id: ${ref}`)
  return object.title
}

export default async (): Promise<Resources> => ({
  component: {
    CreateDrive,
    DrivePanel,
    DriveSpaceHeader,
    DriveSpacePresenter,
    DrivePresenter,
    EditFile,
    EditFolder,
    FilePanel,
    FilePresenter,
    FileSizePresenter,
    FileVersionPresenter,
    FileVersionVersionPresenter,
    FolderPanel,

View on GitHub (pinned to 63e28dc964)