Skip to content

ci: guard against new short hard timeouts - #35209

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/timeout-guard
Nov 4, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/timeout-guard

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

This adds a Linux guard for new hard timeout literals below 30 seconds in the app/daemon, acpmux, CLI, and agent-session paths. Existing debt is captured in tests/short-timeout-allowlist.json; counts only shrink. python3 scripts/ci/check_short_timeouts.py --update regenerates the snapshot after an intentional fix, preserving reasons, so the timeout-removal lanes can ratchet entries down after this merges.

Leo said: “shouldn't be this short. no reason for this. i imagine there's other nonsensical gates like this to remove in the broader app/acpmux”. The guard accepts an adjacent // timeout: <reason> or # timeout: <reason> only when a real hazard justifies a bound. It excludes Rust *_tests.rs and #[cfg(test)] modules.

Regression coverage: tests/test_short_timeout_guard.py proves a new 2-second deadline fails, the same line with // timeout: hung peer passes, wrapped Swift durations, millisecond units, uppercase TS timeout constants, the language patterns and Rust test-module exclusion, and ratchet growth/shrink behavior. On the current merged head 6bc4383a3015: python3 tests/test_short_timeout_guard.py passes 5 tests; python3 scripts/ci/check_short_timeouts.py reports 278 retained hits in 194 file:pattern entries. The branch merges the current feat-cmux-next tip to resolve the landing conflict.

The guard is registered in tests/test-execution.toml as linux-guard and runs in .github/workflows/ci-guards.yml.

Gates found at the merged base

