Fragile = possibly changing the semantics when new top-level definitions are added in imported libraries.
Fragile code:
import "x.file" [a]
improt "y.file"
def c = a // future bindings from "y.file" can shadow "a"
Non-fragile code:
import "x.file" [a]
improt "y.file" [b]
def c = a // future bindings from "y.file" cannot shadow "a" because of the pattern [b]
The library should support giving warnings for these cases.