diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4089db3da..015540029 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -339,6 +339,7 @@ jobs: with: { gate: coverage-model } - name: Run coverage + id: run-coverage env: OUTPUT_ECONOMY_BASE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }} uses: ./.github/actions/run-gate @@ -355,8 +356,11 @@ jobs: # and fails when changed-line coverage < the threshold in # scripts/coverage-changed/model.ts. The `coverage-waiver` PR label maps to # the waiver env, which skips the failure but still prints the numbers. + # Gated on the coverage step's own outcome (#1781 A5): when `Run coverage` + # fails, lcov.info is never written, so this step would just re-report that + # failure as its own red ("no lcov report") instead of a coverage verdict. - name: Enforce changed-line coverage gate - if: always() && github.event_name == 'pull_request' + if: steps.run-coverage.outcome == 'success' && github.event_name == 'pull_request' env: AGENT_DEVICE_COVERAGE_WAIVER: ${{ contains(github.event.pull_request.labels.*.name, 'coverage-waiver') }} uses: ./.github/actions/run-gate diff --git a/.github/workflows/perf-nightly.yml b/.github/workflows/perf-nightly.yml index 00ec20400..81caf11a6 100644 --- a/.github/workflows/perf-nightly.yml +++ b/.github/workflows/perf-nightly.yml @@ -1,14 +1,12 @@ name: Perf Nightly -# End-to-end command perf benchmark (scripts/perf). Scheduled + manual only — perf timing on -# shared CI runners is noisy, so treat this as a trend/regression signal, not absolute numbers. -# Reuses the same build artifacts as the device suites: the cached iOS XCUITest runner -# (setup-apple-runner-build, ios-runner-prebuilt cache) and the Android replay host, and runs the CLI -# from source via --experimental-strip-types (no dist build), matching the replay workflows. +# Parked to workflow_dispatch by #1781 A3: it only writes a report and compares nothing, so it +# structurally cannot catch a regression, and iOS wall-clock medians swing up to +122% +# night-to-night at n=5 with no consumer reading the report. `pnpm perf` / scripts/perf are +# unaffected — still runnable on demand. Un-park once a comparison step with multi-night +# smoothing (someone reading it) exists, or a perf arc needs nightly data. on: - schedule: - - cron: '0 4 * * *' workflow_dispatch: inputs: rounds: