fs
Intersect L2 — filesystem (intersect/fs).
The only layer that reads disk and the only one carrying a runtime
dependency (a globber, tinyglobby). It enumerates real files with the
globber, then filters via the pure path API (L1/L0) — it does not
re-implement matching; L0/L1 stay pure questions about patterns. See
docs/planning/decisions/D-4FRD-intersect-api/layered-api.md.
Semantics are IDENTICAL to the pure layer: a bare path is an exact match and
a subtree needs **, exactly as at L1 — the globber’s own dialect never
leaks into the result.
The enumerated names are FILENAMES; the arguments are GLOBS. This layer quotes
every enumerated name before handing it to matches, so a file really called
pages/[id].vue is compared as that name and not as a character class. The
corollary binds callers: to reach such a file you must escape the
metacharacters in your pattern too (pages/\[id\].vue) — a literal repo
path fed in verbatim silently matches nothing.
tinyglobby is imported ONLY here; the core entries (./index,
./segments, ./parse, ./registry) never reference it, keeping them
zero-dependency per [[D-4FRD-intersect-api]] Option C.