Filed unassigned by the #12795 dev, session session_01Pk26oZ12t5N1hwGW1m1MgC (domain:devx lane), as an out-of-scope by-product of timing all 116 root check:* families. Recording only — severity not judged, not graded, not routed.
What was measured
Timing the gate farm for #12795 turned up a floor that has nothing to do with the gates. Every pnpm check:NAME invocation costs about 970 ms before the gate script begins:
| measurement | time |
|---|
pnpm check:node-version, three reps | 966 / 989 / 971 ms |
node scripts/check-node-version.mjs — the same gate, no pnpm | 101 ms |
node scripts/check-console-sha.mjs | 57 ms |
node -e 'process.exit(0)' — control | 39 ms |
So for the light families roughly 97% of the wall time is pnpm's own startup. This is not a slow gate; it is a fast gate behind a slow launcher.
It is also most of the farm. Of 116 root families, 48 land in the 1-2 s bucket and 6 finish under a second — the fastest at 934 ms, which is essentially the floor above. Measured p50 across the whole farm is 2.3 s.
Why it is worth a card
.github/workflows/lint.yml carries 130 distinct pnpm check:* invocations. At the measured floor that is roughly 126 s — about two minutes — of pure process startup per Lint & Repo Gates run, paid on every pull request, before any gate does any work. It is one of the six required contexts, so it is on the critical path of every merge.
What this is not
- ⛔ Not a claim that any gate is wrongly written. The scripts themselves are fast; several are under 100 ms.
- ⛔ Not a proposal. Batching families into one node process, invoking
node scripts/... directly where the script takes no pnpm-provided environment, or leaving it alone because two minutes of a much longer job is not worth the coupling — all three are live options and none of them was evaluated here. - ⛔ Not measured: whether the pnpm floor is the same in the CI runner as in this container, and whether any of these gates actually depend on something pnpm puts in the environment. Both would have to be checked before acting.
Re-check
for i in 1 2 3; do
t0=$(date +%s%N); pnpm check:node-version >/dev/null 2>&1
t1=$(date +%s%N); echo "$(( (t1-t0)/1000000 ))ms"
done
t0=$(date +%s%N); node scripts/check-node-version.mjs >/dev/null 2>&1
t1=$(date +%s%N); echo "bare node: $(( (t1-t0)/1000000 ))ms"
grep -oE 'pnpm (--filter [^ ]+ )?(run )?check:[a-z0-9-]+' .github/workflows/lint.yml | sort -u | wc -l
⚠️ Shared-box seconds: one container, 4 cores, sibling agents live. The ratio between the two spellings is the durable part, not the absolutes.
Refs
Filed unassigned by the #12795 dev, session
session_01Pk26oZ12t5N1hwGW1m1MgC(domain:devxlane), as an out-of-scope by-product of timing all 116 rootcheck:*families. Recording only — severity not judged, not graded, not routed.What was measured
Timing the gate farm for #12795 turned up a floor that has nothing to do with the gates. Every
pnpm check:NAMEinvocation costs about 970 ms before the gate script begins:pnpm check:node-version, three repsnode scripts/check-node-version.mjs— the same gate, no pnpmnode scripts/check-console-sha.mjsnode -e 'process.exit(0)'— controlSo for the light families roughly 97% of the wall time is pnpm's own startup. This is not a slow gate; it is a fast gate behind a slow launcher.
It is also most of the farm. Of 116 root families, 48 land in the 1-2 s bucket and 6 finish under a second — the fastest at 934 ms, which is essentially the floor above. Measured p50 across the whole farm is 2.3 s.
Why it is worth a card
.github/workflows/lint.ymlcarries 130 distinctpnpm check:*invocations. At the measured floor that is roughly 126 s — about two minutes — of pure process startup perLint & Repo Gatesrun, paid on every pull request, before any gate does any work. It is one of the six required contexts, so it is on the critical path of every merge.What this is not
node scripts/...directly where the script takes no pnpm-provided environment, or leaving it alone because two minutes of a much longer job is not worth the coupling — all three are live options and none of them was evaluated here.Re-check
Refs
check:*runs should be routed throughos-verify-lock— the throughput/contention trade is currently unmeasured #12795 — the routing measurement this fell out of; its audit records the same figures as a correction to the premise that "most families are sub-second" (true of the scripts, false of the invocations).