hcengineering/platform · error
Space type #${space.type} not found
Error message
Space type #${space.type} not found What it means
After the space is found, the code reads space.$lookup?.type (the SpaceType descriptor) and throws when it is undefined. The space type is needed to apply the type mixin and determine role-based membership. This means the space's type reference is broken or the lookup did not populate.
Source
Thrown at plugins/training-resources/src/utils/createTrainingRequest.ts:48
core.class.TypedSpace,
{
_id: parent.space
},
{
lookup: {
type: core.class.SpaceType
}
}
)
if (space === undefined) {
throw new Error(`Space #${parent.space} not found`)
}
const spaceType = space.$lookup?.type
if (spaceType === undefined) {
throw new Error(`Space type #${space.type} not found`)
}
const mixin = client.getHierarchy().as(space, spaceType.targetClass) as unknown as RolesAssignment
const personRefByAccountUuid = get(employeeRefByAccountUuidStore)
const employeeRefs = new Set(
roles
.map((roleId) => mixin[roleId] ?? [])
.flat()
.map((acc) => personRefByAccountUuid.get(acc))
.filter(notEmpty)
)
for (const employeeRef of employeeRefs) {
traineesMap.set(employeeRef, true)
}
attachedData.trainees = [...traineesMap.keys()]
}View on GitHub (pinned to 63e28dc964)
Solutions
- Verify the SpaceType document referenced by space.type exists.
- Fix the space's type reference to point at a valid SpaceType.
- Ensure the model declares the lookup so $lookup.type is populated (or fetch the type manually).
- Re-run model migrations that (re)create default space types.
Example fix
// before
const spaceType = space.$lookup?.type
// after
const spaceType = space.$lookup?.type ?? await client.findOne(core.class.SpaceType, { _id: space.type }) Defensive patterns
Strategy: type-guard
Validate before calling
const space = await client.findOne(core.class.Space, { _id: parent.space, lookup: { type: core.class.SpaceType } })
if (space?.$lookup?.type === undefined) throw new Error('Space has no valid type') Type guard
function hasSpaceType(s: Space): s is Space & { $lookup: { type: SpaceType } } { return s.$lookup?.type !== undefined } Try / catch
try { return await createTrainingRequest(parent, roles) } catch (e) { if (e.message.includes('Space type')) repairSpaceType(parent.space); else throw e } Prevention
- Never delete SpaceType documents still referenced by spaces
- Declare lookups in the model so $lookup.type populates
- Re-run migrations that seed default space types
When it happens
Trigger: Space exists but its type field references a deleted SpaceType document, or the lookup config for type is missing so $lookup.type stays undefined.
Common situations: Custom space types removed by a migration; partially restored backups; model misconfiguration where Space lookup type is not declared; spaces created by tooling without a type.
Related errors
- Space #${parent.space} not found
- Training request #${ref} not found
- Training #${request.attachedTo} not found
- object presenter not found for class=${_class}, preserve key
- No screen access granted
AI-assisted analysis of hcengineering/platform@63e28dc964 (2026-08-29).
Data as JSON: /api/errors/81fe8d2fa00f765d.
Report an issue: GitHub.