BuildWingIndex/BuildAllWingIndexes listed wiki/<wing>/<hall>/ with os.ReadDir and opened each note by path: a symlinked note put the target's title into _index.md (110k leaks in the swap race), a symlinked wing was followed and its _index.md written into the target, and a FIFO hung the build (it runs on every brain_write). - New brainfs.ReadDirDirs: real subdirectories only, every component of the dir a real directory. Wings and halls are listed with it and ReadDirRegular; titles are read with ReadRegular (readTitleAndCreatedIn). A symlinked wing is an error; a symlinked hall is skipped. - linkcheck entryIndex walks with WalkRegular: a symlinked .md name no longer makes a [[link]] resolve. - readTitleAndCreated (path-based) stays for tunnel.DetectTunnels until PR #170 lands; that is slice 5b. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>