I merged ~20 MRs today past a red pipeline.doc-pages and test
were failing on every one of them, main's pipelines were being cancelled
by merge churn, and I used immediate merge rather than
merge-when-pipeline-succeeds. The guard worked; I overrode it.
The doc-pages failure was real and is already fixed — it was the api.leaf drift I later found by hand, which CI had been reporting the
whole time.
The test failure is this commit. Three problems, all mine, all invisible
on macOS:
1. Task { } captures did not compile on Linux. Swift 6.1 there treats
the closure as a sending parameter and refuses captures of the harness
and the test device. macOS's toolchain accepted them. RelayHarness is now @unchecked Sendable with the reason written at the declaration — it wraps
a Vapor Application, which is built to serve concurrently and is never
mutated after boot. A test-harness claim, and it says so.
TestDevice needed it too, and NOT for the reason it looks: everything
in it is a value type, but swift-crypto on Linux does not declare Curve25519.Signing.PrivateKey Sendable. I wrote "value types throughout,
so genuinely Sendable" first and Linux said no; the comment now records
that rather than the tidy version.
2 and 3. Two tests asserted nothing wherever the suite runs as root —
which CI's container does. Both established "unwritable" with chmod 0o500, and root bypasses the permission check, so the store
correctly reported OK and the tests failed. The tests were wrong, not the
product.
Both now make the failure STRUCTURAL: a path whose parent is a regular
file cannot be created by anybody, because the kernel answers ENOTDIR
regardless of uid. Same failure for every user on every platform.
Verified in the actual CI image (swift:6.1-noble, as root) and on macOS:
659 tests pass on both.
**I merged ~20 MRs today past a red pipeline.** `doc-pages` and `test`
were failing on every one of them, `main`'s pipelines were being cancelled
by merge churn, and I used immediate merge rather than
merge-when-pipeline-succeeds. The guard worked; I overrode it.
The `doc-pages` failure was real and is already fixed — it was the
`api.leaf` drift I later found by hand, which CI had been reporting the
whole time.
The `test` failure is this commit. Three problems, all mine, all invisible
on macOS:
**1. `Task { }` captures did not compile on Linux.** Swift 6.1 there treats
the closure as a `sending` parameter and refuses captures of the harness
and the test device. macOS's toolchain accepted them. `RelayHarness` is now
`@unchecked Sendable` with the reason written at the declaration — it wraps
a Vapor `Application`, which is built to serve concurrently and is never
mutated after boot. A test-harness claim, and it says so.
`TestDevice` needed it too, and NOT for the reason it looks: everything
in it is a value type, but swift-crypto on Linux does not declare
`Curve25519.Signing.PrivateKey` Sendable. I wrote "value types throughout,
so genuinely Sendable" first and Linux said no; the comment now records
that rather than the tidy version.
**2 and 3. Two tests asserted nothing wherever the suite runs as root** —
which CI's container does. Both established "unwritable" with
`chmod 0o500`, and root bypasses the permission check, so the store
correctly reported OK and the tests failed. The tests were wrong, not the
product.
Both now make the failure STRUCTURAL: a path whose parent is a regular
file cannot be created by anybody, because the kernel answers ENOTDIR
regardless of uid. Same failure for every user on every platform.
Verified in the actual CI image (`swift:6.1-noble`, as root) and on macOS:
659 tests pass on both.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
I merged ~20 MRs today past a red pipeline.
doc-pagesandtestwere failing on every one of them,
main's pipelines were being cancelledby merge churn, and I used immediate merge rather than
merge-when-pipeline-succeeds. The guard worked; I overrode it.
The
doc-pagesfailure was real and is already fixed — it was theapi.leafdrift I later found by hand, which CI had been reporting thewhole time.
The
testfailure is this commit. Three problems, all mine, all invisibleon macOS:
1.
Task { }captures did not compile on Linux. Swift 6.1 there treatsthe closure as a
sendingparameter and refuses captures of the harnessand the test device. macOS's toolchain accepted them.
RelayHarnessis now@unchecked Sendablewith the reason written at the declaration — it wrapsa Vapor
Application, which is built to serve concurrently and is nevermutated after boot. A test-harness claim, and it says so.
TestDeviceneeded it too, and NOT for the reason it looks: everythingin it is a value type, but swift-crypto on Linux does not declare
Curve25519.Signing.PrivateKeySendable. I wrote "value types throughout,so genuinely Sendable" first and Linux said no; the comment now records
that rather than the tidy version.
2 and 3. Two tests asserted nothing wherever the suite runs as root —
which CI's container does. Both established "unwritable" with
chmod 0o500, and root bypasses the permission check, so the storecorrectly reported OK and the tests failed. The tests were wrong, not the
product.
Both now make the failure STRUCTURAL: a path whose parent is a regular
file cannot be created by anybody, because the kernel answers ENOTDIR
regardless of uid. Same failure for every user on every platform.
Verified in the actual CI image (
swift:6.1-noble, as root) and on macOS:659 tests pass on both.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
assigned to @paulhitt
mentioned in issue #6
mentioned in commit
ad95985589mentioned in commit
49445bbb30mentioned in merge request !59
mentioned in issue #56
changed the description