A refusal by user.scope:<scope> now answers 403 with missing_scope and a refusal by user.permission:<code> with missing_permission, next to the unchanged error (true) and message, so a plain-HTTP script or a personal token client learns what it lacks. user_me says it needs scope read.