Repository navigation
Description
Summary
A failed third-party badge image can obscure an otherwise loaded guide behind the “This page could not finish loading. Reload” overlay. The shared readiness gate treats eager README badge images as required appearance resources.
Reproduction
- Start the documentation development server from a checkout containing 9a01505.
$ pnpm dev- In the browser's developer tools, block image requests to
https://img.shields.io/and GitHub workflow badge images. - Open
/en/ruby/latest/guides/overview/on that server. It redirects to the getting-started guide. - Inspect the root element's
data-page-readinessattribute and the visible loading-status overlay.
The automated diagnostic used the same source's fresh-server browser check with off-origin connections blocked. It did not change production readiness code. Browser-tool steps above were not separately replayed.
Expected
Unavailable decorative badges should not prevent readers from using the guide's text and navigation. Required local resources should retain their existing failure checks.
Actual
The document finishes loading, but readiness becomes failed and the guide is obscured by #page-load-status. The console reports Page appearance failed with an image EncodingError.
Environment
Diagnostic environment
- Shared docs source: 9a01505, with test-only browser network isolation.
- Node.js 26.5.1 and Playwright 1.64.1, Chromium.
- Linux 6.18.54.1, WSL2.
- Fresh Astro development server; Ruby's integrated README includes remote badges.
Evidence
Captured document state
{
"state": "failed",
"outlet": "This page could not finish loading. Reload"
}The diagnostic also captured seven off-origin images with complete: true and naturalWidth: 0. A screenshot confirmed the visible failure overlay. Replacing those images with local SVG fixtures in the check context allows the unmodified production gate to reach ready; that test-only change is part of #287.
References
- The eager-image decoding loop submits each image decode to the shared gate.
- The failure handler retains pending appearance classes and shows the reload overlay.
- test(browser) Isolate checks from third-party requests #287 isolates browser checks from third-party services; it does not change production readiness.
Activity