|
39 | 39 | # ── A: the shipped recipe, 4 ways ───────────────────────────────────────── |
40 | 40 | shard: |
41 | 41 | name: PROTO shard ${{ matrix.shard }}/4 |
42 | | - if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') }} |
| 42 | + if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[verdict]') }} |
43 | 43 | runs-on: ubuntu-latest |
44 | 44 | timeout-minutes: 40 |
45 | 45 | strategy: |
|
82 | 82 | # and that has to be said out loud rather than shipped as decoration. |
83 | 83 | probe-no-override: |
84 | 84 | name: PROTO shard 1/4 WITHOUT the threshold override |
85 | | - if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') }} |
| 85 | + if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[verdict]') }} |
86 | 86 | runs-on: ubuntu-latest |
87 | 87 | timeout-minutes: 40 |
88 | 88 | outputs: |
@@ -112,7 +112,7 @@ jobs: |
112 | 112 | # Measurement-only relaxation: the SHIPPED job refuses to merge unless every |
113 | 113 | # shard is green. Here the point is to obtain a merged report to compare |
114 | 114 | # against the unsharded one, so a red shard must not abort the measurement. |
115 | | - if: ${{ always() && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') }} |
| 115 | + if: ${{ always() && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[verdict]') }} |
116 | 116 | runs-on: ubuntu-latest |
117 | 117 | timeout-minutes: 20 |
118 | 118 | outputs: |
@@ -185,7 +185,7 @@ jobs: |
185 | 185 | # ── B: the status quo on the same commit — the baseline to compare against ─ |
186 | 186 | baseline: |
187 | 187 | name: PROTO unsharded coverage baseline |
188 | | - if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') }} |
| 188 | + if: ${{ !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') && !contains(github.event.head_commit.message, '[verdict]') }} |
189 | 189 | runs-on: ubuntu-latest |
190 | 190 | # Instrument, not a gate: production `test-coverage` keeps its 40 minutes. |
191 | 191 | # A timeout here would truncate the measurement, which is the one thing |
@@ -225,7 +225,7 @@ jobs: |
225 | 225 | compare: |
226 | 226 | name: PROTO compare merged vs unsharded |
227 | 227 | needs: [merge, baseline] |
228 | | - if: ${{ (always()) && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') }} |
| 228 | + if: ${{ (always()) && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') && !contains(github.event.head_commit.message, '[verdict]') }} |
229 | 229 | runs-on: ubuntu-latest |
230 | 230 | timeout-minutes: 10 |
231 | 231 | outputs: |
@@ -325,7 +325,7 @@ jobs: |
325 | 325 | report: |
326 | 326 | name: PROTO write results |
327 | 327 | needs: [shard, probe-no-override, merge, baseline, compare, red-arm-shard, red-arm-merge, red-arm-merge-without-verdict] |
328 | | - if: ${{ (always()) && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') }} |
| 328 | + if: ${{ (always()) && !contains(github.event.head_commit.message, '[threshold-probe]') && !contains(github.event.head_commit.message, '[diag]') && !contains(github.event.head_commit.message, '[merge-only]') && !contains(github.event.head_commit.message, '[verdict]') }} |
329 | 329 | runs-on: ubuntu-latest |
330 | 330 | timeout-minutes: 10 |
331 | 331 | steps: |
@@ -534,3 +534,65 @@ jobs: |
534 | 534 | git add -f proto-results/diag-shard3.md |
535 | 535 | git commit -m "PROTO diag shard3 output ${GITHUB_RUN_ID}" |
536 | 536 | git push origin "HEAD:refs/heads/proto-5403-diag-shard3-${GITHUB_RUN_ID}" |
| 537 | +
|
| 538 | + # [verdict]: the equivalence numbers, encoded in ARTIFACT NAMES because that |
| 539 | + # is the one channel out of a run this session can actually read. |
| 540 | + verdict-equivalence: |
| 541 | + name: PROTO verdict - merged vs unsharded (same commit) |
| 542 | + if: ${{ contains(github.event.head_commit.message, '[verdict]') }} |
| 543 | + runs-on: ubuntu-latest |
| 544 | + timeout-minutes: 15 |
| 545 | + steps: |
| 546 | + - uses: actions/checkout@v7 |
| 547 | + - uses: actions/download-artifact@v7 |
| 548 | + with: |
| 549 | + name: proto-coverage-unsharded |
| 550 | + path: unsharded |
| 551 | + run-id: 32388915404 |
| 552 | + github-token: ${{ secrets.GITHUB_TOKEN }} |
| 553 | + - uses: actions/download-artifact@v7 |
| 554 | + with: |
| 555 | + name: proto-coverage-merged |
| 556 | + path: merged |
| 557 | + run-id: 32388915404 |
| 558 | + github-token: ${{ secrets.GITHUB_TOKEN }} |
| 559 | + - id: cmp |
| 560 | + run: node scripts-proto/verdict.mjs unsharded/coverage-final.json merged/coverage-final.json EQUIV |
| 561 | + - run: 'echo "$RESULT" > result.txt' |
| 562 | + env: |
| 563 | + RESULT: ${{ steps.cmp.outputs.name }} |
| 564 | + - uses: actions/upload-artifact@v7 |
| 565 | + with: |
| 566 | + name: ${{ steps.cmp.outputs.name }} |
| 567 | + path: result.txt |
| 568 | + retention-days: 1 |
| 569 | + |
| 570 | + verdict-noise-floor: |
| 571 | + name: PROTO verdict - merged vs merged (two identical sharded rounds) |
| 572 | + if: ${{ contains(github.event.head_commit.message, '[verdict]') }} |
| 573 | + runs-on: ubuntu-latest |
| 574 | + timeout-minutes: 15 |
| 575 | + steps: |
| 576 | + - uses: actions/checkout@v7 |
| 577 | + - uses: actions/download-artifact@v7 |
| 578 | + with: |
| 579 | + name: proto-coverage-merged |
| 580 | + path: roundA |
| 581 | + run-id: 32388915404 |
| 582 | + github-token: ${{ secrets.GITHUB_TOKEN }} |
| 583 | + - uses: actions/download-artifact@v7 |
| 584 | + with: |
| 585 | + name: proto-coverage-merged |
| 586 | + path: roundB |
| 587 | + run-id: 32391890554 |
| 588 | + github-token: ${{ secrets.GITHUB_TOKEN }} |
| 589 | + - id: cmp |
| 590 | + run: node scripts-proto/verdict.mjs roundA/coverage-final.json roundB/coverage-final.json NOISE |
| 591 | + - run: 'echo "$RESULT" > result.txt' |
| 592 | + env: |
| 593 | + RESULT: ${{ steps.cmp.outputs.name }} |
| 594 | + - uses: actions/upload-artifact@v7 |
| 595 | + with: |
| 596 | + name: ${{ steps.cmp.outputs.name }} |
| 597 | + path: result.txt |
| 598 | + retention-days: 1 |
0 commit comments