Since #161534 the preflight "Build CI manifest" step runs
.ci-harness/scripts/ci-build-manifest.mjs, but checkout_harness did not
export it, so every pull_request preflight failed until 6c07ebfaf4
added it to preflight_scripts. No test caught the gap: every existing
test builds .ci-harness by hand from all of scripts/lib, and the
dependency-free manifest test ran the builder from the repository path
where every sibling exists.
The dependency-free manifest test now runs the builder from a harness
exported by the real owner.py checkout_harness for the preflight kind
(real git ls-files and checkout-index over a fixture index staged from
the checkout), and asserts that every .ci-harness path referenced by a
preflight step's run or uses exists in that export. It is skipped on
Windows, where the owner launches python rather than python3.
Also drop the preflight clause 6c07ebfaf4 added to the different-SHA
sparse branch: checkout() calls checkout_harness for preflight only when
HEAD equals WORKFLOW_SHA, so that branch is unreachable for preflight.
ci.yml is regenerated with scripts/generate-ci-git-owner.mts (399,898
bytes, under the 480,000-byte guard).
Proof (Blacksmith Testbox): full ci-workflow-guards (145 passed) and
ci-git-owner (159 passed) suites; the owner's tuple without the builder
fails with "Missing preflight harness paths: scripts/ci-build-manifest.mjs",
and without release-version.mjs fails with ERR_MODULE_NOT_FOUND for
.ci-harness/scripts/lib/release-version.mjs; oxfmt and the
test/scripts tsgo project pass. The changed test costs about 0.95 s
(3-4 s wall with --maxWorkers=1, +0.3 s over the repo-path version).