Scan a project directory and produce ProjectSignals. Pure filesystem introspection — no external commands (no git/npm/cargo CLI), no LLM.