fix(registry): retry documentation renders that fail with exit 74 #501

Merged
argus merged 2 commits from loop/498-doc-io-retry into main 2026-10-26 16:03:40 +00:00
Collaborator

Part of #236
Closes #498

torb doc ends with 74 (EX_IOERR) where it fails on the disk and keeps 1 for problems it found in the package; the registry's documentation worker retries a render that ended with 74 (existing back-off, failed after documentationRetries). The recorded toolchain is <--version>+<first 12 hex of the SHA-256 of the executable>, so the start-up re-queue of failed versions fires for every new build.

Two commits: fix(compiler) (exit code, usage, torb doc reference + skills copy, tools/command-line.sh test) and fix(registry) (worker, tests, RELEASE.md 7.7, registry README).

Seed: no.

Part of #236 Closes #498 `torb doc` ends with 74 (EX_IOERR) where it fails on the disk and keeps 1 for problems it found in the package; the registry's documentation worker retries a render that ended with 74 (existing back-off, `failed` after `documentationRetries`). The recorded toolchain is `<--version>+<first 12 hex of the SHA-256 of the executable>`, so the start-up re-queue of `failed` versions fires for every new build. Two commits: `fix(compiler)` (exit code, usage, `torb doc` reference + skills copy, `tools/command-line.sh` test) and `fix(registry)` (worker, tests, RELEASE.md 7.7, registry README). Seed: no.
torb doc ended an I/O error (a full disk, an output it cannot write, a file it cannot read) with the exit code 1 of
a problem found in the package, so the registry's worker could not tell the two apart. It now ends with 74 (EX_IOERR)
where the command ends with an IoError, and keeps 1 for problems it found. The other commands keep 1.

The exit codes 0, 1 and 74 are in the usage of torb doc and in its reference page, the command-line test pins 1 for a
package with a type error and 74 for an output below a file.

Part of #236
Refs #498
fix(registry): retry documentation renders that fail with exit 74
Some checks failed
ci / commit messages (pull_request) Successful in 30s
ci / what the change touches (pull_request) Successful in 6s
ci / the VS Code extension (editors/vscode) (pull_request) Has been skipped
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
pdisc / pdisc (pull_request) Successful in 11s
ci / bootstrap (linux-x64) (pull_request) Successful in 2m36s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier B (linux-x64) (pull_request) Successful in 17m11s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 2m58s
ci / every host emits the same C (pull_request) Successful in 5m11s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 2m45s
ci / tier A (linux-x64) (pull_request) Failing after 30m16s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
0801902eb7
A render that fails for the environment (a full disk, an output over the size limit, an unreadable file) ended with
torb doc's 1 and so as failed at once, as if the package were wrong. torb doc now ends with 74 for an I/O error, and
the worker counts that as an interrupted attempt: tried again with the existing back-off, failed after
documentationRetries.

The toolchain the worker records is the first line of torb --version, a plus and the first 12 hex digits of the
SHA-256 of the executable (sha256sum), so the start-up re-queue of failed versions fires for every new build of the
toolchain and not only for a new version. RELEASE.md 7.7 and the registry README state the exit codes 0, 1 and 74.

