In Glyphs 2 every entry in the GPOS script table gets its “own” feature. Glyphs 3 minimises the number of entries in the feature table. But for some reason the script default entries end up with 2 features instead of one. In its most simple case with just one kerning lookup for latn the script and feature tables look like the following. 1 script table entry, with two kerning features pointing to the same lookup:
script table begin
latn default 0, 1
script table end
feature table begin
0 kern 0
1 kern 0
feature table end
Having a few languages and some more lookups:
script table begin
DFLT default 0, 2, 4
latn default 0, 1, 2, 3, 4
latn CAT 0, 2, 4
latn MOL 0, 2, 4
latn ROM 0, 2, 4
script table end
feature table begin
0 kern 0, 1
1 kern 1
2 mark 2, 3
3 mark 3
4 mkmk 4
feature table end
The default gets the kern and mark features twice, with the second dropping the first lookup.
And now checking Noto Serif Devanagari (the regular): There is a dist feature with a context rule. Glyphs adds the kerning to this feature.
In Glyphs 2 the context rule is lookup 36 and the kerning is lookup 37. Each script table has its own feature. But only the two features for the default deva and dev2 script table entries have both lookups, the rest have to make do without the kerning of lookup 37. Which is not good.
In Glyphs 3 the kerning is lookup 36 and the context rule 37. The context rule is an x-placement, so it is indeed better to do that after the kerning. The feature table has three dist entries. There are two with the kerning and one entry for the context rule.
The default deva and dev2 script table entries have two dist features. I have not tested if we get both lookups or just the one of the first dist, or the one of the second dist feature. The other script table entries get a feature with the context rule only and miss out on the kerning.
The two default script table entries also get an extra abvm and blwm feature with the second feature missing the first of the six lookups.