ci(installer): cover all greenfield execution arms
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
#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
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Required artifacts
|
||||
|
||||
- [x] `docs/PRD.md` exists; #1050 C1 requirement 13 binds the complete in-scope remote stack source chain, and requirement 15 binds pipeline-level exact case-set execution coverage.
|
||||
- [x] `docs/PRD.md` exists; #1050 C1 requirement 13 binds the complete in-scope remote stack source chain, and requirement 15 binds pipeline-level exact case+arm execution coverage without checkout-state contamination.
|
||||
- [x] User guide: not applicable; no user-facing production installer behavior changed.
|
||||
- [x] Admin guide: not applicable; no operator procedure or deployment behavior changed.
|
||||
- [x] Developer guide: existing `docs/guides/installer-state-machine.md` defines the fail-closed installer model; the C1-specific remote-arm contract and evidence live in the PRD, scratchpad, and scoped verification report.
|
||||
@@ -21,4 +21,5 @@
|
||||
- [x] Trust boundary states both halves: the digest proves fetched bytes remain identical through execution/verify-after; it does not authenticate authorship against provider/TLS compromise. Independent provenance is the inherited PRD v2 §3 deferral.
|
||||
- [x] Round-3 Codex code review APPROVE (confidence 0.92, zero findings) and security re-review risk NONE (confidence 0.96, zero findings). The initial HIGH trust-root finding remains documented as the canonical signed-provenance deferral, not hidden.
|
||||
- [x] Round-4 review cycle closed: two blocking Codex findings (missing dependency ordering; production manifest comments misparsed) were accepted and fixed. Final code review APPROVE (confidence 0.94, zero findings) and security risk NONE (confidence 0.96, zero findings).
|
||||
- [x] Round-5 exact arm coverage and archive-purity controls reviewed: Codex code APPROVE (confidence 0.93, zero findings) and security risk NONE (confidence 0.96, zero findings).
|
||||
- [x] Canonical evidence remains in-repo. No external publishing action was requested or performed.
|
||||
|
||||
Reference in New Issue
Block a user