Core fact resolvers are organized by fact category, not one monolith

Core fact discovery lives in internal/engine/core.go — 6,256 lines, 369 functions, 99 runtime.GOOS comparisons, with a 195-line buildCoreFacts orchestrator that inlines ~50 resolver calls. Every fact category (networking, processors, memory, dmi, disks, ssh, selinux, identity, uptime, …) and every platform’s logic for it share that one file, so changing one category means navigating all of them. The project already split the cloud metadata resolvers (ec2.go, gce.go, az.go) and virtualization (virtual.go) into per-category files following an currentXInput (impure probe) + detectX (pure logic) seam; the rest of core never got the same treatment.

We adopt per-fact-category resolver modules as the standard organization for core facts:

Two constraints that must not be re-crossed:

Considered Options