{"record":{"id":"fe5a670883bef0e2","repo":"different-ai/openwork","slug":"member-not-found","errorCode":"member_not_found","errorMessage":"Connector creator member not found.","messagePattern":"Connector creator member not found\\.","errorType":"http","errorClass":"PluginArchRouteFailure","httpStatus":404,"severity":"error","filePath":"ee/apps/den-api/src/routes/org/plugin-system/store.ts","lineNumber":5871,"sourceCode":"    .where(eq(OrganizationTable.id, input.connectorInstance.organizationId))\n    .limit(1)\n  const organization = organizationRows[0] as OrganizationRow | undefined\n  if (!organization) {\n    throw new PluginArchRouteFailure(404, \"organization_not_found\", \"Organization not found for connector instance.\")\n  }\n\n  const memberRows = await db\n    .select()\n    .from(MemberTable)\n    .where(and(\n      eq(MemberTable.organizationId, input.connectorInstance.organizationId),\n      eq(MemberTable.id, input.connectorInstance.createdByOrgMembershipId),\n      isNull(MemberTable.removedAt),\n    ))\n    .limit(1)\n  const member = memberRows[0] as MemberRow | undefined\n  if (!member) {\n    throw new PluginArchRouteFailure(404, \"member_not_found\", \"Connector creator member not found.\")\n  }\n\n  if (!member.userId) {\n    throw new PluginArchRouteFailure(404, \"member_not_joined\", \"Connector creator member has not joined the organization.\")\n  }\n\n  return {\n    automation: true,\n    memberTeams: [],\n    session: null,\n    organizationContext: {\n      currentMember: {\n        createdAt: member.createdAt,\n        id: member.id,\n        isOwner: roleIncludesOwner(member.role),\n        joinedAt: member.joinedAt,\n        role: member.role,\n        userId: member.userId,","sourceCodeStart":5853,"sourceCodeEnd":5889,"githubUrl":"https://github.com/different-ai/openwork/blob/2b7df46e8ae1517d64c896c7793d2d52ec845669/ee/apps/den-api/src/routes/org/plugin-system/store.ts#L5853-L5889","documentation":"Thrown when the connector instance's `createdByOrgMembershipId` does not match any active row in MemberTable (query filters `isNull(MemberTable.removedAt)`). The member who created the connector either never existed, was removed from the organization, or the membership id is wrong. Emitted as a 404 PluginArchRouteFailure named member_not_found.","triggerScenarios":"Resolving a connector instance whose creator membership was soft-removed (removedAt set), whose createdByOrgMembershipId is null/garbage, or resolving after the creator was deleted from the org.","commonSituations":"A creator left the org or was removed by an admin, breaking automation that still resolves the connector by creator membership; importing data from another environment with mismatched membership ids.","solutions":["Re-assign the connector instance to an active membership: update the createdByOrgMembershipId to a current active member.","Confirm the membership row exists and has removedAt IS NULL: SELECT * FROM member WHERE id = '<membershipId>'.","If the creator was removed intentionally, migrate connector ownership in a data migration rather than leaving stale ids."],"exampleFix":"// before\nawait resolveConnectorActor({ connectorInstanceId }) // creator removed from org -> 404\n// after\nconst activeMember = await db.select().from(MemberTable).where(and(eq(MemberTable.organizationId, orgId), isNull(MemberTable.removedAt))).limit(1)\nawait db.update(ConnectorInstanceTable).set({ createdByOrgMembershipId: activeMember[0].id }).where(eq(ConnectorInstanceTable.id, connectorInstanceId))\nawait resolveConnectorActor({ connectorInstanceId })","handlingStrategy":"validation","validationCode":"const member = await db.select().from(MemberTable).where(and(eq(MemberTable.id, instance.createdByOrgMembershipId), isNull(MemberTable.removedAt))).limit(1)\nif (!member[0]) throw new Error('Creator membership inactive or missing; reassign before resolving')","typeGuard":"function isActiveMember(row: MemberRow | undefined): row is MemberRow & { removedAt: null } { return row !== undefined && row.removedAt === null }","tryCatchPattern":"try {\n  await resolveConnectorActor({ connectorInstanceId })\n} catch (e) {\n  if (e instanceof PluginArchRouteFailure && e.code === 'member_not_found') {\n    await reassignConnectorCreator(connectorInstanceId, pickActiveAdminMember())\n  } else throw e\n}","preventionTips":["Re-assign connector ownership as part of the member-removal workflow","Never hard-code or copy membership ids across environments","Treat membership ids as ephemeral; resolve via user id instead where possible"],"tags":["database","membership","connector"],"backgroundTag":"missing-or-removed-member-record","analyzedSha":"2b7df46e8ae1517d64c896c7793d2d52ec845669","analyzedAt":"2026-09-01T07:59:23.713Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}