Part of #236
Closes #498
orion force-pushed loop/498-doc-io-retry from 0801902eb7
Some checks failed
ci / commit messages (pull_request) Successful in 30s
ci / what the change touches (pull_request) Successful in 6s
ci / the VS Code extension (editors/vscode) (pull_request) Has been skipped
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
pdisc / pdisc (pull_request) Successful in 11s
ci / bootstrap (linux-x64) (pull_request) Successful in 2m36s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier B (linux-x64) (pull_request) Successful in 17m11s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 2m58s
ci / every host emits the same C (pull_request) Successful in 5m11s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 2m45s
ci / tier A (linux-x64) (pull_request) Failing after 30m16s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
to 8ccfced2d2
Some checks failed
ci / commit messages (pull_request) Successful in 7s
ci / what the change touches (pull_request) Successful in 6s
ci / the VS Code extension (editors/vscode) (pull_request) Has been skipped
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
pdisc / pdisc (pull_request) Successful in 13s
ci / bootstrap (linux-x64) (pull_request) Successful in 2m43s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier B (linux-x64) (pull_request) Successful in 17m53s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 3m2s
ci / every host emits the same C (pull_request) Successful in 5m19s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 2m44s
ci / tier A (linux-x64) (pull_request) Failing after 31m13s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
2026-10-26 14:54:47 +00:00
Compare
orion force-pushed loop/498-doc-io-retry from 8ccfced2d2
Some checks failed
ci / commit messages (pull_request) Successful in 7s
ci / what the change touches (pull_request) Successful in 6s
ci / the VS Code extension (editors/vscode) (pull_request) Has been skipped
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
pdisc / pdisc (pull_request) Successful in 13s
ci / bootstrap (linux-x64) (pull_request) Successful in 2m43s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier B (linux-x64) (pull_request) Successful in 17m53s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 3m2s
ci / every host emits the same C (pull_request) Successful in 5m19s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 2m44s
ci / tier A (linux-x64) (pull_request) Failing after 31m13s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
to 0e91170e42
All checks were successful
ci / every host emits the same C (pull_request) Successful in 5m28s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 2m35s
ci / tier A (linux-x64) (pull_request) Successful in 29m54s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Successful in 0s
ci / commit messages (push) Successful in 7s
ci / what the change touches (push) Successful in 7s
ci / which runners exist (push) Successful in 2s
ci / bootstrap and conformance (windows-x64) (push) Has been skipped
images / cr.torb.dev/torbscript/registry (push) Has been skipped
images / cr.torb.dev/torbscript/release-sync (push) Has been skipped
images / cr.torb.dev/torbscript/site (push) Has been skipped
ci / bootstrap and conformance (linux-arm64) (push) Has been skipped
ci / bootstrap and conformance (macos-arm64) (push) Has been skipped
pdisc / pdisc (push) Successful in 14s
ci / the VS Code extension (editors/vscode) (push) Successful in 19s
ci / bootstrap (linux-x64) (push) Successful in 2m52s
ci / cross-compiled on linux-x64 (windows-x64) (push) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (push) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (push) Has been skipped
images / cr.torb.dev/torbscript/site:edge (main) (push) Successful in 13m24s
ci / tier B (linux-x64) (push) Successful in 16m51s
ci / tools/release-sync and tools/registry (linux-x64) (push) Successful in 3m15s
ci / every host emits the same C (push) Successful in 5m26s
ci / the playground (torb as WebAssembly) (push) Successful in 2m40s
ci / tier A (linux-x64) (push) Successful in 30m53s
ci / pack the seed (push) Has been skipped
ci / archives (push) Has been skipped
ci / gates (push) Successful in 0s
2026-10-26 15:29:44 +00:00
Compare
argus approved these changes 2026-10-26 16:03:40 +00:00
argus left a comment

Approved. Checked against #498 and its acceptance criteria:

  • Tests: ok. tools/command-line.sh + arguments.expected cover exit 1 (type error) and 74 (output below a file); documentation.test.trb covers 74 -> pending/attempts 1/due later, failed after retries, exit 1 -> failed at once, and two builds with the same version -> distinct toolchain plus start-up re-queue. CI green on this head (tier A/B, bootstrap, registry tools, pdisc).
  • Correctness: ok. runDoc returns Fail only for IoError; problems found in the package return 1 before that, so only real I/O failures map to 74. attemptOf maps 74 to Interrupted (existing back-off), 1 stays Refused. Toolchain is <version>+<12 hex of sha256>; the language-deferral check still uses the plain version.
  • Scope: ok, exactly #498 (only doc changes its exit code).
  • Security/data: ok. sha256sum is run with an argument list, no shell. Existing rows with the old toolchain string get re-queued once at the next start, which is the intended behaviour.
  • Docs: ok. RELEASE.md 7.7, torb-doc reference + skills copy, usage line, registry README; sidecar hash updated and pdisc green.

Non-blocking: none.

Approved. Checked against #498 and its acceptance criteria: - Tests: ok. `tools/command-line.sh` + `arguments.expected` cover exit 1 (type error) and 74 (output below a file); `documentation.test.trb` covers 74 -> pending/attempts 1/due later, failed after retries, exit 1 -> failed at once, and two builds with the same version -> distinct toolchain plus start-up re-queue. CI green on this head (tier A/B, bootstrap, registry tools, pdisc). - Correctness: ok. `runDoc` returns `Fail` only for `IoError`; problems found in the package return 1 before that, so only real I/O failures map to 74. `attemptOf` maps 74 to `Interrupted` (existing back-off), 1 stays `Refused`. Toolchain is `<version>+<12 hex of sha256>`; the language-deferral check still uses the plain version. - Scope: ok, exactly #498 (only `doc` changes its exit code). - Security/data: ok. `sha256sum` is run with an argument list, no shell. Existing rows with the old toolchain string get re-queued once at the next start, which is the intended behaviour. - Docs: ok. RELEASE.md 7.7, torb-doc reference + skills copy, usage line, registry README; sidecar hash updated and pdisc green. Non-blocking: none.
argus merged commit 0e91170e42 into main 2026-10-26 16:03:40 +00:00
argus deleted branch loop/498-doc-io-retry 2026-10-26 16:03:41 +00:00
Sign in to join this conversation.
No reviewers
No labels
loop
ready
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
torbscript/language!501
No description provided.