Extract project detection into scripts/project_research_runtime, complete the section-01 ProjectProfile schema with evidence constraints, and make harness_dist/project_detect.py delegate to that API.
Represent repository/worktree roots, languages, frameworks, commands, source/plan layouts, provider surfaces, overlays, Git state, and platform state with evidence per fact.
Canonicalize ordering and serialization so identical committed project state yields an identical research digest; preserve unknown facts instead of guessing defaults.
Prove the research path performs no writes, subprocess mutations, Git staging, plan writes, provider launches, or cache changes.
Verification
Write failing positive, negative, interruption, concurrency, and idempotency cases before implementation.
Pin the consumer-visible outcome through the real CLI/runtime entry point.
Run focused pytest and the owning runtime self-test with a 150-second test timeout.
Run python -m scripts.harness_dist verify --root . when distributed artifact classification changes.