|
|
@@ -50,6 +50,132 @@ export const EXCLUDED: readonly Exclusion[] = []; |
| 50 | 50 |
|
| 51 | 51 |
|
| 52 | 52 |
export const SLOW: readonly Exclusion[] = [ |
|
|
|
| 53 |
|
| 54 |
|
| 55 |
{ file: "test/account-budget.test.ts", reason: "starts stand-in agent runs per account to reach and test spend ceilings; 10.5 s a test on the gate box", issue: 1242 }, |
| 56 |
{ file: "test/account-ceiling-reserve.test.ts", reason: "runs two stand-in agent runs together against a daily spend ceiling; 11.4 s a test on the gate box", issue: 1242 }, |
| 57 |
{ file: "test/api-pulls-timing.test.ts", reason: "seeds 130 open pulls with git repositories to time the pulls API; 7.0 s a test on the gate box", issue: 1242 }, |
| 58 |
{ file: "test/apps-adversarial-teardown.test.ts", reason: "races a live preview's deploy against its close and waits out the window; 3.3 s a test on the gate box", issue: 1242 }, |
| 59 |
{ file: "test/apps-crew.test.ts", reason: "runs the crew against a real app, a restart and a push that cannot boot; 3.0 s a test on the gate box", issue: 1242 }, |
| 60 |
{ file: "test/apps-measure.test.ts", reason: "sends 601 reports through the app proxy to reach the rate limit; 3.7 s a test on the gate box", issue: 1242 }, |
| 61 |
{ file: "test/apps-new.test.ts", reason: "waits for a planning call that times out on purpose; 3.2 s a test on the gate box", issue: 1242 }, |
| 62 |
{ file: "test/apps-release-serving.test.ts", reason: "deploys production and a preview of a real app to read their serving rows; 6.5 s a test on the gate box", issue: 1242 }, |
| 63 |
{ file: "test/apps-require-checks-green.test.ts", reason: "holds a merge until a fixed head's real deploy goes green; 2.0 s a test on the gate box", issue: 1242 }, |
| 64 |
{ file: "test/apps-require-checks-red.test.ts", reason: "deploys an app with a failing check, then refuses its merge; 3.4 s a test on the gate box", issue: 1242 }, |
| 65 |
{ file: "test/apps-sleep.test.ts", reason: "restarts the forge with sleeping apps and waits for production to warm; 2.1 s a test on the gate box", issue: 1242 }, |
| 66 |
{ file: "test/apps-slow-test.test.ts", reason: "deploys an app whose test step sleeps on purpose, then waits it out; 9.1 s a test on the gate box", issue: 1242 }, |
| 67 |
{ file: "test/big-clone.test.ts", reason: "clones a big repository over smart http through a throttled link; 4.5 s a test on the gate box", issue: 1242 }, |
| 68 |
{ file: "test/bindings.test.ts", reason: "generates forges and renders every page for every viewer to compare counts; 3.4 s a test on the gate box", issue: 1242 }, |
| 69 |
{ file: "test/body-limits.test.ts", reason: "streams request bodies up to each cap against a real server; 2.6 s a test on the gate box", issue: 1242 }, |
| 70 |
{ file: "test/boot-beside-peer.test.ts", reason: "boots a real forge beside a draining peer and polls healthz throughout; 32.6 s a test on the gate box", issue: 1242 }, |
| 71 |
{ file: "test/boot-no-stall.test.ts", reason: "replays a week of findings through the boot sweeps while sampling the event loop; 9.0 s a test on the gate box", issue: 1242 }, |
| 72 |
{ file: "test/boundary-tokens-gates.test.ts", reason: "asks every registered route and verb with a token bound to another repository; 6.1 s a test on the gate box", issue: 1242 }, |
| 73 |
{ file: "test/branches-deep.test.ts", reason: "builds 200 git branches to compare the 30-row and 200-row pages; 2.2 s a test on the gate box", issue: 1242 }, |
| 74 |
{ file: "test/build-journey.test.ts", reason: "walks a build from plan to production deploy, approval and landing; 5.2 s a test on the gate box", issue: 1242 }, |
| 75 |
{ file: "test/carried-deploy.test.ts", reason: "finishes a real production deploy to read what it records; 2.5 s a test on the gate box", issue: 1242 }, |
| 76 |
{ file: "test/check-disk-hold.test.ts", reason: "queues real checks and waits on the disk sweep to hold and then start one; 10.1 s a test on the gate box", issue: 1242 }, |
| 77 |
{ file: "test/checks-one-core.test.ts", reason: "holds a real check behind a crew run on one core until the run ends; 5.2 s a test on the gate box", issue: 1242 }, |
| 78 |
{ file: "test/coauthors.test.ts", reason: "builds a git history longer than CREDITED_MAX commits to bound the reader; 4.9 s a test on the gate box", issue: 1242 }, |
| 79 |
{ file: "test/code-phases-bench.test.ts", reason: "profiles many served pages and refusals to tally their phases; 2.1 s a test on the gate box", issue: 1242 }, |
| 80 |
{ file: "test/combined-check.test.ts", reason: "builds a kept fork's combined commit with git and runs its check; 3.1 s a test on the gate box", issue: 1242 }, |
| 81 |
{ file: "test/combined-recombine.test.ts", reason: "rebuilds a combined commit with git after a failed rebuild; 2.3 s a test on the gate box", issue: 1242 }, |
| 82 |
{ file: "test/conflicts-tui.test.ts", reason: "builds a real git conflict and drives the terminal over it as two people; 3.3 s a test on the gate box", issue: 1242 }, |
| 83 |
{ file: "test/cookie-flags.test.ts", reason: "walks every source file for cookie-setting sites; 3.0 s a test on the gate box", issue: 1242 }, |
| 84 |
{ file: "test/crew-cancel-by.test.ts", reason: "cancels a running stand-in agent and waits out its process-exit grace; 6.1 s a test on the gate box", issue: 1242 }, |
| 85 |
{ file: "test/crew-check-failed.test.ts", reason: "runs a stand-in agent through a failing check and its fix; 2.2 s a test on the gate box", issue: 1242 }, |
| 86 |
{ file: "test/crew-closed.test.ts", reason: "runs a stand-in agent follow-up on a pull that closes underneath it; 3.4 s a test on the gate box", issue: 1242 }, |
| 87 |
{ file: "test/crew-early.test.ts", reason: "runs the crew with a stand-in Claude Code process per case, each cloning and pushing; 8.9 s a test on the gate box", issue: 1242 }, |
| 88 |
{ file: "test/crew-hot-files.test.ts", reason: "builds pulls with git diffs wide enough to cross WIDE_PULL; 3.0 s a test on the gate box", issue: 1242 }, |
| 89 |
{ file: "test/crew-install.test.ts", reason: "runs bun install in a real clone before the stand-in agent starts; 6.4 s a test on the gate box", issue: 1242 }, |
| 90 |
{ file: "test/crew-mirror.test.ts", reason: "waits out a mirror clone that times out on purpose; 2.1 s a test on the gate box", issue: 1242 }, |
| 91 |
{ file: "test/crew-network.test.ts", reason: "runs stand-in Claude Code processes through injected network errors and retries; 7.7 s a test on the gate box", issue: 1242 }, |
| 92 |
{ file: "test/crew-nocredential.test.ts", reason: "runs the crew with a stand-in Claude Code process that clones and pushes; 9.7 s a test on the gate box", issue: 1242 }, |
| 93 |
{ file: "test/crew-retry.test.ts", reason: "runs a stand-in agent twice, the retry after a failed check; 4.2 s a test on the gate box", issue: 1242 }, |
| 94 |
{ file: "test/crew-run-timing.test.ts", reason: "runs stand-in agent runs end to end to read the laps on their timing line; 6.4 s a test on the gate box", issue: 1242 }, |
| 95 |
{ file: "test/crew-sandbox.test.ts", reason: "runs a sandboxed agent that pushes to a port-mode forge through pre-receive; 5.8 s a test on the gate box", issue: 1242 }, |
| 96 |
{ file: "test/data-door.test.ts", reason: "runs SQL through the data door until the per-person limit holds; 2.1 s a test on the gate box", issue: 1242 }, |
| 97 |
{ file: "test/data-home.test.ts", reason: "starts main.ts as a real process to see it refuse this checkout; 2.4 s a test on the gate box", issue: 1242 }, |
| 98 |
{ file: "test/deadends.test.ts", reason: "crawls every link of a seeded forge once per kind of viewer; 38.9 s a test on the gate box", issue: 1242 }, |
| 99 |
{ file: "test/domain-dns.test.ts", reason: "drives a real terminal session through publishing and cutting over DNS records; 2.2 s a test on the gate box", issue: 1242 }, |
| 100 |
{ file: "test/drill-400mb.test.ts", reason: "restores a 400 MB snapshot through a throttled store, scaled down but still streamed; 26.6 s a test on the gate box", issue: 1242 }, |
| 101 |
{ file: "test/drill-run.test.ts", reason: "spawns the drill script with piped stdin and waits for its JSON; 2.4 s a test on the gate box", issue: 1242 }, |
| 102 |
{ file: "test/drill-verdict.test.ts", reason: "boots a restored directory as a real process on a side port; 2.2 s a test on the gate box", issue: 1242 }, |
| 103 |
{ file: "test/engine-split-soak.test.ts", reason: "soaks 1000 write-then-read round trips beside a second writing engine process; 64.2 s a test on the gate box", issue: 1242 }, |
| 104 |
{ file: "test/engine-split.test.ts", reason: "races two engine threads over the same queued runs; 3.1 s a test on the gate box", issue: 1242 }, |
| 105 |
{ file: "test/forbidden-page.test.ts", reason: "posts to every form route across sites and as a non-admin; 5.4 s a test on the gate box", issue: 1242 }, |
| 106 |
{ file: "test/fork-pull-approval.test.ts", reason: "deploys previews of fork pulls and waits for one to be taken down; 4.2 s a test on the gate box", issue: 1242 }, |
| 107 |
{ file: "test/fuzz-mcp.test.ts", reason: "fuzzes every listed MCP tool with every hostile case as a member; 4.3 s a test on the gate box", issue: 1242 }, |
| 108 |
{ file: "test/gcode.test.ts", reason: "builds and parses a 280,000-line gcode file; 2.1 s a test on the gate box", issue: 1242 }, |
| 109 |
{ file: "test/git-capture-signal.test.ts", reason: "starts a real long-running git and aborts it by signal; 3.0 s a test on the gate box", issue: 1242 }, |
| 110 |
{ file: "test/hollow-cli.test.ts", reason: "runs scripts/hollow.ts, which reads and parses the whole source tree; 15.0 s a test on the gate box", issue: 1242 }, |
| 111 |
{ file: "test/hollow.test.ts", reason: "parses the whole source tree, then a planted copy of it, for unreached work; 11.3 s a test on the gate box", issue: 1242 }, |
| 112 |
{ file: "test/home-frame.test.ts", reason: "renders the signed-in home after writes and times the answer from memory; 2.2 s a test on the gate box", issue: 1242 }, |
| 113 |
{ file: "test/job-slices.test.ts", reason: "ticks every timed job on a busy fixture while sampling the event loop; 2.3 s a test on the gate box", issue: 1242 }, |
| 114 |
{ file: "test/kpis-landings-scale.test.ts", reason: "seeds a production-sized landings table and counts it two ways; 7.5 s a test on the gate box", issue: 1242 }, |
| 115 |
{ file: "test/landsim.test.ts", reason: "simulates landing a seeded corpus of pulls through review and the merge queue; 18.4 s a test on the gate box", issue: 1242 }, |
| 116 |
{ file: "test/live-arrive.test.ts", reason: "drops and restores a live connection in happy-dom, waiting on real timers; 2.8 s a test on the gate box", issue: 1242 }, |
| 117 |
{ file: "test/live-hold.test.ts", reason: "runs the live client on a stubbed DOM with real timers; 30 s for one swap points to a stalled wait; 30.0 s a test on the gate box", issue: 1242 }, |
| 118 |
{ file: "test/loading-chrome.test.ts", reason: "watches the loading indicator across pages in a real Chromium browser; 7.6 s a test on the gate box", issue: 1242 }, |
| 119 |
{ file: "test/maintenance-standby.test.ts", reason: "waits out the standby's answer timeout on the real clock; 2.0 s a test on the gate box", issue: 1242 }, |
| 120 |
{ file: "test/make-it-yours.test.ts", reason: "forks real repositories through the action, the API and the page under a limit; 3.8 s a test on the gate box", issue: 1242 }, |
| 121 |
{ file: "test/map-layout-budget.test.ts", reason: "lays out a production-sized issue map to count its edge work; 5.9 s a test on the gate box", issue: 1242 }, |
| 122 |
{ file: "test/mcp-usage-forge.test.ts", reason: "seeds more apps than one page holds and reads them all over MCP; 2.4 s a test on the gate box", issue: 1242 }, |
| 123 |
{ file: "test/merge-queue-parallel.test.ts", reason: "lands sixteen real pulls through two parallel merge-queue candidates; 5.0 s a test on the gate box", issue: 1242 }, |
| 124 |
{ file: "test/merge-queue.test.ts", reason: "lands real pulls through the merge queue, each with a git merge and a gate; 5.5 s a test on the gate box", issue: 1242 }, |
| 125 |
{ file: "test/model-grant.test.ts", reason: "starts stand-in agent runs under each kind of model grant and waits for them; 10.0 s a test on the gate box", issue: 1242 }, |
| 126 |
{ file: "test/no-polling.test.ts", reason: "walks every page the router lists, signed in as admin; 2.1 s a test on the gate box", issue: 1242 }, |
| 127 |
{ file: "test/oauth-connect-browser.test.ts", reason: "walks the OAuth connect flow in a real Chromium browser; 15.8 s a test on the gate box", issue: 1242 }, |
| 128 |
{ file: "test/origin-every-mutation.test.ts", reason: "posts to every mutating route with a foreign Origin as a signed-in user; 3.0 s a test on the gate box", issue: 1242 }, |
| 129 |
{ file: "test/outsiders-member.test.ts", reason: "runs a member's repository through a stand-in agent run end to end; 6.1 s a test on the gate box", issue: 1242 }, |
| 130 |
{ file: "test/overlap.test.ts", reason: "runs two forge processes on one data directory to see each job start once; 4.6 s a test on the gate box", issue: 1242 }, |
| 131 |
{ file: "test/packs-up.test.ts", reason: "boots a real forge and deploys a pack into it with its history; 13.5 s a test on the gate box", issue: 1242 }, |
| 132 |
{ file: "test/page-budget.test.ts", reason: "renders every first page warm against a seeded forge to count its SQL statements; 11.7 s a test on the gate box", issue: 1242 }, |
| 133 |
{ file: "test/pages-budget.test.ts", reason: "renders every GET page warm against a seeded forge to count its work; 5.7 s a test on the gate box", issue: 1242 }, |
| 134 |
{ file: "test/pick.test.ts", reason: "seeds 150 repositories with git to render the new-forge pick list; 3.8 s a test on the gate box", issue: 1242 }, |
| 135 |
{ file: "test/pull-merge-states-cache.test.ts", reason: "recomputes git merge states for many pulls after the base moves; 6.3 s a test on the gate box", issue: 1242 }, |
| 136 |
{ file: "test/pull-pipe.test.ts", reason: "pipes 200 MB from a child process to measure blocking and wakeups; 2.0 s a test on the gate box", issue: 1242 }, |
| 137 |
{ file: "test/pull-tui-check-tick.test.ts", reason: "drives a real terminal session while a check writes its counts; 5.2 s a test on the gate box", issue: 1242 }, |
| 138 |
{ file: "test/pull-variants.test.ts", reason: "runs two stand-in agent variants that each clone, push and open a pull; 10.7 s a test on the gate box", issue: 1242 }, |
| 139 |
{ file: "test/pulls-merge-budget.test.ts", reason: "seeds 50 pulls with git and a deliberately slow merge check; 5.5 s a test on the gate box", issue: 1242 }, |
| 140 |
{ file: "test/quotas-running.test.ts", reason: "waits for a queued stand-in agent run to start after the first one ends; 10.5 s a test on the gate box", issue: 1242 }, |
| 141 |
{ file: "test/rehearsal-real.test.ts", reason: "rolls between two real forge processes on one data directory, waiting out probe periods; 34.6 s a test on the gate box", issue: 1242 }, |
| 142 |
{ file: "test/release-boot.test.ts", reason: "copies src/ as the image ships it and boots that tree as a real process; 3.0 s a test on the gate box", issue: 1242 }, |
| 143 |
{ file: "test/release-handover.test.ts", reason: "rolls a release between two real forge processes with a git push in flight; 28.5 s a test on the gate box", issue: 1242 }, |
| 144 |
{ file: "test/release-launch.test.ts", reason: "waits out the readiness grace of a version that never becomes ready; 2.1 s a test on the gate box", issue: 1242 }, |
| 145 |
{ file: "test/release-load-run.test.ts", reason: "load-tests a forge stand-in answering in 150 ms to measure p95; 5.1 s a test on the gate box", issue: 1242 }, |
| 146 |
{ file: "test/release-preflight.test.ts", reason: "runs the release preflight on a copy of a seeded live database; 4.8 s a test on the gate box", issue: 1242 }, |
| 147 |
{ file: "test/release-prove.test.ts", reason: "waits between proof attempts on a release, on the real clock; 3.0 s a test on the gate box", issue: 1242 }, |
| 148 |
{ file: "test/release-rollback.test.ts", reason: "runs the release script as a child process per command line case; 2.4 s a test on the gate box", issue: 1242 }, |
| 149 |
{ file: "test/release-smoke.test.ts", reason: "waits out hanging first loads in the release smoke test, on the real clock; 2.4 s a test on the gate box", issue: 1242 }, |
| 150 |
{ file: "test/release-swap.test.ts", reason: "waits for a release that never comes up to time out before keeping the old process; 5.5 s a test on the gate box", issue: 1242 }, |
| 151 |
{ file: "test/repo-head-fit.test.ts", reason: "measures a repository page at 390x844 in a real Chromium browser; 2.5 s a test on the gate box", issue: 1242 }, |
| 152 |
{ file: "test/restore-drill-script.test.ts", reason: "restores from a bucket and boots the result as a real process; 2.3 s a test on the gate box", issue: 1242 }, |
| 153 |
{ file: "test/roll-write-pause.test.ts", reason: "rolls between two real forge processes with a gate and a check in flight; 10.0 s a test on the gate box", issue: 1242 }, |
| 154 |
{ file: "test/runner-measure.test.ts", reason: "runs stand-in agent runs end to end to store each run's measure; 10.4 s a test on the gate box", issue: 1242 }, |
| 155 |
{ file: "test/search.test.ts", reason: "waits out a hung origin's search budget while the other sources answer; 5.0 s a test on the gate box", issue: 1242 }, |
| 156 |
{ file: "test/security-sweep.test.ts", reason: "asks every registered route and verb anonymously and checks each response; 3.2 s a test on the gate box", issue: 1242 }, |
| 157 |
{ file: "test/server-timing-sweep.test.ts", reason: "renders every GET page to read its Server-Timing header; 2.2 s a test on the gate box", issue: 12244 }, |
| 158 |
{ file: "test/session-settle.test.ts", reason: "waits for the idle guard to close a session's owed turn; 2.8 s a test on the gate box", issue: 1242 }, |
| 159 |
{ file: "test/shards-run.test.ts", reason: "runs scripts/test-shards.ts as a child process on fixture trees, per case; 4.4 s a test on the gate box", issue: 1242 }, |
| 160 |
{ file: "test/signup-fresh.test.ts", reason: "boots main.ts on an empty data directory as a real process; 3.1 s a test on the gate box", issue: 1242 }, |
| 161 |
{ file: "test/signup-gate-parent.test.ts", reason: "walks every caller of createUser in the source tree; 2.3 s a test on the gate box", issue: 1242 }, |
| 162 |
{ file: "test/snapshot-uplink.test.ts", reason: "uploads a 400 MB snapshot in parts through a throttled uplink; 4.5 s a test on the gate box", issue: 1242 }, |
| 163 |
{ file: "test/spawn-cell-e2e.test.ts", reason: "spawns a child forge into a real cell and serves its app through the forward; 25.4 s a test on the gate box", issue: 1242 }, |
| 164 |
{ file: "test/spawn-cell.test.ts", reason: "boots a real child forge in its own cell and waits for its first request; 21.7 s a test on the gate box", issue: 1242 }, |
| 165 |
{ file: "test/spawn-move-cell-e2e.test.ts", reason: "moves a running child forge into a real cell with its data, repository and app; 13.1 s a test on the gate box", issue: 1242 }, |
| 166 |
{ file: "test/spawn-small-cell.test.ts", reason: "boots a child forge in a real cell and restarts it to check its limits; 33.3 s a test on the gate box", issue: 1242 }, |
| 167 |
{ file: "test/ssh-port-taken.test.ts", reason: "boots main.ts as a real process with its SSH port already held; 14.2 s a test on the gate box", issue: 1242 }, |
| 168 |
{ file: "test/standby-restore.test.ts", reason: "boots a restored snapshot read-only as a real process; 3.1 s a test on the gate box", issue: 1242 }, |
| 169 |
{ file: "test/subscriptions.test.ts", reason: "runs stand-in agents on granted accounts, waiting for a refusal and a handover; 10.4 s a test on the gate box", issue: 1242 }, |
| 170 |
{ file: "test/tui-ask-data.test.ts", reason: "drives a real terminal session through rule and model answers; 2.2 s a test on the gate box", issue: 1242 }, |
| 171 |
{ file: "test/tui-autonomy.test.ts", reason: "drives a real terminal session through the autonomy settings and week screen; 2.0 s a test on the gate box", issue: 1242 }, |
| 172 |
{ file: "test/tui-boards-rename.test.ts", reason: "drives a real terminal session through board renames; 3.1 s a test on the gate box", issue: 1242 }, |
| 173 |
{ file: "test/tui-deploys.test.ts", reason: "drives a real terminal session through adding, checking and removing a domain; 4.8 s a test on the gate box", issue: 1242 }, |
| 174 |
{ file: "test/tui-economics.test.ts", reason: "drives a real terminal session through the economics screens; 3.1 s a test on the gate box", issue: 1242 }, |
| 175 |
{ file: "test/tui-fleet.test.ts", reason: "drives a real terminal session through preview, apply and undo; 2.7 s a test on the gate box", issue: 1242 }, |
| 176 |
{ file: "test/tui-notes.test.ts", reason: "drives a real terminal session as a person and as the admin over notes; 3.1 s a test on the gate box", issue: 1242 }, |
| 177 |
{ file: "test/tui-talk-build.test.ts", reason: "drives a real terminal session through a build, its files, restore and publish; 2.1 s a test on the gate box", issue: 1242 }, |
| 178 |
{ file: "test/tui-tell.test.ts", reason: "drives a real terminal session to send and read tells; 2.7 s a test on the gate box", issue: 1242 }, |
| 53 | 179 |
{ |
| 54 | 180 |
file: "test/snappy.test.ts", |
| 55 | 181 |
reason: "the cold home takes 20 timed requests at ~65 ms, each after a write, until its per-app reads are grouped", |
|
|
@@ -87,9 +213,29 @@ export function auditGate( |
| 87 | 213 |
return auditList("EXCLUDED", present, excluded); |
| 88 | 214 |
} |
| 89 | 215 |
|
| 216 |
|
| 217 |
|
| 218 |
|
| 219 |
|
| 220 |
|
| 221 |
const MEASURE_WORDS = new Set(["gate", "box", "s", "ms", "alone", "one", "test", "tests", "a", "file", "the", "took", "over", "budget", "seconds"]); |
| 222 |
const REASON_MAX = 160; |
| 223 |
|
| 224 |
|
| 225 |
export function slowReasonProblem(reason: string): string | undefined { |
| 226 |
if (/[\r\n]/.test(reason)) return "a reason of more than one line"; |
| 227 |
if (reason.length > REASON_MAX) return `a reason over ${REASON_MAX} characters`; |
| 228 |
if (/(…|\.\.\.)\s*$/.test(reason)) return "a reason cut off mid-sentence"; |
| 229 |
if (/\(unnamed\)/.test(reason)) return "an unnamed test for a reason"; |
| 230 |
const words = (reason.toLowerCase().match(/[a-z]+/g) ?? []).filter((w) => !MEASURE_WORDS.has(w)); |
| 231 |
if (words.length < 2) return "only a time for a reason: say why it is slow"; |
| 232 |
return undefined; |
| 233 |
} |
| 234 |
|
| 90 | 235 |
|
| 91 | |
|
| 92 | |
|
| 236 |
|
| 237 |
|
| 238 |
|
| 93 | 239 |
|
| 94 | 240 |
|
| 95 | 241 |
export function slowRefusal( |
|
|
@@ -100,6 +246,10 @@ export function slowRefusal( |
| 100 | 246 |
const out = new Set(excluded.map((e) => e.file)); |
| 101 | 247 |
const problems = [ |
| 102 | 248 |
...auditList("SLOW", present, slow), |
| 249 |
...slow.flatMap(({ file, reason }) => { |
| 250 |
const problem = typeof reason === "string" && reason.trim() !== "" ? slowReasonProblem(reason) : undefined; |
| 251 |
return problem === undefined ? [] : [`${file} is in SLOW with ${problem}`]; |
| 252 |
}), |
| 103 | 253 |
...[...new Set(slow.map((e) => e.file))].filter((f) => out.has(f)).map((f) => `${f} is in both EXCLUDED and SLOW`), |
| 104 | 254 |
]; |
| 105 | 255 |
if (problems.length === 0) return []; |
Times from logs 'of 2026-11-13' are a snapshot, not this pull's check. Replace with the breaches the check log names for this head, each with a human reason and the narrowest owning issue.