Repository navigation
Conversation
|
cherry-picked onto 73ffdcbbe |
result |
|---|---|
335e2945b alone (this PR) |
conflict in ci.yml |
351531d89 then 335e2945b |
clean |
the two squashed into one commit (65982e460) |
clean — ci.yml, install.yml, detect-code-changes.yml |
So the content is good and upstream-ready; only the commit boundary is wrong.
This will be folded into the ci: skip the test jobs on documentation-only pull requests commit on the stack, in the same way a chore(fork) change is folded into the fork base, and this PR closed unmerged. The merged result is byte-identical to what is on this branch.
Worth recording
No human review would have caught this. The diff is clean, the YAML is valid, every test passes, and the change is plainly correct against integration/3.0. The defect is only visible against a tree nobody had locally. One automated cherry-pick onto pure upstream found it in 26 seconds — concrete evidence for Gate 2 earning its place when the rest of the ceremony was removed.
335e294 to
031a545
Compare
|
Parked as a draft. Both review findings are fixed (step-level matrix gating, proved by #24; rename detection and fail-safe predicates carried over from #15), but Gate 2 is blocked on Emerge-Lab#602 for the structural reason now written up in the description. Nothing to do here until that lands upstream. |
351531d to
aacc53d
Compare
CI already skips its test jobs when a pull request touches nothing outside the documentation paths, but the six-job installation matrix still runs. Move the detector into a reusable workflow so both callers share one implementation, and gate the installation matrix on its answer. The gating is deliberately asymmetric. CI's jobs are ordinary named jobs, so a job-level condition skips them and still reports each required context as skipped. The installation job is a matrix, and GitHub evaluates a job-level `if` before expanding it: skipping the job emits a single unexpanded check, so the six required contexts never report and the pull request hangs at "Expected" forever. That job therefore always expands, and the predicate moves to its steps. Both paths fail safe. Work is skipped only when the detector ran to success and positively reported code=false; failure, cancellation, a skip or an empty output all run the suite, so a broken detector costs time rather than coverage.
031a545 to
ba719b5
Compare
What
Moves the documentation-only detector into a reusable workflow and gates the six-job installation matrix on it, so a pull request that touches only Markdown stops paying for
pip installon six runners.Why
#15 skipped CI's five heavy jobs on documentation-only pull requests, but left the installation matrix running. This finishes the job.
Notes
This PR is parked. It cannot pass
Fork gatesuntil upstream merges Emerge-Lab#602, and that is a correct result rather than a defect in the change. See below.Gate 2 cannot pass yet, and the reason is structural
Gating the installation matrix means editing its
Install pufferlib (Linux)andInstall pufferlib (macOS)steps. Those two steps exist only because of ourfix(ci): install CPU-only torch wheelscommit — upstream still has a single, undividedInstall pufferlibstep. The commit therefore depends on a fork feature that upstream has not merged, and cherry-picking it onto pureupstream/3.0conflicts.Measured directly, by cherry-picking onto
upstream/3.0(73ffdcbbe):ci.ymlcallinstall.ymlgatinginstall.ymlSo the detector refactor is upstream-ready; only the installation gating is entangled. Splitting them is not worth it — the reusable workflow exists to serve the second caller, and with one caller it is pure overhead.
Per
.github/copilot-instructions.md§4.8, a feature that is good but not yet upstream-ready does not go on the stack. The branch stays as-is and is ready to merge the moment Emerge-Lab#602 lands upstream; re-runFork gatesthen.A second defect, found and fixed here
The first revision gated the matrix at job level. That would have deadlocked every documentation-only pull request: GitHub evaluates a job-level
ifbefore expanding the matrix, so a skipped matrix job reports a single check with the raw, uninterpolated name and the six required contexts never appear at all. Branch protection would wait at Expected forever.Verified empirically in #24, which ran both styles side by side on a real pull request:
probe joblevel ${{ matrix.py }} - ${{ matrix.os }};The matrix job now carries
if: always()and the predicate sits on its steps, written once as a step output so the five steps cannot drift apart.Non-matrix jobs are unaffected — #22 confirmed CI's ordinary jobs report a proper skipped check and leave
mergeStateStatusatCLEAN.Validation
pre-commit run --all-files— passed (all 5 hooks)install.ymlgating behaviour proved by probe [probe] how does a skipped matrix job report its checks #24;ci.ymlskip behaviour proved by probe [probe] docs-only CI skip #22forkctl track): workflow files only, nothing sim-affectingUpstream readiness
Not ready, and deliberately so. Blocked on Emerge-Lab#602.