ci: bound the remaining unbounded CI jobs on main - #79
Conversation
The fleet timeout sweep bounded the development branches; main carries an older, separate copy of these workflows that was missed. Add job-level timeout-minutes so a hung runner fails fast instead of burning the full 6-hour GitHub default. Bounds are deliberately loose relative to observed durations: a timeout that fires under normal contention turns a slow run into a phantom defect. The goal is to catch a hang, not to enforce speed. Jobs that call a reusable workflow via uses: are untouched - GitHub rejects timeout-minutes on such a job and the whole file becomes a startup_failure. Those are bounded at source in ConductionNL/.github.
Quality Report — ConductionNL/deskdesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ❌ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-08-03 13:33 UTC
Download the full PDF report from the workflow artifacts.
Red checks on this PR pre-date the change — proven on the base SHAI opened a throwaway control PR whose head tree is byte-identical to The failures are content drift between Positive control that the probe discriminates: the branch-protection check fails on the control (its branch name is neither Merging with Base-SHA control: #80 (closed). |
|
Verified before merge: no new timeout fired, and the red checks are pre-existing. 1. None of the jobs this PR bounds hit its timeout. Measured on this PR's head SHA:
2. The failures are inherent to the branch tree, not to this diff. This PR is additions-only and touches only files under Where Merging with |
What
Adds job-level
timeout-minutesto the CI jobs onmainthat still had none.A fleet-wide sweep bounded these repos'
developmentbranches.maincarries anolder, separate copy of the same workflows that the sweep missed, so those jobs were
still running with GitHub's 6-hour default: a hung runner burns six hours of minutes
and blocks the queue before anyone notices.
.github/workflows/pull-request-lint-check.yamllint-checkWhy these numbers
Measured from actual fleet run history (successful + failed executions only; skipped
records excluded, since they otherwise drag every median to zero):
lint-checkvalidatecheck-source-branch(Branch Policy Check)The bounds are deliberately loose — roughly an order of magnitude above observed max.
A timeout that fires under normal contention is worse than no timeout: it converts
a slow run into a phantom defect and trains people to re-run red checks. The goal is to
catch a hang, not to enforce speed. Please do not tighten these.
What is deliberately NOT touched
Every other job in these repos'
.github/workflowsis a reusable-workflow caller(
uses: ConductionNL/.github/...). GitHub rejectstimeout-minuteson such a job andturns the whole file into a
startup_failure, so those are bounded at source inConductionNL/.github(already merged). No job in this PR is auses:caller.Verification
mainwithyaml.safe_loadrather than taken on trust.asserted to carry its exact expected value, and every untouched job asserted byte-equal.
Noneforeach target job, so it distinguishes bounded from unbounded rather than emitting a constant.
actionlinton the edited files produces exactly the findings the base files alreadyproduce (only line numbers shift) — zero new findings.
N 0in--numstat, no deletion lines) and confined to.github/workflows/.