According to PostgreSQL’s manual[0]:
“STABLE indicates that the function cannot modify the database, and
that within a single table scan it will consistently return the same
result for the same argument values, but that its result could change
across SQL statements.”
This definition matches both functions. Moreover, find_user_role did
not need to be written in plpgsql, that i assume—but did not test—are
slower than sql functions.
[0]: https://www.postgresql.org/docs/14/sql-createfunction.html