#1050 C1 ROUND 5 — ARM COVERAGE + CHECKOUT PURITY IDENTITY / SCOPE - predecessor head: f33bd0da96bee3ce518744d6888d018bebb1c841 - branch: feat/1050-install-state-machine-red-fixture - review inputs: be-coder-06 review 110; rev-security-02 review 111 - in scope: exact required pipeline-arm set including greenfield-remote-installer-contract; success-only arm marks; skipped-remote RED control; coverage-state exclusion from checkout source archives - unchanged/fenced: tools/fixtures/greenfield-expected-red.tsv, tools/verify-greenfield-expected-red.sh, tools/e2e-install-test.sh, #869, and all per-case dispositions - status: believed-fixed, pending jarvis validation RED-FIRST — FOUR ARMS WERE REPRESENTED BY THREE CASES The f33bd0d gate represented only the three expected-RED case identities. With all three case names marked and no remote-arm identity available, the production checker returned: SKIPPED_REMOTE_ARM_CURRENT_GATE_RC=0 [fixture-suite] cases_defined=3 cases_executed=3 The fourth required arm, greenfield-remote-installer-contract, reused next-git-present and therefore could skip without changing case-set equality. RED-FIRST — COVERAGE STATE CONTAMINATED CHECKOUT ARCHIVES The f33bd0d workflow created .greenfield-case-state in the shared repository before the checkout-mode fixture arms. An independent reproduction using the exact e2e-install-test.sh tar exclusions created .greenfield-case-state/remote-arm.ran and measured: OLD_STATE_ARCHIVE_MATCHES=1 The state instrument was therefore part of the checkout source payload it was intended only to observe. IMPLEMENTATION - Renamed the checker to tools/verify-greenfield-execution-coverage.sh and generalized it over two validated dimensions: cases and arms. - Added tools/fixtures/greenfield-expected-arms.txt as the explicit required arm set: greenfield-git-present greenfield-main-git-present greenfield-remote-installer-contract greenfield-git-absent - Expected cases remain derived from the unchanged expected-RED TSV. Expected arms are derived from the new one-name-per-line arm declaration. Both inputs allow comments/blanks and validate every resulting name. - Each of the four fixture arms writes its unique arm marker only after its exact per-case verifier succeeds. The three distinct expected-RED cases continue to write case markers after successful verification. - The final step checks both dimensions even when the first check fails, emits both denominators, and fails unless both exact name sets match. - Coverage state moved to .mosaic-test-work/greenfield-execution-coverage/${CI_PIPELINE_NUMBER}-${CI_WORKFLOW_NUMBER}/{cases,arms}. The checkout archive already excludes every */.mosaic-test-work subtree. - The expected-RED manifest, per-case verifier, and detector are untouched. MEASURED SKIPPED-REMOTE CONTROL With all three cases marked and only the three non-remote arms marked: case gate rc=0 [fixture-suite] cases_defined=3 cases_executed=3 arm gate rc=1 [fixture-suite] arms_defined=4 arms_executed=3 [fixture-suite] missing_arm=greenfield-remote-installer-contract This is the discriminating control: the case denominator remains green while the arm denominator catches the exact previously invisible skip. OTHER DYNAMIC CONTROLS - missing case: cases 3/2 => rc1 - case count inflation (one missing + one unexpected): cases 3/3 => rc1 - stale case markers after re-init: cases 3/0 => rc1 - exact case set: cases 3/3 => rc0 - future manifest case: cases 4/3 => rc1 - arm count inflation (remote missing + unexpected): arms 4/4 => rc1 - exact arm set: arms 4/4 => rc0 - production expected-RED manifest comments/blanks: accepted; exact set 3/3 => rc0 - archive selector firing control: a non-excluded root marker is present in the archive - archive purity control: no .mosaic-test-work path is present in the archive STATIC / STRUCTURAL CONTROLS - every case mark follows that arm's successful per-case verifier - every arm mark, including the remote contract, follows that arm's successful per-case verifier - all four arms depend on coverage initialization - final denominator depends on all four arms and is eligible after success or failure - final denominator runs both checks and aggregates their statuses - workflow contains the already-excluded .mosaic-test-work state root and no .greenfield-case-state reference LOCAL BASELINES - bash -n + ShellCheck on generalized checker/test: PASS - pnpm test:installer: PASS, including execution-coverage controls - pnpm typecheck: PASS, 45/45 - pnpm lint: PASS, 25/25 - pnpm format:check: PASS - woodpecker-cli lint --strict: PASS - git diff --check: PASS - /home free before/after: 11G INDEPENDENT REVIEW - Codex code review: APPROVE, confidence 0.93, zero findings. It confirmed exact arm coverage, success-only marking, dual-status aggregation, excluded state, checkout-purity controls, and PRD alignment. - Codex security review: risk NONE, confidence 0.96, zero findings. CI/path identifiers are constrained, expansions quoted, expected sets treated as data, and checks fail closed. - Review sandboxes could not execute their own dynamic suite/ShellCheck because their filesystem is read-only; the local measured baselines above provide that evidence. PENDING - commit, queue guard, one push, attribution read-back - announce the new full SHA; no merge or closure