be status ignores only the sub's own .gitignore — needs hierarchical (cwd→$HOME) compounding
be status:<sub>/ floods with unk for paths the repo-root .gitignore should exclude (build-*/, *.o, CMakeFiles/, …): the relayed sub-scan IGNOLoads only the SUBMODULE's own .gitignore, which abc lacks, so the parent's patterns never reach the sub's paths. Bare be collapses a sub to one summary row (no flood) — that's the "intermittent". Fix: hierarchical .gitignore resolution — load every .gitignore from the classified path's directory UP to $HOME (or / if outside $HOME) and COMPOUND them, crossing submodule boundaries, the way nested git ignores stack. NO hardcoded directory names. See Sniff.
be and a fresh build — NOT skew): build
the abc sub (makes abc/build-debug/{CMakeCache.txt,*.o,…}), then be status:abc/ → ~15 unk abc/build-debug/... rows.
be status:<sub>/ relays into the sub's worktree; its SNIFFOpen/IGNOLoad
reads only the SUB's own .gitignore (absent for abc), so the repo-root .gitignore never governs the sub's paths.
be collapses the sub to one summary row → no flood (the "intermittent").8c7f5f3a) REFUTED: sniff/SNIFF.c/CLASS.c/dog/git/IGNO.c/
ULOG.c are byte-identical to parent d8fec51a; the bug is pre-existing / structural (since submodule projector recursion), not a regression.
.gitignore already lists every flooded pattern — it justisn't consulted from inside the sub.
.gitignore: classifying a path loads every .gitignore from
its directory up to $HOME (or / if not under $HOME) and COMPOUNDS them (git precedence: nearer/deeper rules add or override; ! negation honored).
.gitignore
governs nested sub paths — this is what fixes the abc/build-debug flood.
build/Corpus/etc. are excluded ONLY because the
real .gitignores in the chain list them.
build*//Corpus/ ignore in
IGNOMatch): Corpus is not special — restore pattern-only matching.
/, ! negation,precedence) across the compounded chain.
$HOME (or /); cache the chain per directory so the
status walk doesn't reload .gitignores for every leaf.
igno_is_build/Corpus special-case in IGNOMatch — a hardcoded dir blacklist, not ignore resolution.
.gitignore STACK loaded leaf-dir → $HOME//; IGNOMatch
consults it nearest-first with git precedence; built once per directory (cached), not per leaf. Localize in dog/git/IGNO + the sniff/SNIFF open/scan that drives it (incl. the be status:<sub>/ relay).
igno_is_build*/Corpus from dog/git/IGNO.c,
revert the test that pinned it; IGNOMatch pattern-only again.
.gitignore from the path's dir up to
$HOME//; compound with git precedence; cache per directory.
.gitignore
→ build artifacts ignored; plus a !-negation / precedence case. ctest green.
/ at 100% disk (built via atmpfs symlink). Watch disk on the rerun.