Link Check · recorded run · 4.0.4
See a safe release check run.
Before sharing a page, Link Check reads it. This page replays five runs recorded from the batch check it actually uses: what is refused before any request, what a stalled origin does to the other pages, and what the operator can act on afterwards.
Every number comes from executing Link Check’s code with scripted origins. The page makes no network request and is not a live inspection.
4 targets2 reads at a time2 attempts per targetNot persisted
0/6 steps
Scripted origin: every read succeeds. This page replays the recorded phases; nothing is fetched here.
Ready to run the recorded check.
- 01
Request validated
NextWaiting for your next step.
- 02
Reviewed hosts checked
Not reachedKept out of the run so far.
- 03
Duplicate pages rejected
Not reachedKept out of the run so far.
- 04
2 of 2 reads in flight
Not reachedKept out of the run so far.
- 05
Every page read
Not reachedKept out of the run so far.
- 06
Recovery stated
Not reachedKept out of the run so far.
Recorded by executing Link Check’s batch runner with scripted inspectors at src/batch.ts (Effect 4.0.4, commit 112c9e7), with tests/batch.test.mjs guarding the trace. No network request, no persisted report and no live inspection.
What the run guarantees
- Permission before reads. The reviewed host list and duplicate page identities are checked first. A refused batch attempts zero reads.
- Two reads at a time. A release check never opens more than four targets or two in-flight requests, and each attempt has its own time budget.
- One retry, only for reads. Timeouts, 429s, 5xx and connection errors may be repeated once. A 404, a wrong media type or a denied host is not retried.
- Uncertain is not a pass. A page that never answers stays uncertain in the report, while the pages that did answer keep their evidence.
Built with Effect 4
The batch runner decodes a versioned request with an Effect Schema, then resolves the reviewed scope and inspector through a Layer. Tests replace that layer to revoke a host, stall a read, inject a defect or count calls without touching the network.
The inspection itself stays the existing Effect effect: a typed failure channel, a 12-second timeoutOrElse, and tryPromise receiving an AbortSignal. When the timeout wins, the fiber is interrupted and that fetch is aborted; interrupting the batch does the same for reads in flight. A single retry is allowed only when the failure says a repeat read could help.
Per-page outcomes are values, not exceptions: one page failing cannot discard another page’s findings. The Worker maps refusals to 400 or 403 and returns a completed report as 200 even when a page inside it failed.
Batch runnerRunner testsInspection codeRecorded traceEffect 4 documentation
Optional by design.
App Composer’s own pages are Astro and TypeScript. This one imports a JSON trace at build time and has no Effect dependency. Link Check opts in where typed failures, interruption and bounded concurrency earn it; another app can start with plain TypeScript and add Effect for one workflow later.
All five recorded results, without JavaScript
| Run | Scripted origin | Result | Reads |
|---|---|---|---|
| Three pages, two at a time | every read succeeds | 3 verified, 3 attempts. | 3 |
| A host is revoked | never called | TargetNotPermitted. 0 reads attempted. | 0 |
| The same page twice | never called | DuplicateTarget. 0 reads attempted. | 0 |
| One origin stops answering | guestbook never answers; each attempt has a 30 ms budget | 2 verified, 1 uncertain, 4 attempts. | 4 |
| A temporary failure clears | guestbook returns HTTP 503 once, then succeeds | 2 verified, 3 attempts. | 3 |
The recorded runs demonstrate Link Check’s request handling and classification. They do not prove a production release, a real origin’s behaviour, platform unfurls or that other apps should adopt Effect. Link Check’s own release checks remain the evidence for its deployment.