hcengineering/platform · warning

Couldn't find the parent document meta with id: ${parentDocO

Error message

Couldn't find the parent document meta with id: ${parentDocObj.attachedTo}

What it means

A controlled document, template, or folder references a parent document via parentDocObj.attachedTo, but no ProjectMeta object exists with that id. getParentPath needs the parent's ProjectMeta to build the breadcrumb path (parent meta plus ancestors). It logs a warning and returns an empty array, degrading gracefully instead of throwing.

Source

Thrown at plugins/controlled-documents/src/docutils.ts:50

import documents from './plugin'
import { getDocumentId, getFirstRank, TEMPLATE_PREFIX } from './utils'

async function getParentPath (client: TxOperations, parent: Ref<ProjectDocument>): Promise<Array<Ref<DocumentMeta>>> {
  const parentDocObj = await client.findOne(documents.class.ProjectDocument, {
    _id: parent
  })

  if (parentDocObj === undefined) {
    console.warn(`Couldn't find the parent project document object with id: ${parent}`)
    return []
  }

  const parentMeta = await client.findOne(documents.class.ProjectMeta, {
    _id: parentDocObj.attachedTo
  })

  if (parentMeta === undefined) {
    console.warn(`Couldn't find the parent document meta with id: ${parentDocObj.attachedTo}`)
    return []
  }

  return [parentMeta.meta, ...parentMeta.path]
}

export async function createControlledDocFromTemplate (
  client: TxOperations,
  templateId: Ref<DocumentTemplate> | undefined,
  documentId: Ref<ControlledDocument>,
  spec: AttachedData<ControlledDocument>,
  space: Ref<DocumentSpace>,
  project: Ref<Project> | undefined,
  parent: Ref<ProjectDocument> | undefined,
  docClass: Ref<Class<ControlledDocument>> = documents.class.ControlledDocument
): Promise<{ seqNumber: number, success: boolean }> {
  if (templateId == null) {
    return { seqNumber: -1, success: false }

View on GitHub (pinned to 63e28dc964)

Solutions

  1. Verify the parent ProjectMeta exists (client.findOne(documents.class.ProjectMeta, { _id: parent.attachedTo })) before creating the child document.
  2. Fix the caller so it passes the metadata object (with correct attachedTo) rather than the raw document.
  3. Check for concurrent deletions or failed parent commits and re-create the missing parent meta.
  4. Handle the empty return value: downstream code building paths should treat [] as 'no parent path' rather than proceeding with invalid assumptions.

Example fix

// before
await createControlledDocMetadata(client, { parent: { attachedTo: someDocumentId } })
// after
const parentMeta = await client.findOne(documents.class.ProjectMeta, { _id: someDocumentId })
if (parentMeta === undefined) throw new Error('parent meta missing')
await createControlledDocMetadata(client, { parent: { attachedTo: parentMeta._id } })
Defensive patterns

Strategy: validation

Validate before calling

const parentMeta = await client.findOne(documents.class.ProjectMeta, { _id: parent.attachedTo })
if (parentMeta === undefined) throw new Error(`parent meta ${parent.attachedTo} not found`)

Type guard

function hasParentMeta(obj: any): obj is { attachedTo: string } {
  return obj != null && typeof obj.attachedTo === 'string' && obj.attachedTo.length > 0
}

Try / catch

const path = await getParentPath(client, parentDocObj)
if (path.length === 0) {
  // parent meta missing: treat as top-level or abort
  return fallbackPath
}

Prevention

When it happens

Trigger: Calling createControlledDocMetadata, createDocumentTemplateMetadata, or createNewFolder with a `parent` object whose `attachedTo` is undefined/null, points to a deleted ProjectMeta, or was never created (e.g. parent folder created without its metadata commit).

Common situations: Passing a document id instead of the metadata object; the parent was removed by another user concurrently; migrations or partial commits left documents attached to nonexistent meta records.

Related errors


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