Skip to content

feat: mirror OHOS kotlinx-coroutines-test 1.8.0-KBA-002 - #144

Merged
bytemain merged 1 commit into
staging3from
task141-coroutines-test-mirror
Aug 18, 2026
Merged

feat: mirror OHOS kotlinx-coroutines-test 1.8.0-KBA-002#144
bytemain merged 1 commit into
staging3from
task141-coroutines-test-mirror

Conversation

@bytemain

@bytemain bytemain commented Aug 18, 2026

Copy link
Copy Markdown
Member

Task #141 follow-up to task #93, requested by @mingqi.

What this does

Freezes and mirrors the OHOS kotlinx-coroutines-test graph into Raft Artifacts
with original coordinates and exact Tencent authority bytes:

  • org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0-KBA-002
  • org.jetbrains.kotlinx:kotlinx-coroutines-test-ohosarm64:1.8.0-KBA-002

This PR publishes nothing. No token, PUT, dispatch or consumer change.
The publish job is skipped and runs only on explicit workflow_dispatch with
publish=true.

Exact

  • head 586df6f3fe66d75ab268aab0b046dc697f4feb67
  • base / sole parent 3dbfd5adc69b871b0bc72277f150d49e6842e6e7
  • tree bfd6ddda2bf21a29ed4cfb960aeef991d561cd87
  • patch-id 6934159d1036df56e1776c9120a030afbc42a310
  • 6 files, +396/-0, single commit, DCO signed

Frozen closure

  • 45 files = 9 primaries + 36 checksum sidecars, 201,738 bytes
  • Plan against live Raft: ALL_ABSENT 45/45, 0 exact, 0 conflict
  • Inventory packet SHA-256 c22ae909916db9e2d2732124710a08aff0cb36a79c08c24b210f30788af6f565
  • Deterministic set SHA-256 57c45a26d73f97b28e8a81c7b7c7a95e79e6c8663461409c67143ead73977675

Primaries: root .pom / .module / .jar (metadata, 14,799) / -sources.jar;
ohosarm64 .pom / .module / .klib (78,170) / -sources.jar / -javadoc.jar.

The file set is empirical, not templated. The authority serves no directory
listing, so it was derived from Gradle module metadata and then probed for every
classifier and sidecar candidate. Two shape differences from task #121/#127 that
a reviewer should re-derive rather than assume: neither coordinate publishes a
.spdx.json, and the root has no -javadoc.jar while the OHOS module does.

Disclosure: the mirrored root is OHOS-only

The first Hosted attempt (run 32155693516) failed and the failure was real
signal, not flake. Resolving the multiplatform root on a JVM runner selects
jvmApiElements-published, which redirects through available-at to
kotlinx-coroutines-test-jvm -- a platform this task deliberately does not
mirror.

That redirect is a property of the resolving host, not of the frozen bytes. The
resolver therefore asserts module metadata only for the OHOS platform module and
checks the root as artifact bytes, and the run prints:

TASK141_TENCENT_AUTHORITY_RESOLVE_PASS ohos_components=1 artifacts=2
TASK141_DISCLOSURE mirrored root resolves for OHOS targets only; non-OHOS available-at platforms are not mirrored by task #141

Consequence a reviewer should weigh: after publication, a non-OHOS consumer
resolving this root from Raft alone would 404 on its platform module. That is in
scope as specified -- the task is the OHOS coroutine-test graph -- but it should
be an accepted, recorded limitation rather than a surprise.

Authority superset: 50 files, 45 mirrored

Review of task #142 by @cc-希乐 found a real gap my first probe grid missed. The
authority also supplies, for the root coordinate only:

kotlinx-coroutines-test-1.8.0-KBA-002-kotlin-tooling-metadata.json  200  7,701 bytes
  sha256 99ffd3883b035dc68877c3953fd33a120bf43a6fce935e30442da685220ce8d3
  plus its .md5 / .sha1 / .sha256 / .sha512 sidecars, all 200

I re-verified this independently, then ran a deliberately wide 228-probe suffix
sweep
across both coordinates to check there was no third gap. Result: the
authority supplies exactly 50 files, this manifest freezes 45, and the
difference is exactly those 5.

Resolution: keep 45, disclose explicitly. Reasons:

  1. The already-published sibling family does the same — kotlinx-coroutines-core:1.8.0-KBA-002
    and atomicfu:0.23.2-KBA-001 both have this file on the authority (200) and
    both lack it on Raft (404, with their .pom at 200 as positive control).
    Including it here would make this the only member of the family carrying it.
  2. It takes no part in dependency resolution, so no consumer can fail on it.
  3. A create-only Maven write can never be yanked, but an absent file can always
    be added by a later task. Under irreversibility, excluding is the reversible
    choice.

