twentyhq/twenty · error · Error
workspaceMember object not found in workspace metadata.
Error message
workspaceMember object not found in workspace metadata.
What it means
configure-partner-rls separately asserts that the workspaceMember object exists in metadata (beyond the app objects) because the RLS self-scope predicate references workspaceMember.id. It throws before resolving the workspaceMember id field. Same root cause as the app-object check: the workspace lacks the expected metadata.
Source
Thrown at packages/twenty-apps/internal/twenty-partners/src/scripts/configure-partner-rls.ts:318
apiKey,
`{ objects(paging:{first:100}) { edges { node { id nameSingular } } } }`,
);
const objectIdByName = new Map<string, string>(
objectsData.objects.edges.map((e) => [e.node.nameSingular, e.node.id]),
);
for (const name of ALL_TARGET_OBJECTS) {
if (!objectIdByName.has(name)) {
throw new Error(
`Object "${name}" not found in workspace metadata. ` +
`Has the app been installed and synced?`,
);
}
}
if (!objectIdByName.has('workspaceMember')) {
throw new Error('workspaceMember object not found in workspace metadata.');
}
const workspaceMemberId = objectIdByName.get('workspaceMember') as string;
const objectInfoByName = new Map<SimpleTargetObject, ObjectInfo>();
for (const name of SIMPLE_TARGET_OBJECTS) {
const objectId = objectIdByName.get(name) as string;
const partnerUserFieldMetadataId = await findFieldByName(
metadataUrl,
apiKey,
objectId,
name,
'partnerUser',
);
objectInfoByName.set(name, {
objectMetadataId: objectId,
partnerUserFieldMetadataId,View on GitHub (pinned to 1f5dd2bbd2)
Solutions
- Wait for / trigger a metadata sync and re-run rls:configure.
- Confirm TWENTY_PARTNERS_API_URL/TWENTY_PARTNERS_API_KEY point at the correct workspace.
- Verify the Twenty server version exposes workspaceMember in the metadata objects query.
- If workspaceMember is intentionally hidden, revisit the self-scope predicate design before proceeding.
Example fix
// before
if (!objectIdByName.has('workspaceMember')) {
throw new Error('workspaceMember object not found in workspace metadata.');
}
// after — list all available objects to aid diagnosis
if (!objectIdByName.has('workspaceMember')) {
const available = [...objectIdByName.keys()].join(', ');
throw new Error(
`workspaceMember object not found in workspace metadata. ` +
`Available objects: ${available}. Re-sync metadata then re-run rls:configure.`,
);
} Defensive patterns
Strategy: validation
Validate before calling
const objects = await fetchObjectNames(metadataUrl, apiKey);
if (!objects.includes('workspaceMember')) {
throw new Error('workspaceMember not in metadata; complete the install/sync then re-run rls:configure');
} Prevention
- Ensure metadata sync is complete before running rls:configure (workspaceMember must be present).
- Confirm TWENTY_PARTNERS_API_URL/API_KEY target the correct workspace.
- Verify the Twenty server version exposes workspaceMember as a queryable object.
- Re-run rls:configure after sync (idempotent).
When it happens
Trigger: objects query result has no edge with nameSingular === 'workspaceMember'. Causes: workspace metadata incomplete/not synced; querying a workspace where the member object isn't exposed; metadata API version that doesn't surface workspaceMember.
Common situations: Metadata sync incomplete after install; wrong workspace; older server version that doesn't expose workspaceMember as a queryable object.
Related errors
- Object "${name}" not found in workspace metadata. Has the ap
- GraphQL errors: ${json.errors.map((e) => e.message).join(';
- Field "${fieldName}" not found on object "${objectName}" aft
- Partner role not found. Available roles: ${labels}. Ensure t
- upsertRowLevelPermissionPredicates returned no predicates fo
AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12).
Data as JSON: /api/errors/e3845c58b0c849bc.
Report an issue: GitHub.