Two-layer timeout enforcement for Salesforce MCP (session-layer 300s read backstop + tool-layer 120s asyncio.wait_for on sf_describe_report_type) — supersedes journal entry 8fa7e2a6 with calibrated co

Decision

Two-layer timeout enforcement for Salesforce MCP (session-layer 300s read backstop + tool-layer 120s asyncio.wait_for on sf_describe_report_type) — supersedes journal entry 8fa7e2a6 with calibrated confidence.

Rationale

EA-reported hang on sf_describe_report_type(report_type_key=Booking_With_or_W_o_Loan__c, org_alias=production). Root cause: RefreshingSalesforceSession.request() never passed timeout= to underlying requests call, defaulting to None (infinite). Affected all 684 tools, not just describe_report_type — surfaced first on heavy custom report type stalling Analytics API past 2 min. Chose two-layer over narrow-only or broad-only: narrow alone leaves 683 siblings exposed; broad alone gives 300s read backstop too generous for interactive describe reads. Defense-in-depth, overridable per-call for bulk/deploy. Same-tag v7.1.1 patch (behavior-only, no API surface change). Verified live: rebuild + restart, health green, drift-check clean, mirror parity OK, docker exec confirmed both fixes in running image. 0.85

Alternatives Rejected

Outcome

Pending