hcengineering/platform · error

Person not found: ${name}

Error message

Person not found: ${name}

What it means

findPersonByName resolves a person name from imported content (e.g. an issue's author or assignee field) against the in-memory map of persons loaded from the target workspace. If the name is not present in that map, it throws rather than returning a dangling reference. Undefined names are tolerated and return undefined; only an actual, unresolvable name throws.

Source

Thrown at packages/importer/src/huly/huly.ts:523

        // Process sub-issues if they exist
        const subDir = path.join(currentPath, issueFile.replace('.md', ''))
        if (fs.existsSync(subDir) && fs.statSync(subDir).isDirectory()) {
          await this.processIssuesRecursively(builder, projectIdentifier, projectPath, subDir, issuePath)
        }
      } else {
        throw new Error(`Unknown issue class ${issueHeader.class} in ${issueFile}`)
      }
    }
  }

  private findPersonByName (name?: string): Ref<Person> | undefined {
    if (name === undefined) {
      return undefined
    }

    const person = this.personsByName.get(name)
    if (person === undefined) {
      throw new Error(`Person not found: ${name}`)
    }
    return person
  }

  private async getPersonIdByEmail (email: string): Promise<PersonId> {
    const personId = this.personIdByEmail.get(email)
    if (personId !== undefined) {
      return personId
    }

    const socialId = await this.client.findOne(contact.class.SocialIdentity, {
      type: SocialIdType.EMAIL,
      value: email
    })

    if (socialId === undefined) {
      throw new Error(`Social ID not found for email: ${email}`)
    }

View on GitHub (pinned to 63e28dc964)

Solutions

  1. Ensure the named person exists in the target Huly workspace (create/invite the user) with exactly the same display name
  2. Fix the name in the source markdown front-matter to match an existing person exactly (case and spacing)
  3. Re-export after user accounts are corrected in the source workspace
  4. Replace references to departed users with an existing account name

Example fix

// before (issue front-matter)
assignee: John Doe
// after (matching an existing person exactly)
assignee: John M. Doe
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check names referenced in issue front-matter against workspace persons
for (const name of referencedPersonNames(issueFiles)) {
  if (!workspacePersonNames.has(name)) console.warn(`Person "${name}" missing in target workspace`)
}

Try / catch

try {
  await importer.workspaceData(folder)
} catch (e) {
  if (e instanceof Error && e.message.startsWith('Person not found:')) {
    const name = e.message.slice('Person not found:'.length).trim()
    console.error(`Create or rename a user to "${name}" in the target workspace, then retry`)
  } else throw e
}

Prevention

When it happens

Trigger: An imported issue/comment header references a person by name (called from issue processing) that does not exist among persons registered in the importer's personsByName map — e.g. the user left the workspace, was renamed, or the name has different spelling/casing/whitespace.

Common situations: Export from workspace A imported into workspace B where the named user does not exist; a user renamed their account between export and import; extra spaces or different casing in the name field of the markdown front-matter; deactivated or removed accounts.

Related errors


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