diff --git a/.github/workflows/pr-ci.yml b/.github/workflows/pr-ci.yml index 7991a48a4..ef0ca25d1 100644 --- a/.github/workflows/pr-ci.yml +++ b/.github/workflows/pr-ci.yml @@ -436,7 +436,27 @@ jobs: image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0 env: CARGO_INCREMENTAL: "0" + # The instrumented Tauri shell binary (whole tauri/zbus/CEF graph) is + # dominated by DWARF debug info, which exhausts the runner disk and + # SIGBUSes the linker (collect2: ld terminated with signal 7) during the + # final link. Drop debug info — llvm-cov reads coverage from the embedded + # __llvm_covmap/__llvm_covfun sections, NOT from DWARF, so coverage + # numbers are unaffected. Mirrors rust-core-coverage. + CARGO_PROFILE_DEV_DEBUG: "0" steps: + - name: Free disk space + run: | + # Coverage-instrumented builds produce huge binaries that exhaust the + # runner's ~14GB free disk during linking (SIGBUS). Inside a container, + # host paths are bind-mounted: + # /opt/hostedtoolcache → /__t + # /home/runner/work → /__w + # Deleting /__t frees ~8GB on the same partition the build uses. + # Mirrors rust-core-coverage. + rm -rf /__t/* || true + echo "Disk after cleanup:" + df -h /__w || true + - name: Checkout code uses: actions/checkout@v5 with: @@ -471,6 +491,11 @@ jobs: - name: Run cargo llvm-cov for Tauri shell run: bash scripts/ci-cancel-aware.sh cargo llvm-cov --manifest-path app/src-tauri/Cargo.toml --lcov --output-path lcov-tauri.info + env: + # Serialize codegen/link to cap peak memory + disk during the + # instrumented Tauri-shell link (SIGBUS otherwise). Mirrors + # rust-core-coverage. + CARGO_BUILD_JOBS: "1" - name: Save CEF binary distribution cache if: always() && steps.cef-cache.outputs.cache-hit != 'true' diff --git a/app/src/components/accounts/WebviewHost.tsx b/app/src/components/accounts/WebviewHost.tsx index 1cf8126bf..20e48f48b 100644 --- a/app/src/components/accounts/WebviewHost.tsx +++ b/app/src/components/accounts/WebviewHost.tsx @@ -226,7 +226,9 @@ const WebviewHost = ({ accountId, provider }: WebviewHostProps) => { /> - {isLoading ? `${t('accounts.webviewHost.loading')} ${providerName}...` : providerName} + {isLoading + ? t('accounts.webviewHost.loading').replace('{providerName}', providerName) + : providerName} {isLoading ? (
{`${providerName} ${t('accounts.webviewHost.takingLonger')}`}
++ {t('accounts.webviewHost.takingLonger').replace('{providerName}', providerName)} +
{t('accounts.webviewHost.timeoutHint')}
diff --git a/app/src/components/accounts/__tests__/WebviewHost.test.tsx b/app/src/components/accounts/__tests__/WebviewHost.test.tsx index ba539890b..6ca0896dd 100644 --- a/app/src/components/accounts/__tests__/WebviewHost.test.tsx +++ b/app/src/components/accounts/__tests__/WebviewHost.test.tsx @@ -83,6 +83,25 @@ describe('WebviewHost — issue #1233 loading UX', () => { expect(screen.queryByTestId(`webview-loading-${ACCOUNT_ID}`)).not.toBeInTheDocument(); }); + // Issue #3759: the loading/timeout copy must SUBSTITUTE the provider name + // into the `{providerName}` slot, not concatenate it — otherwise the raw + // placeholder token leaks to screen ("Loading {providerName}... Slack..."). + it('substitutes the provider name into the loading copy (issue #3759)', () => { + seedAccount('loading'); + renderHost(); + const placeholder = screen.getByTestId(`webview-placeholder-${ACCOUNT_ID}`); + expect(placeholder).toHaveTextContent('Loading Slack...'); + expect(placeholder.textContent).not.toContain('{providerName}'); + }); + + it('substitutes the provider name into the timeout copy (issue #3759)', () => { + seedAccount('timeout'); + renderHost(); + const timeout = screen.getByTestId(`webview-timeout-${ACCOUNT_ID}`); + expect(timeout).toHaveTextContent('Slack is taking longer than expected.'); + expect(timeout.textContent).not.toContain('{providerName}'); + }); + it('renders the phase hint after 5s of loading and escalates after 10s', () => { seedAccount('loading'); renderHost(); diff --git a/app/src/components/composio/ComposioConnectModal.test.tsx b/app/src/components/composio/ComposioConnectModal.test.tsx index 8b14568e7..27b6eb80b 100644 --- a/app/src/components/composio/ComposioConnectModal.test.tsx +++ b/app/src/components/composio/ComposioConnectModal.test.tsx @@ -716,3 +716,30 @@ describe('