fix(fuzz): bound settings-fuzz inputs, cap split tiles, budget the slow codecs, steady flakes (#696)

Follow-up to #695, greening the last nightly jobs it exposed. split gains a 400-tile product cap (a 100x100 split was a 10,000-file ZIP and ~20s of work). The settings-fuzz bounds its image inputs to 640px and gives the tools whose cost is output-driven (border, gif-tools, split) or codec-driven (heic/webp-to-avif) honest per-case budgets, since #649's settle-job wiring made every case wait for the real encode. The delete-team serial spec waits with toHaveCount(0) so the success toast can't trip strict mode, and type-to-search allows a route announcer's programmatic reading focus so it works on WebKit. Confirmed on a nightly dispatch: Extended Matrix (all 4 shards), Serial Bucket, Cross-Browser, and Coverage all green; Docker Container E2E's failures were GitHub runner reclamation (exit 137, tests passing throughout), which cleared on the #695 dispatch and is unaffected by this change.
This commit is contained in:
SnapOtter
2026-07-31 06:56:44 +08:00
committed by GitHub
parent 1b41da7615
commit c0dc037860
7 changed files with 111 additions and 4 deletions
+9
View File
@@ -74,6 +74,15 @@ describe("generated fuzz budgets", () => {
);
});
it("gives the heavy-canvas border tool a longer per-case budget", () => {
// A 2000px border on a mid-size image makes a ~5000px canvas plus a large
// gaussian shadow blur, which legitimately exceeds the 8s standard budget
// without crashing (fuzz seed 20260724, #695 follow-up).
const budget = fuzzBudgetFor({ id: "border", executionHint: "fast" }, 25);
expect(budget.costClass).toBe("heavy");
expect(budget.caseTimeoutMs).toBeGreaterThanOrEqual(20_000);
});
it("only overrides real registered tool IDs", () => {
const registered = new Set(TOOLS.map(({ id }) => id));
expect(Object.keys(FUZZ_COST_OVERRIDES).filter((id) => !registered.has(id))).toEqual([]);