На самом деле когда говорим про то, что в графкуэле зашито 2 языка
- язык SDL для объявления схемы при старте сервера (schema first approach)
- язык GQL для написания запросов в рантайме
Тоже самое справедливо и для директив (посмотрите в спеке
DirectiveLocation)
- TypeSystemDirective директивы для SDL
- ExecutableDirective директивы для GQL
Так вот когда для директив указан один из локейшенов ExecutableDirective то они вроде как экспоузятся в интроспекции. А вот TypeSystemDirective ни в коем случае не должны попадать в эту интроспекцию, это строго серверные метаданные.
Но по какому-то кривому обстоятельству директивы specifiedBy и deprecated экспоузятся в интроспекцию.
Т.е. получается, что в спецификации GraphQL явно не хватает 3го типа директив, типа PublicTypeSystemDirective. Т.к. по безопасности вроде нельзя серверные директивы типов отдавать наружу, но при это существует две серверных директивы, которые обходными путями все-таки затащили в интроспекцию.