The record is now correct and machine-enforced rather than prose: the manifest
carries authority_files=50, an excluded= line naming the tooling metadata and
its sidecars, an authority_superset= note, the full probe_grid= used, and an
authority_listing= note that the authority answers a directory URL with HTTP
200 and a not-browseable notice, never 404
— so a check treating "no listing"
as 404 would be reading the wrong signal. authority_files is bound in the task
141 contract and fails closed if edited.

Dependency closure

The ohosArm64ApiElements-published variant declares atomicfu:0.23.2-KBA-001,
kotlinx-coroutines-core:1.8.0-KBA-002 and kotlin-stdlib:2.0.21-KBA-001.

The first two, with their ohosarm64 modules, are already public in Raft.
kotlin-stdlib:2.0.21-KBA-001 is Raft 404, but that gap is pre-existing and
not introduced here: the already-published and already-consumed
kotlinx-coroutines-core-ohosarm64:1.8.0-KBA-002 declares the identical
dependency and resolves today because conflict resolution selects a higher
published stdlib (2.0.21-KBA-003 / 2.0.21-KBA-010, both public).

It is recorded as a conditional closure member and is not published here.
Per @mingqi, if the real empty-cache OHOS resolve turns out to require the stdlib
coordinate, the writer stops before PUT and reports rather than silently folding
it into this release.

Carrier contents

  • publish/predecessors/task141-coroutines-test-manifest.tsv -- the 45-row frozen manifest
  • tools/raft-artifacts/mirror_maven_manifest.py -- adds the 141 contract binding
  • tools/raft-artifacts/test_mirror_maven_manifest.py -- 5 new tests, suite 20/20
  • tools/raft-artifacts/task141-coroutines-test-resolver/ -- empty-cache authority resolve
  • .github/workflows/task141-coroutines-test-mirror.yml -- contract + resolve jobs

Causal mutation coverage: inventory-packet binding, klib digest, authority
origin, and dropping one file each fail closed.

Hosted

Run 32159384473 on this exact: source-contract SUCCESS,
tencent-authority-resolve SUCCESS, publish SKIPPED. Compose PR Exact Matrix
32159384595, Task121 32159384430, Task127 32159384559 all SUCCESS.
Contract suite is 22/22 with 5 causal mutations.

Gate order

frozen packet -> Hosted -> one independent review (I do not self-review) ->
create-only writer on the existing RAFT_ARTIFACTS_PUBLISH_TOKEN channel ->
anonymous byte readback -> empty-cache resolve -> Mobile OHOS compileTest.

No Mobile source edit and no consumer cutover in this task.

@bytemain
bytemain force-pushed the task141-coroutines-test-mirror branch from 15df8f7 to 6b67b92 Compare August 18, 2026 15:47
Task #141 follow-up to task #93. Adds the frozen 45-file closure for
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0-KBA-002 and its
available-at kotlinx-coroutines-test-ohosarm64 module, plus a Hosted
carrier that validates the contract and resolves the authority bytes
from an empty cache.

The file set is empirical: the authority publishes no directory listing,
so it was derived from Gradle module metadata and then probed. Neither
coordinate ships a .spdx.json, and only the OHOS module has a javadoc
jar, so this closure is not shaped like task #121/#127.

The authority actually supplies 50 files for these two coordinates, not
45. The difference is the root -kotlin-tooling-metadata.json and its 4
checksum sidecars, which take no part in dependency resolution and are
absent from Raft for the already-published sibling family
kotlinx-coroutines-core 1.8.0-KBA-002 and atomicfu 0.23.2-KBA-001. This
task keeps that family shape and mirrors 45, but the gap is now named in
the manifest and bound by contract as authority_files=50, because a
create-only Maven write can never be yanked. The 45-vs-50 split was
measured by a 228-probe suffix sweep, and the probe grid is recorded in
the manifest so the next coordinate does not depend on recall.

The resolver asserts module metadata only for the OHOS platform module
and checks the root as artifact bytes. Resolving the multiplatform root
on a JVM runner selects jvmApiElements-published, which redirects via
available-at to kotlinx-coroutines-test-jvm, a platform this task does
not mirror; that redirect is a property of the resolving host, not of
the frozen bytes. The run prints that the mirrored root resolves for
OHOS targets only.

atomicfu 0.23.2-KBA-001 and kotlinx-coroutines-core 1.8.0-KBA-002 are
already public. kotlin-stdlib 2.0.21-KBA-001 is absent from Raft but is
a pre-existing condition of the already-published and already-consumed
coroutines-core-ohosarm64, so it is recorded as a conditional closure
member and is not published by this task.

This commit publishes nothing. Plan is ALL_ABSENT 45/45, 0 conflict.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
@bytemain
bytemain force-pushed the task141-coroutines-test-mirror branch from 6b67b92 to 586df6f Compare August 18, 2026 16:16
@bytemain
bytemain marked this pull request as ready for review August 18, 2026 18:05
@bytemain
bytemain merged commit 71f0e0b into staging3 Aug 18, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant