base red: web lint hook fixture pins stand-in lint tools; bounded stream in the Chromium page fake

Merged
TE
3d ago
+21-1

Fixes three base reds on feat-cmux-next. All the changes are test fixtures or test support.

1. cmux-next web lint / web lint (fast) and cmux-next guards / tooling-tests (the "web lint pre-push hook" step). #34237 (9b2b57fe425) made the installed cmux-next gate refuse a hook install with no lint-tools.lock, which is correct. The web lint test fixture never committed a lock, so 32 fixture pushes failed with "the installed hook is older than the checks this push needs ... (it has no lint-tools.lock)". The fixture now commits a lock that pins no-op stand-ins for ast-grep, SwiftFormat and SwiftLint, and points CMUX_LINT_TOOLS_DIR at them. The gate still runs, and nothing is downloaded. Before #34237, this fixture ran the gate's scanners and skipped the pinned tools. The stand-ins find nothing, so the result is the same. TuiBindingsTests reuses that setUp, so it gets the stand-ins too.

2. Main-thread concurrency. #34250 added an AsyncStream.makeStream() with the default unbounded buffer in CmuxNextPagesTestSupport/FakeChromiumHosting.swift:44. It now uses bufferingPolicy: .bufferingNewest(1). Nothing yields to that stream, so its behaviour is unchanged.

Verified: python3 tests/test_web_lint_prepush.py ran on the fleet with bun set up: 103 tests OK, down from 32 failures on base. scripts/cmux-next/check-concurrency.sh Packages/macOS/CmuxNext passes.

Agent session: agent session

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fixes three base reds on feat-cmux-next with test-only changes.

  • The web lint fixture now commits a lint-tools.lock pinning no-op stand-ins for ast-grep, SwiftFormat, and SwiftLint so the installed gate accepts pushes without downloading anything.
  • The hanging-request stream in FakeChromiumHosting now uses bufferingPolicy: .bufferingNewest(1) to pass the main-thread concurrency check; nothing yields to it, so behavior is unchanged.