Every row below is a pre-existing hard timeout retained in the shrink-only allowlist. The source column shows the old literal and what it guards; verdict is “retained debt; remove, replace with liveness, or lower the allowlist count.”

  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxChatProjects.swift:48 — swift-duration — @concurrent public static func read(socketPath: String, deadline: Duration = .seconds(5)) async throws -> AcpmuxChatProjects { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxCheckedLine.swift:51 — swift-socket-timeout — _ = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, socklen_t(MemoryLayout<timeval>.size)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxComputerUse.swift:29 — swift-duration — deadline: .seconds(5) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxDaemonLauncher.swift:88 — swift-duration — @concurrent static func launch(_ environment: AcpmuxEnvironment, deadline: Duration = .seconds(20)) async throws -> AcpmuxWebEndpoint { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxDaemonLauncher.swift:101 — swift-duration — @concurrent static func launchReporting(_ environment: AcpmuxEnvironment, deadline: Duration = .seconds(20)) async throws -> Launched { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxEnvironment+HostPressure.swift:15 — swift-duration — public nonisolated func stopSession(id: String, deadline: Duration = .seconds(5)) async throws { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxEnvironment+Inventory.swift:17 — swift-duration — params: ["view": "inventory"], deadline: .seconds(5), — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxEnvironment+WorkspacePurge.swift:8 — swift-duration — public nonisolated func purgeWorkspace(key: String, deadline: Duration = .seconds(5)) async throws { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxHarnessList.swift:53 — swift-duration — @concurrent static func harnesses(socketPath: String, deadline: Duration = .seconds(5)) async throws -> ResultBox { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxMachineConsent.swift:14 — swift-duration — public static let deadline: Duration = .milliseconds(1200) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxPeerUpdateCommand.swift:27 — swift-duration — var killGrace: Duration = .seconds(10) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxPeerUpdateTarget.swift:174 — swift-duration — deadline: .seconds(5)) else { return nil } — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxPersonKey.swift:121 — swift-duration — deadline: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxSessionCensus.swift:101 — swift-duration — @concurrent public static func census(_ environment: AcpmuxEnvironment?, deadline: Duration = .seconds(1)) async -> AcpmuxSessionCensus? { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxSessionCensus.swift:161 — swift-duration — status = try await AcpmuxStatusClient.status(socketPath: socket, deadline: .seconds(2)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxSessionCensus.swift:163 — swift-duration — ? keptSessions(result(try await activeSessions(socketPath: socket, deadline: .seconds(2))), keep: keep) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxStatusClient.swift:85 — swift-duration — deadline: Duration = .seconds(2)) async throws { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxStatusClient.swift:224 — swift-duration — deadline: Duration = .seconds(5)) async throws -> AgentPaneHarnessEnablePrompt { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AcpmuxStatusClient.swift:258 — swift-duration — deadline: Duration = .seconds(5)) async throws -> AgentPaneSessionFolder? { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneAddAccount.swift:35 — swift-duration — params: params, deadline: .seconds(20), detailed: true) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneChatsPage.swift:78 — swift-duration — deadline: Duration = .seconds(3)) async throws -> AgentPaneChatsPage { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneGitDiscard.swift:52 — swift-duration — static let timeout: Duration = .seconds(20) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneGitProcess.swift:24 — swift-duration — let top = await output(["-C", folder, "rev-parse", "--show-toplevel"], timeout: .seconds(20)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneGitStage.swift:29 — swift-duration — static let timeout: Duration = .seconds(20) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHibernationCapture.swift:20 — swift-duration — let frame = try? await ControlDeadline.shared.run(method: "hibernation.agentSnapshot", deadline: .now + .seconds(2)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:297 — swift-duration — deadline: .milliseconds(200)) else { return nil } — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:416 — swift-duration — let deadline = ContinuousClock.now + .seconds(3) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:417 — swift-duration — var delay: Duration = .milliseconds(100) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:429 — swift-duration — delay = min(delay * 2, .milliseconds(500)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:501 — swift-duration — let deadline = ContinuousClock.now + .seconds(3) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:502 — swift-duration — var delay: Duration = .milliseconds(100) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneHost.swift:510 — swift-duration — delay = min(delay * 2, .milliseconds(500)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPanePendingAsks.swift:63 — swift-duration — deadline: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneSafeFetch.swift:21 — swift-duration — static let timeout: Duration = .seconds(10) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneSessionCopySocket.swift:13 — swift-duration — params: ["sessionId": sessionID], deadline: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneSessionCopySocket.swift:21 — swift-duration — params: ["sessionId": sessionID], deadline: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneShellCompletion.swift:15 — swift-duration — public static let deadline: Duration = .seconds(4) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTransport+Check.swift:46 — swift-duration — deadline: .seconds(2)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView+MoveCover.swift:84 — swift-duration — deadline.schedule(after: .seconds(3)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Approvals/AcpmuxPersonLine.swift:29 — swift-duration — public static func open(_ environment: AcpmuxEnvironment, deadline: Duration = .seconds(5)) async -> AcpmuxPersonLine? { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/LocalRouterClient.swift:64 — swift-duration — @concurrent public func setUpstream(origin: String, bearer: String, expiresAt: UInt64, deadline: Duration = .seconds(3)) async throws -> Int? { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/LocalRouterClient.swift:108 — swift-duration — @concurrent public func clearUpstream(deadline: Duration = .seconds(3)) async throws { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/ProcessLauncher.swift:19 — swift-duration — public init(timeout: Duration = .seconds(10), clock: any Clock<Duration> = ContinuousClock()) { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/BrowserHost/AppBrowserHostTabs.swift:182 — swift-duration — let appeared = try? await ControlDeadline.shared.run(method: "tabs.open", deadline: .now + .seconds(10)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/BrowserHost/AppBrowserHostTabs.swift:269 — swift-duration — _ = try? await ControlDeadline.shared.run(method: "tabs.close", deadline: .now + .seconds(5)) { @MainActor [weak self] in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/BrowserProfiles/AgentBrowserProfile.swift:41 — swift-duration — static func ensure(_ profiles: BrowserProfileService, deadline: Duration = .seconds(5)) async throws -> String { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/CloudService+AppServer.swift:156 — swift-timeoutInterval — request.timeoutInterval = 15 — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/ComputerUse/ComputerUseSetup.swift:251 — swift-duration — deadline: .seconds(2)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/ComputerUse/ComputerUseSetup.swift:367 — swift-duration — status = try await CuaSocketClient(configuration: configuration).send("permissions_status", deadline: .seconds(2)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/ComputerUse/CuaComputerUseSessions.swift:39 — swift-duration — return try await CuaSocketClient(configuration: configuration).send(method, args, deadline: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Control/AppControl+Accounts.swift:17 — swift-duration — let network: ControlMethod.Deadline = .fixed(.seconds(20)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Control/AppControl+Billing.swift:19 — swift-duration — let network: ControlMethod.Deadline = .fixed(.seconds(22)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Control/AppControl+Updates.swift:37 — swift-duration — let answerBy = call.deadline - .milliseconds(150) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Control/AppControl+VMAgentKey.swift:22 — swift-timeoutInterval — request.timeoutInterval = 20 — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Crash/AppRunMarker.swift:203 — swift-duration — func flush(timeout: Duration = .seconds(5)) async -> Bool { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Feed/FeedInstallPrincipal.swift:53 — swift-timeoutInterval — request.timeoutInterval = 15 — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Feed/FeedService.swift:292 — swift-timeoutInterval — request.timeoutInterval = 15 — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/GlobalSearch/TerminalTextSearch.swift:18 — swift-duration — static let timeout: Duration = .seconds(2) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/AgentHandlers+Pane.swift:34 — swift-duration — deadline: .now + .seconds(10) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/ChiefInspectorHandlers.swift:254 — swift-timeoutInterval — request.timeoutInterval = 5 — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/ChiefInspectorHandlers.swift:184 — swift-duration — let located = try? await ControlDeadline.shared.run(method: "chief-inspector.reveal", deadline: .now + .seconds(5)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/CloudHandlers+Network.swift:122 — swift-duration — deadline: .seconds(10), label: "ssh -G") — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Hibernation/BrowserHibernation+Restore.swift:116 — swift-duration — let ended = try? await ControlDeadline.shared.run(method: "hibernation.wake", deadline: .now + .seconds(15)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Hibernation/BrowserHibernation.swift:723 — swift-duration — try? await ControlDeadline.shared.run(method: "hibernation.snapshot", deadline: .now + .seconds(2)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/History/HistoryControl.swift:103 — swift-duration — _ = try? await ControlDeadline.shared.run(method: "debug.history_cookie_backups", deadline: .now + .seconds(5)) { @MainActor in — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/HomeLinkPreviewProvider.swift:92 — swift-duration — let screen = try? await connection.request(ReadScreenRequest(surface: tab.surface), timeout: .seconds(2)) else { return out } — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Onboarding/ExternalOpenController.swift:29 — swift-duration — let peers = try? await AcpmuxPeerList(socketPath: socket).peers(deadline: .seconds(1)) else { return saved } — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/Files/MarkdownShare/MarkdownGitRunning.swift:19 — swift-duration — var timeout: Duration = .seconds(5) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/Files/RemoteImagePolicy.swift:12 — swift-duration — static let timeout: Duration = .seconds(15) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Quit/QuitFactsReader.swift:11 — swift-duration — nonisolated static let deadline: Duration = .seconds(1) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Remote/JoinConsent+App.swift:33 — swift-duration — guard let data = await cli?.json(["acp", "host", "join", "--status", "--json"], deadline: .seconds(10), label: "join status") — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Server/LocalServerSource.swift:198 — swift-duration — timeout: .seconds(15), clock: ContinuousClock()) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Server/ServerReachService.swift:335 — swift-duration — timeout: .seconds(10), clock: ContinuousClock()), — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/ServerUpdates/ServerTailnetSource.swift:15 — swift-duration — return ServerTailnetSource(hostStatus: { await cli?.json(["host", "status", "--json"], deadline: .seconds(10), label: "host status") }) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/SessionTransfer/SessionTransferService+Chats.swift:100 — swift-duration — environment: variables, timeout: .seconds(10), clock: ContinuousClock()), — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/SessionTransfer/SessionTransferService.swift:92 — swift-duration — let info = await connection.readProcessInfo(id, timeout: .milliseconds(500)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/SessionTransfer/SessionTransferService.swift:135 — swift-duration — if let list = try? await ControlPeerClient.request(path: path, method: "session.transfer.list", timeout: .seconds(5)), — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/SessionTransfer/SessionTransferService.swift:164 — swift-duration — let list = try? await ControlPeerClient.request(path: peer.path, method: "session.transfer.list", timeout: .seconds(5)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/TopPages/TopPages.swift:62 — swift-duration — let listed = try await ProcessRunner.run(executable: cli, arguments: ["--json", "automation", "list"], environment: nil, timeout: .seconds(10), clock: ContinuousClock()) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Usage/AppResourceSource.swift:86 — swift-duration — let response = try? await connection.request(request, timeout: .seconds(1)) else { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Usage/ResourceControl.swift:18 — swift-duration — static let deadline: Duration = .seconds(5) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Windows/IncognitoChats.swift:29 — swift-duration — try await acpmux.purgeWorkspace(key: key, deadline: .seconds(3)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApps/Operations/BundledAgentMemoryIndex.swift:23 — swift-duration — public init(executable: URL, timeout: Duration = .seconds(25)) { — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApps/Operations/DaemonConnection+AgentInventoryReader.swift:9 — swift-duration — try await request(MachineAgentInventoryRequest(expectedMachineID: machine), timeout: .seconds(15)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApps/Operations/DaemonConnection+AgentInventoryReader.swift:17 — swift-duration — let receipt = try await request(MachineAgentInventoryRefreshRequest(expectedMachineID: machine), timeout: .seconds(28)) — verdict: retained debt; shrink-only allowlist
  • Packages/macOS/CmuxNext/Sources/CmuxNextApps/Operations/DaemonConnection+MachineCatalogWriter.swift:8 — swift-duration — _ = try await self.request(request, timeout: .seconds(15)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/acpmux_mcp.rs:40 — rust-duration — const STATUS_WAIT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/acpmux_mcp_send.rs:36 — rust-duration — const RESOLVE_WAIT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:119 — rust-duration — const EXIT_ACK_BUDGET: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:1169 — rust-duration — let status = tokio::time::timeout(std::time::Duration::from_secs(5), child.wait()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:1305 — rust-duration — tokio::time::timeout(grace + std::time::Duration::from_secs(1), exited).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2381 — rust-duration — let result = tokio::time::timeout(std::time::Duration::from_secs(10), async { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2421 — rust-duration — let messages = tokio::time::timeout(std::time::Duration::from_secs(10), async { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2497 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(10), arrived) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2568 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(10), fence.settled()).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2606 — rust-duration — let id = tokio::time::timeout(std::time::Duration::from_secs(10), async { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2623 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(10), arrived) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2665 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(10), arrived) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2673 — rust-duration — let _ = tokio::time::timeout(std::time::Duration::from_secs(5), request).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent.rs:2703 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(10), agent.stdin_tx.closed()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent_host/host.rs:245 — rust-duration — const DRAIN_BUDGET: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent_host/link.rs:416 — rust-duration — pub const HELLO_BUDGET: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent_host/scope.rs:139 — rust-duration — const PLACEMENT_WAIT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent_host/wait.rs:16 — rust-duration — pub const QUERY_BUDGET: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/agent_tools/cua_helper.rs:110 — rust-duration — match child.wait_timeout(Duration::from_secs(3)) { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/artifacts_sync.rs:28 — rust-duration — const CONNECT_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/cloud_join.rs:316 — rust-duration — std::time::Duration::from_secs(2), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/cloud_join.rs:395 — rust-duration — .timeout(std::time::Duration::from_secs(10)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/codex_auth_broker.rs:42 — rust-duration — const DEADLINE: Duration = Duration::from_secs(8); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/daemon_service.rs:41 — rust-duration — const CALL_WAIT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/gh_shim.rs:171 — rust-duration — const GIT_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/harness.rs:1076 — rust-duration — let _ = tokio::time::timeout(Duration::from_secs(5), child.wait()).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/harness.rs:1077 — rust-duration — if tokio::time::timeout(Duration::from_secs(2), &mut drain).await.is_err() { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/host_join_doctor.rs:33 — rust-duration — const STATUS_TIMEOUT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/host_vault.rs:280 — rust-duration — match child.wait_timeout(std::time::Duration::from_secs(5)) { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/output.rs:13 — rust-duration — const UPDATE_RECONNECT_BUDGET: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/output.rs:812 — rust-duration — let _ = tokio::time::timeout(std::time::Duration::from_millis(2500), turn).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/run/standard.rs:1255 — rust-duration — const PRE_QUEUE_WAIT: std::time::Duration = std::time::Duration::from_millis(300); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/uniichat_agent.rs:553 — rust-duration — match tokio::time::timeout(Duration::from_secs(20), tokio_tungstenite::connect_async(req)).await — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/uniichat_agent.rs:602 — rust-duration — let deadline = tokio::time::Instant::now() + Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cli/uniichat_agent.rs:686 — rust-duration — next = tokio::time::timeout(if cancelled { Duration::from_secs(5) } else { quiet }, ws.next()) => { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cloud_rewind.rs:91 — rust-duration — .connect_timeout(Duration::from_secs(5)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/config/launchers.rs:132 — rust-duration — match child.wait_timeout(std::time::Duration::from_secs(20)) { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cua_v2.rs:208 — rust-duration — std::time::Duration::from_secs(2), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/cua_v2.rs:223 — rust-duration — std::time::Duration::from_secs(2), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:139 — rust-duration — pub const SHUTDOWN_BUDGET: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:829 — rust-duration — let _ = tokio::time::timeout(std::time::Duration::from_secs(6), relay.stop()).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1285 — rust-duration — tokio::time::timeout(Duration::from_secs(5), crate::client::Client::connect(socket)).await — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1290 — rust-duration — Duration::from_secs(5), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1309 — rust-duration — Duration::from_secs(10), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1347 — rust-duration — const START_BUDGET: Duration = Duration::from_secs(8); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1351 — rust-duration — pub const EXIT_BUDGET: Duration = SHUTDOWN_BUDGET.saturating_add(Duration::from_secs(8)); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1420 — rust-duration — pub const HANDOVER_BUDGET: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1427 — rust-duration — const HANDOVER_RETRY: Duration = Duration::from_millis(250); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon.rs:1447 — rust-duration — const PROBE_BUDGET: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/cloud_activity.rs:71 — rust-duration — pub(super) const RENEW: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/cloud_activity.rs:73 — rust-duration — const SEND_TIMEOUT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/cloud_handoff.rs:80 — rust-duration — const NOTIFY_TIMEOUT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/login_session.rs:42 — rust-duration — const LAUNCHCTL_BUDGET: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/router_owner/fifo.rs:41 — rust-duration — const ROUTER_STOP_BUDGET: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/daemon/snapshot_clear.rs:13 — rust-duration — tokio::time::timeout(Duration::from_secs(2), Client::connect_without_caller(socket)).await — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/deps/remote.rs:147 — rust-duration — .connect_timeout(Duration::from_secs(10)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/github_app_token.rs:26 — rust-duration — const MINT_TIMEOUT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/github_app_token.rs:28 — rust-duration — const KEYRING_TIMEOUT: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/github_status.rs:51 — rust-duration — const CLOUD_WAIT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/github_status.rs:52 — rust-duration — const PLATFORM_WAIT: Duration = Duration::from_secs(8); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/github_status.rs:53 — rust-duration — const GH_WAIT: Duration = Duration::from_secs(8); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hand/exec.rs:17 — rust-duration — const DRAIN_GRACE: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hand/link.rs:199 — rust-duration — match tokio::time::timeout(Duration::from_secs(20), tokio_tungstenite::connect_async(req)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/harness_health/latest.rs:62 — rust-duration — .timeout(std::time::Duration::from_secs(15)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/harness_health/probe.rs:12 — rust-duration — const TIMEOUT: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/host_load.rs:22 — rust-duration — const CPU_WINDOW: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/host_load.rs:24 — rust-duration — const DAEMON_WAIT: Duration = Duration::from_millis(1500); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/bg_tasks.rs:37 — rust-duration — const START_WAIT: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/bg_tasks.rs:476 — rust-duration — const STOP_LOOK: std::time::Duration = std::time::Duration::from_millis(50); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/carried_turn.rs:86 — rust-duration — const CARRIED_WAIT: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/forum.rs:48 — rust-duration — const PUSH_WAIT: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/full_access_bound.rs:1018 — rust-duration — let _ = tokio::time::timeout(std::time::Duration::from_secs(10), begun).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/idle_census.rs:72 — rust-duration — const CENSUS_BUDGET: std::time::Duration = std::time::Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/mcp_probe.rs:20 — rust-duration — const TIMEOUT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/processes.rs:30 — rust-duration — pub(super) const STOP_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/queue_edit.rs:17 — rust-duration — const STEP_NOW_WAIT: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/remote_sandbox.rs:309 — rust-duration — let Ok(Ok(out)) = tokio::time::timeout(std::time::Duration::from_secs(5), read).await else { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/remote_sandbox.rs:1146 — rust-duration — let run = tokio::time::timeout(std::time::Duration::from_secs(20), cmd.output()).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/shell_readonly.rs:98 — rust-duration — pub(crate) const PROBE_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/shutdown.rs:318 — rust-duration — const RETRY_STOP_BUDGET: std::time::Duration = std::time::Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/shutdown.rs:321 — rust-duration — pub const SHUTDOWN_GRACE: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/titles.rs:37 — rust-duration — const TIMEOUT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/turns.rs:1769 — rust-duration — std::time::Duration::from_secs(5), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/turns.rs:1774 — rust-duration — let _ = tokio::time::timeout(std::time::Duration::from_secs(5), handled).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/turns.rs:2202 — rust-duration — std::time::Duration::from_millis(500), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/usage_view.rs:32 — rust-duration — pub(crate) const READ_WAIT: Duration = Duration::from_millis(750); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/watch_events.rs:74 — rust-duration — std::time::Duration::from_millis(250), — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/withdraw.rs:40 — rust-duration — const NOTICE_WAIT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/withdraw.rs:42 — rust-duration — const INBOX_SETTLE: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/hub/worktree_care/revive.rs:56 — rust-duration — if let Ok(Ok(Some(found))) = tokio::time::timeout(Duration::from_secs(2), read).await { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/launch_credential.rs:22 — rust-duration — const MINT_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/linux_sandbox/bwrap.rs:383 — rust-duration — let status = match child.wait_timeout(Duration::from_secs(10)) { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/linux_sandbox/keeper.rs:560 — rust-duration — result = tokio::time::timeout(Duration::from_secs(20), handoff(&socket)) => result.map_err(|_| "handoff timed out after 20 s")??, — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/linux_sandbox/keeper.rs:792 — rust-duration — let _ = tokio::time::timeout(Duration::from_secs(5), child.kill()).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/linux_sandbox/proxy.rs:26 — rust-duration — const CONNECT_TIMEOUT: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/live_models/mod.rs:39 — rust-duration — pub const PROBE_TIMEOUT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/login_env.rs:45 — rust-duration — pub const TIMEOUT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/login_env.rs:47 — rust-duration — const RECHECK: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/pairing/tests.rs:272 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(5), ended).await.unwrap().unwrap(); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/pairing/tests.rs:274 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(5), p.revoked(&device.id)).await.unwrap(); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/peer_health.rs:20 — rust-duration — const HEALTH_BUDGET: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/peer_ssh.rs:61 — rust-duration — tokio::time::timeout(Duration::from_millis(250), &mut self.0) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/route_probe.rs:180 — rust-duration — let client = match reqwest::Client::builder().timeout(Duration::from_secs(8)).build() { — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/mesh_relay.rs:286 — rust-duration — let budget = wait.min(Duration::from_secs(5)); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/mesh_relay.rs:297 — rust-duration — let _ = tokio::time::timeout(Duration::from_secs(5), client.heartbeat(&last)).await; — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/mod.rs:255 — rust-duration — const WORK_BACKPRESSURE_WAIT: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/mod.rs:1046 — rust-duration — const WS_HANDSHAKE_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/mod.rs:1465 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(2), read).await.ok().flatten() — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/models_fanout.rs:27 — rust-duration — const PEERS_BUDGET: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/pairing.rs:113 — rust-duration — const REDEEM_WAIT: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/peer_status.rs:20 — rust-duration — const PEER_BUDGET: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/requests.rs:953 — rust-duration — tokio::time::timeout(std::time::Duration::from_secs(5), peer.request(m, json!({}))) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/requests/briefs.rs:110 — rust-duration — const PEERS_BUDGET: std::time::Duration = std::time::Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/stream.rs:28 — rust-duration — const LAST_LINE_WAIT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/trigger_chat.rs:211 — rust-duration — .timeout(std::time::Duration::from_millis(4500)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/trigger_chat.rs:388 — rust-duration — let _accepted = tokio::time::timeout(std::time::Duration::from_secs(4), accepted_rx).await.ok(); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown.rs:10 — rust-duration — pub(crate) const DRAIN_BUDGET: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown.rs:11 — rust-duration — const CLOSE_BUDGET: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:48 — rust-duration — let reply = tokio::time::timeout(Duration::from_secs(5), ws.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:78 — rust-duration — let frame = tokio::time::timeout(Duration::from_secs(5), ws.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:92 — rust-duration — tokio::time::timeout(Duration::from_secs(5), serving).await.unwrap().unwrap().unwrap(); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:130 — rust-duration — let frame = tokio::time::timeout(Duration::from_secs(5), client.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:155 — rust-duration — let frame = tokio::time::timeout(Duration::from_secs(5), client.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:176 — rust-duration — assert!(tokio::time::timeout(Duration::from_millis(10), shared.drained()).await.is_err()); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:207 — rust-duration — let frame = tokio::time::timeout(Duration::from_secs(5), client.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/server/ws_shutdown/tests.rs:238 — rust-duration — let frame = tokio::time::timeout(Duration::from_secs(5), client.next()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/session_scope.rs:573 — rust-duration — const PROBE_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/tui/mod.rs:823 — rust-duration — let request = tokio::time::timeout(std::time::Duration::from_secs(5), requests.recv()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/tui/mod.rs:947 — rust-duration — let msg = tokio::time::timeout(std::time::Duration::from_secs(5), requests.recv()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/tui/mod.rs:978 — rust-duration — let msg = tokio::time::timeout(std::time::Duration::from_secs(5), requests.recv()) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/vault.rs:125 — rust-duration — pub const LOAD_BUDGET: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/vault.rs:381 — rust-duration — pub const INITIAL_WAIT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/acpmux/src/vault/store.rs:29 — rust-duration — const TIMEOUT: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/agent_input_hint.rs:29 — rust-duration — const LOOKUP_TIMEOUT: Duration = Duration::from_millis(500); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/agent_message.rs:30 — rust-duration — const PUMP_WAIT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/agent_message.rs:31 — rust-duration — const PUMP_POLL: Duration = Duration::from_millis(50); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/agents/wait.rs:27 — rust-duration — const RECHECK: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/agents_doctor.rs:453 — rust-duration — const VERSION_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app.rs:78 — rust-duration — pub(super) const READ_TIMEOUT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app.rs:81 — rust-duration — const ERRORS_TIMEOUT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/page.rs:20 — rust-duration — pub(super) const WAIT_MARGIN: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/renderers.rs:20 — rust-duration — const TIMEOUT: Duration = Duration::from_secs(6); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/right.rs:22 — rust-duration — const RIGHT_TIMEOUT: Duration = Duration::from_secs(25); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/run.rs:47 — rust-duration — const MAX_RETRY_WAIT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/skew.rs:109 — rust-duration — const IDENTIFY_TIMEOUT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/version.rs:25 — rust-duration — const READ_TIMEOUT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/wait.rs:22 — rust-duration — const FIRST_NOTE_AFTER: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/app/wait.rs:23 — rust-duration — const NOTE_EVERY: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/apps_run.rs:36 — rust-duration — pub(super) const CANCEL_WAIT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/apps_run/tests.rs:62 — rust-duration — const TEST_WAIT: Duration = Duration::from_millis(200); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/billing.rs:22 — rust-duration — const BILLING_TIMEOUT: Duration = Duration::from_secs(25); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/chief/link.rs:21 — rust-duration — const REQUEST_TIMEOUT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/cloud_client_session.rs:501 — rust-duration — .timeout(Duration::from_millis(timeout_ms).saturating_add(Duration::from_secs(15))) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/cloud_machine_io/direct.rs:252 — rust-duration — .timeout(Duration::from_millis(timeout_ms).saturating_add(Duration::from_secs(15))) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/cloud_machine_io/proxy.rs:52 — rust-duration — .timeout(Duration::from_millis(timeout) + Duration::from_secs(5)) — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/cloud_machines.rs:30 — rust-duration — const CLOUD_READ_TIMEOUT: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/cloud_start_chat.rs:42 — rust-duration — const NOT_STARTED_PAUSE: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/coderouter.rs:33 — rust-duration — const CODEROUTER_TIMEOUT: Duration = Duration::from_secs(25); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/codex_app_server.rs:22 — rust-duration — const DEADLINE: Duration = Duration::from_secs(8); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/lifecycle.rs:526 — rust-duration — const STOP_WAIT_SLICE: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/machine_join.rs:53 — rust-duration — const REQUEST_TIMEOUT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/machine_join.rs:55 — rust-duration — pub(super) const LIST_TIMEOUT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/machine_join.rs:57 — rust-duration — const WAIT_EVERY: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/mcp.rs:1616 — rust-duration — const CLOUD_MACHINES_TIMEOUT: Duration = Duration::from_secs(1); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/mcp/computer_use_gate.rs:42 — rust-duration — const STATUS_TIMEOUT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/mcp/computer_use_gate.rs:46 — rust-duration — const REQUEST_SLACK: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/mcp/upstream.rs:31 — rust-duration — const START_TIMEOUT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/resolve.rs:296 — rust-duration — const CALLER_TERMINAL_WAIT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/resolve.rs:530 — rust-duration — const APP_IDENTIFY_WAIT: Duration = Duration::from_secs(5); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/sandbox_run.rs:31 — rust-duration — const WAIT_TRANSIT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/script.rs:35 — rust-duration — pub(super) const CANCEL_WAIT: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/setup/browser_import.rs:61 — rust-duration — const LOAD_WAIT: std::time::Duration = std::time::Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/setup/browser_import.rs:62 — rust-duration — const LOAD_PAUSE: std::time::Duration = std::time::Duration::from_millis(100); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/setup/harness.rs:39 — rust-duration — const ASK_TIMEOUT: Duration = Duration::from_secs(20); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/skew.rs:48 — rust-duration — const IDENTIFY_TIMEOUT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/status/terminal_wait.rs:35 — rust-duration — pub(super) const ANSWER_TIMEOUT: Duration = Duration::from_secs(10); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/status/terminal_wait.rs:37 — rust-duration — const DEADLINE_SLACK: Duration = Duration::from_millis(50); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/terminal_talk/send.rs:36 — rust-duration — pub(in crate::cli) const DEFAULT_SETTLE: Duration = Duration::from_secs(3); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/terminal_talk/send.rs:37 — rust-duration — const DEFAULT_ENTER_DELAY: Duration = Duration::from_millis(300); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/terminal_talk/send.rs:38 — rust-duration — const DEFAULT_POLL: Duration = Duration::from_millis(250); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/vm.rs:43 — rust-duration — const MINT_TIMEOUT: Duration = Duration::from_secs(25); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/vnc.rs:26 — rust-duration — const CONNECT_TIMEOUT: Duration = Duration::from_secs(15); — verdict: retained debt; shrink-only allowlist
  • cmux-tui/crates/cmux-tui/src/cli/wire.rs:19 — rust-duration — pub(super) const SERVER_PREFLIGHT_TIMEOUT: Duration = Duration::from_secs(2); — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/autoResumeStatus.test.ts:26 — ts-hard-timeout — const deadline = performance.now() + 2_000; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/composer/imagePool.ts:14 — ts-hard-timeout — export const imageJobDeadline = { ms: 20_000 }; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/composerDraft.ts:139 — ts-hard-timeout — export const draftWriteLimits = { timeoutMs: 5_000, lateHoldMs: 30_000 }; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/folderTrust.ts:74 — ts-hard-timeout — export const TRUST_READ_TIMEOUT_MS = 1500; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/inlinePrompt.test.ts:18 — ts-hard-timeout — const deadline = performance.now() + 2_000; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/loadDebug.ts:61 — ts-hard-timeout — const deadline = performance.now() + 25_000; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/perf.ts:308 — ts-hard-timeout — nextCommit(timeoutMs = 10_000): Promise<number | undefined> { — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/promptDelivery.test.ts:37 — ts-hard-timeout — const deadline = performance.now() + 2_000; — verdict: retained debt; shrink-only allowlist
  • webviews/src/agent-session/acpmux/reconnectPrompt.test.ts:23 — ts-hard-timeout — const deadline = performance.now() + 2_000; — verdict: retained debt; shrink-only allowlist

🤖 Generated with Codex

Agent session: agent session

Co-authored-by: Codex <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-84e07158ebfb7e30b30f
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@teamleaderleo teamleaderleo added the leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel label Nov 4, 2026
Co-authored-by: Codex <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-84e07158ebfb7e30b30f
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 1a4774b

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 4. They land as checklist items in this PR's one follow-up tracking issue in this repo (Follow-ups: #N ..., label follow-up; add to an open one before filing, never one issue per finding), linking this receipt; the lane that opened the PR fixes them forward.

SHIP at 1a4774b
Visual verdict: no images; Leo tries the build

The five regression tests and repository scan pass. Targeted probes reproduced four gaps in the new guard.

  1. [P2] [follow-up] [category:correctness] [finding:F1] [outcome:pending] scripts/ci/check_short_timeouts.py:94 — Milliseconds are multiplied by 1,000, just like seconds. Consequently, .milliseconds(2000) and Duration::from_millis(2000) produce no hits despite imposing two-second timeouts. Leave millisecond values unchanged and test the 29,999/30,000 ms boundary.

  2. [P2] [follow-up] [category:correctness] [finding:F2] [outcome:pending] scripts/ci/check_short_timeouts.py:71 — Test-module stripping searches for the next opening brace without checking which item owns it. With #[cfg(test)] mod tests; followed by a production function, it removes that entire function from scanning. Recognize external module declarations and stop at their semicolon; add a regression proving the following production timeout remains detected.

  3. [P2] [follow-up] [category:correctness] [finding:F3] [outcome:pending] scripts/ci/check_short_timeouts.py:140 — Rust timeout calls are matched only on the duration’s line. Splitting tokio::time::timeout( and Duration::from_secs(2) across consecutive lines makes an otherwise detected timeout disappear. Associate the duration with its enclosing call and cover multiline calls in the tests.

  4. [P2] [follow-up] [category:tooling] [finding:F4] [outcome:pending] scripts/ci/check_short_timeouts.py:224 — --update accepts increased counts and new entries, assigning new timeouts the “pre-existing” debt reason. Running the documented update command after introducing a timeout therefore makes validation pass, contrary to the shrink-only contract. Reject growth when updating an existing snapshot and add a test for that rejection.

Follow-ups:

  • Correct millisecond conversion and boundary coverage.
  • Preserve production code after external Rust test-module declarations.
  • Detect multiline Rust timeout calls.
  • Enforce shrink-only snapshot updates.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 1a4774b: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

Co-authored-by: Codex <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-84e07158ebfb7e30b30f
…t-guard

# Conflicts:
#	.github/workflows/ci-guards.yml
#	tests/test-execution.toml
@cursor

cursor Bot commented Nov 4, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 2073305: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr35209 -f ref=lane/timeout-guard -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); do not merge until green; see lane-rules

Shipped in:

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Found 11 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp8st76hz7/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpcsxqb145/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
imported web bundle inputs are not routed:/imported web bundle inputs are not routed: View Logs
nightly cmux-tui resolve/nightly cmux-tui resolve View Logs
nightly.yml must not read vars.NIGHTLY_SIGN while nightly-sign.yml is in shadow mode/
nightly.yml must not read vars.NIGHTLY_SIGN while nightly-sign.yml is in shadow mode
View Logs
test_the_committed_contract_is_the_workflows (main.RollupsFromNeeds.test_the_commit
ted_contract_is_the_workflows)/
test_the_committed_contract_is_the_workflows (main.RollupsFromNeeds.test_the_commit
ted_contract_is_the_workflows)
View Logs

...and 1 more test failures. View all on Blacksmith

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

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 4, 2026 11:44 Inactive
@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 4, 2026 11:46 Inactive
Co-authored-by: Codex <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-84e07158ebfb7e30b30f
@teamleaderleo
teamleaderleo merged commit b1b0f37 into feat-cmux-next Nov 4, 2026
175 of 178 checks passed
@teamleaderleo
teamleaderleo deleted the lane/timeout-guard branch November 4, 2026 12:35
@lawrencecchen

Copy link
Copy Markdown
Contributor

@teamleaderleo for information: the tip watcher named this PR next to #35206 for the check:fixed-waits web-lint red. This PR did not cause it. The red is the older webviews ratchet (#23365) on #35206's new test, not check_short_timeouts.py. The fix is in #35409. This PR needs no change.

teamleaderleo added a commit that referenced this pull request Nov 4, 2026
…wlist (#35601)

* ci: run the short-timeout ratchet on the tree, shrink its list, drop a new 2 s app gate

The ci-guards step ran only the checker's unit tests, never the checker, so two
new short hard timeouts landed after #35209 and nine fixed hits stayed listed.

- ci-guards runs scripts/ci/check_short_timeouts.py after its tests.
- AcpmuxSessionPage.summary waits AcpmuxEnvironment.answerDeadline, not 2 s,
  like its neighbours since #35075.
- agent.rs HOST_KIND_BUDGET carries its `// timeout:` reason: a late host
  falls back to its profile and is asked again, nothing fails.
- The allowlist drops the eight entries whose hits are gone and lowers
  host_load.rs to 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa

* ci: lower daemon.rs in the short-timeout allowlist to 6 after #35174

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa

* ci: select the short-timeout ratchet test for every path it scans

The ci-guards step sits in the `ci` matrix group, which workflow-guard-tests
excludes, so a step there never runs on these PRs. The linux-guard lane runs
tests/test_short_timeout_guard.py (whose first case scans the whole tree) only
when the focused map selects it, and nothing mapped the scanned source paths
to it. focused-tests-extra.json now maps the six scanned prefixes to the test;
the dead ci-guards edit is reverted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 6bc4383a Deployed Nov 4, 2026 by teamleaderleo via cmux-tui tree preflight #111568
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants