3131 ci_changes : ${{ steps.detect.outputs.ci_changes }}
3232 code_changes : ${{ steps.detect.outputs.code_changes }}
3333 tractor_gates : ${{ steps.detect.outputs.tractor_gates }}
34+ tractor_heavy_gates : ${{ steps.detect.outputs.tractor_heavy_gates }}
3435 run_build : ${{ steps.detect.outputs.run_build }}
3536 run_e2e : ${{ steps.detect.outputs.run_e2e }}
3637 run_task_smoke : ${{ steps.detect.outputs.run_task_smoke }}
7475 echo "ci_changes=false" >> "$GITHUB_OUTPUT"
7576 echo "code_changes=false" >> "$GITHUB_OUTPUT"
7677 echo "tractor_gates=false" >> "$GITHUB_OUTPUT"
78+ echo "tractor_heavy_gates=false" >> "$GITHUB_OUTPUT"
7779 echo "run_build=false" >> "$GITHUB_OUTPUT"
7880 echo "run_e2e=false" >> "$GITHUB_OUTPUT"
7981 echo "run_task_smoke=false" >> "$GITHUB_OUTPUT"
@@ -111,6 +113,7 @@ jobs:
111113 echo "ci_changes=true" >> "$GITHUB_OUTPUT"
112114 echo "code_changes=true" >> "$GITHUB_OUTPUT"
113115 echo "tractor_gates=true" >> "$GITHUB_OUTPUT"
116+ echo "tractor_heavy_gates=true" >> "$GITHUB_OUTPUT"
114117 echo "run_build=false" >> "$GITHUB_OUTPUT"
115118 echo "run_e2e=true" >> "$GITHUB_OUTPUT"
116119 echo "run_task_smoke=true" >> "$GITHUB_OUTPUT"
@@ -144,6 +147,11 @@ jobs:
144147 tractor_gates=true
145148 fi
146149
150+ tractor_heavy_gates=false
151+ if has_match '^(packages/tractor/|packages/tractor-ts/|packages/pi-agent/|packages/barn/|packages/plugin-manifest/|packages/storage-sqlite/|packages/storage-rest/|packages/sync-loro/|turbo\.json$|pnpm-lock\.yaml$|scripts/ci/smoke-runtime-descriptor-release-path\.mjs)'; then
152+ tractor_heavy_gates=true
153+ fi
154+
147155 # Standalone build artifact job is retired for normal PR validation.
148156 # General build correctness is covered inside quality; E2E runs through
149157 # Turbo and owns any build dependencies it needs in the E2E runner.
@@ -178,13 +186,14 @@ jobs:
178186 echo "ci_changes=$ci_changes" >> "$GITHUB_OUTPUT"
179187 echo "code_changes=$code_changes" >> "$GITHUB_OUTPUT"
180188 echo "tractor_gates=$tractor_gates" >> "$GITHUB_OUTPUT"
189+ echo "tractor_heavy_gates=$tractor_heavy_gates" >> "$GITHUB_OUTPUT"
181190 echo "run_build=$run_build" >> "$GITHUB_OUTPUT"
182191 echo "run_e2e=$run_e2e" >> "$GITHUB_OUTPUT"
183192 echo "run_task_smoke=$run_task_smoke" >> "$GITHUB_OUTPUT"
184193 echo "run_audit=$run_audit" >> "$GITHUB_OUTPUT"
185194 echo "run_deep=$run_deep" >> "$GITHUB_OUTPUT"
186195
187- echo "::notice::changes: ci=$ci_changes code=$code_changes tractor_gates=$tractor_gates build=$run_build e2e=$run_e2e task_smoke=$run_task_smoke audit=$run_audit deep=$run_deep filter=$turbo_filter"
196+ echo "::notice::changes: ci=$ci_changes code=$code_changes tractor_gates=$tractor_gates tractor_heavy_gates=$tractor_heavy_gates build=$run_build e2e=$run_e2e task_smoke=$run_task_smoke audit=$run_audit deep=$run_deep filter=$turbo_filter"
188197
189198 - name : Compute validation signatures
190199 id : signatures
@@ -285,7 +294,7 @@ jobs:
285294 turbo-cache-token : ${{ secrets.TURBO_CACHE_TOKEN }}
286295 is-pr : ${{ github.event_name == 'pull_request' }}
287296 pr-number : ${{ github.event.pull_request.number }}
288- rust-coverage : ${{ needs.changes.outputs.tractor_gates }}
297+ rust-coverage : ${{ needs.changes.outputs.tractor_heavy_gates }}
289298
290299 # Turbo Cache is now handled in ./.github/actions/setup
291300 # - name: Cache Turbo
@@ -394,7 +403,7 @@ jobs:
394403 # These remain separate to use the GHA script logic but are fast due to cache hits above
395404 - name : Benchmark Quality Gate (Tractor)
396405 id : benchmark
397- if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_gates == 'true'
406+ if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_heavy_gates == 'true'
398407 run : |
399408 # Capture current branch explicitly for detached HEAD states
400409 CURRENT_BRANCH=$(git rev-parse HEAD)
@@ -430,7 +439,7 @@ jobs:
430439 fi
431440
432441 - name : Comment PR on Benchmark Increase
433- if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_gates == 'true' && github.event_name == 'pull_request' && steps.benchmark.outputs.improved == 'true'
442+ if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_heavy_gates == 'true' && github.event_name == 'pull_request' && steps.benchmark.outputs.improved == 'true'
434443 uses : ./.github/actions/github-script
435444 with :
436445 script : |
@@ -481,7 +490,7 @@ jobs:
481490
482491 - name : Coverage Quality Gate (Tractor)
483492 id : coverage
484- if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_gates == 'true'
493+ if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_heavy_gates == 'true'
485494 run : |
486495 cd packages/tractor
487496 pnpm run coverage:check
@@ -499,7 +508,7 @@ jobs:
499508 fi
500509
501510 - name : Comment PR on Coverage Increase
502- if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_gates == 'true' && github.event_name == 'pull_request' && steps.coverage.outputs.improved == 'true'
511+ if : steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_heavy_gates == 'true' && github.event_name == 'pull_request' && steps.coverage.outputs.improved == 'true'
503512 uses : ./.github/actions/github-script
504513 with :
505514 script : |
@@ -555,7 +564,7 @@ jobs:
555564 }
556565
557566 - name : Upload coverage
558- if : always() && steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_gates == 'true'
567+ if : always() && steps.quality_cache.outputs.cache-hit != 'true' && needs.changes.outputs.tractor_heavy_gates == 'true'
559568 uses : ./.github/actions/codecov-upload
560569 with :
561570 files : ./packages/tractor/coverage/lcov.info
@@ -837,6 +846,7 @@ jobs:
837846 CODE_CHANGES : ${{ needs.changes.outputs.code_changes }}
838847 RUN_TASK_SMOKE : ${{ needs.changes.outputs.run_task_smoke }}
839848 TRACTOR_GATES : ${{ needs.changes.outputs.tractor_gates }}
849+ TRACTOR_HEAVY_GATES : ${{ needs.changes.outputs.tractor_heavy_gates }}
840850 RUN_AUDIT : ${{ needs.changes.outputs.run_audit }}
841851 RUN_BUILD : ${{ needs.changes.outputs.run_build }}
842852 RUN_E2E : ${{ needs.changes.outputs.run_e2e }}
@@ -846,7 +856,7 @@ jobs:
846856
847857 - name : Check all checks
848858 run : |
849- echo "changes: skip_duplicate_push=${{ needs.changes.outputs.skip_duplicate_push }} ci=${{ needs.changes.outputs.ci_changes }} code=${{ needs.changes.outputs.code_changes }} build=${{ needs.changes.outputs.run_build }} e2e=${{ needs.changes.outputs.run_e2e }} tractor_gates=${{ needs.changes.outputs.tractor_gates }} audit=${{ needs.changes.outputs.run_audit }} deep=${{ needs.changes.outputs.run_deep }} base=${{ needs.changes.outputs.base_sha }} filter=${{ needs.changes.outputs.turbo_filter }}"
859+ echo "changes: skip_duplicate_push=${{ needs.changes.outputs.skip_duplicate_push }} ci=${{ needs.changes.outputs.ci_changes }} code=${{ needs.changes.outputs.code_changes }} build=${{ needs.changes.outputs.run_build }} e2e=${{ needs.changes.outputs.run_e2e }} tractor_gates=${{ needs.changes.outputs.tractor_gates }} tractor_heavy_gates=${{ needs.changes.outputs.tractor_heavy_gates }} audit=${{ needs.changes.outputs.run_audit }} deep=${{ needs.changes.outputs.run_deep }} base=${{ needs.changes.outputs.base_sha }} filter=${{ needs.changes.outputs.turbo_filter }}"
850860
851861 if [ "${{ needs.changes.outputs.skip_duplicate_push }}" = "true" ]; then
852862 echo "::notice::Heavy push validation skipped because the open PR run is canonical for this develop head."
0 commit comments