Walk one filesystem directory root, return a [FileTree].
No Git commands, no file reads, no parsing, no product policy. Two phases:
phase 1 is gitignore-aware; phase 2 (opt-in via [RecoveryRules]) walks
WITHOUT gitignore and recovers specific paths from ignored trees, tagged
[EntryOrigin::Recovered]. Contract: plan.md in this directory.