|
| 1 | +# Add Galay 5.0.2 (`gzj-creator.galay`) |
| 2 | + |
| 3 | +Date: 2026-08-30 |
| 4 | +Upstream: <https://github.com/gzj-creator/galay> |
| 5 | +Tag: `v5.0.2` (`d58976711790e47d5b0ad272e068d516192a1a1e`) |
| 6 | +Status: upstream has published the Clang 22 module fix as v5.0.2. The index |
| 7 | +follows that immutable archive; local GCC/LLVM module and consumer checks, |
| 8 | +archive reproducibility, and the mcpp 2026.8.27.2 package tests pass. The |
| 9 | +post-sync PR validation is green in validate run 33291129061 and site-check |
| 10 | +run 33291129055. |
| 11 | + |
| 12 | +## 1. Shape and identity |
| 13 | + |
| 14 | +Galay is source type (b), a library already developed for mcpp. Its v5.0.2 |
| 15 | +release carries a complete `mcpp.toml`, so the index entry is Form A and does |
| 16 | +not duplicate its build recipe. |
| 17 | + |
| 18 | +- Package identity: `namespace = "gzj-creator"`, `name = "galay"`. The |
| 19 | + namespace names the upstream owner; the package name remains one atomic |
| 20 | + segment. |
| 21 | +- The upstream manifest builds the default `galay.utils` and `galay.kernel` |
| 22 | + named modules plus their C++ implementations. SSL, HTTP, WebSocket, HTTP/2, |
| 23 | + database, RPC, MCP, and tracing sources remain opt-in features in that |
| 24 | + manifest, with the corresponding feature dependencies preserved. |
| 25 | +- The release manifest declares `platforms = ["linux", "macos"]`. The index |
| 26 | + therefore publishes `linux` and `macosx` entries only; Windows is omitted |
| 27 | + until the upstream manifest gains a Windows-compatible build. |
| 28 | +- License and description are taken from the upstream manifest: Apache-2.0, |
| 29 | + C++23 coroutine networking and protocol framework. |
| 30 | + |
| 31 | +## 2. Source and hash |
| 32 | + |
| 33 | +Both platform entries use the immutable GitHub tag archive: |
| 34 | + |
| 35 | + https://github.com/gzj-creator/galay/archive/refs/tags/v5.0.2.tar.gz |
| 36 | + |
| 37 | +The archive is 5,231,630 bytes. `sha256sum` was run twice on the complete |
| 38 | +archive and returned: |
| 39 | + |
| 40 | + 93a93fabcfeb1b0ae160f3082ed472571532ce208c112bf2697f94267b27332a |
| 41 | + |
| 42 | +`tar -tzf` succeeds and confirms the root `mcpp.toml`, the tracked include |
| 43 | +layout, and the fifteen named C++23 module interfaces are present. |
| 44 | + |
| 45 | +The v5.0.1 upstream patch remains intact: the generated module preludes only |
| 46 | +include `intrin.h` for `_MSC_VER` and `emmintrin.h` on x86. This addresses the |
| 47 | +earlier v5.0.0 Linux LLVM/macOS intrinsic-header failure without changing the |
| 48 | +new release's guards. |
| 49 | + |
| 50 | +The v5.0.2 fix addresses the separate Linux LLVM failure found in CI run |
| 51 | +33269750913, job 99146034674, with mcpp 2026.8.27.2 and LLVM 22.1.8. In |
| 52 | +v5.0.1, `async_aio.h` closed `namespace galay::async` and then defined the |
| 53 | +`AioCommitAwaitable::await_suspend` function template with a globally |
| 54 | +qualified-id. Because `galay_kernel.cppm` includes that header inside |
| 55 | +`export extern "C++"`, Clang 22 rejected the definition as not being at |
| 56 | +namespace scope and produced cascading `this`, `handle`, `m_waker`, |
| 57 | +`m_controller`, and `m_result` errors. v5.0.2 puts the definition back inside |
| 58 | +the `namespace galay::async` block. The declaration, template visibility, |
| 59 | +ABI, and Linux `USE_EPOLL` implementation remain unchanged. |
| 60 | + |
| 61 | +## 3. CN mirror |
| 62 | + |
| 63 | +`gtc` is not installed in this environment and no GitCode write credential is |
| 64 | +available. Following `docs/cn-mirror.md`, the descriptor uses the plain GLOBAL |
| 65 | +URL rather than inventing a mirror table. CN consumers fall back to GitHub; |
| 66 | +the `mcpp-res/galay` mirror can be added later without changing the package |
| 67 | +identity or version. |
| 68 | + |
| 69 | +## 4. Workspace member |
| 70 | + |
| 71 | +`tests/examples/galay` is a Unix-gated public-package consumer. Its member |
| 72 | +manifest has exactly one project index redirect: |
| 73 | + |
| 74 | + [indices] |
| 75 | + gzj-creator = { path = "../../.." } |
| 76 | + |
| 77 | +The test imports `galay.utils` and `galay.kernel`, checks Base64 and string |
| 78 | +helpers, links the out-of-line `kernel::Buffer` implementation, and validates |
| 79 | +IPv4 `kernel::Host` construction. Windows compiles a no-op `main()` because |
| 80 | +the upstream package has no Windows platform entry. |
| 81 | + |
| 82 | +The first RED run failed as expected before the descriptor existed: |
| 83 | + |
| 84 | + error: dependency 'gzj-creator.galay': no package found for exact selector |
| 85 | + |
| 86 | +After adding the descriptor, the first executable run caught an incorrect |
| 87 | +assumption about `Buffer::clear()` retaining its length; the assertion was |
| 88 | +changed to require the documented empty state. The corrected test then passed. |
| 89 | + |
| 90 | +## 5. Validation |
| 91 | + |
| 92 | +- `mcpp xpkg parse pkgs/g/gzj-creator.galay.lua` passed with the Form-A result |
| 93 | + and Linux/macOS version lists. |
| 94 | +- `mcpp test -p galay` with the v5.0.2 descriptor passed on the local default |
| 95 | + GCC toolchain: `test result ok. 1 passed; 0 failed`. |
| 96 | +- The CI-pinned mcpp 2026.8.27.2 Linux default and LLVM 22.1.8 tests pass: |
| 97 | + `test result ok. 1 passed; 0 failed` for each toolchain. |
| 98 | +- CI run 33269372157 passed on Linux default, macOS default, Windows default, |
| 99 | + lint, mirror reachability, graphics side-effect, and build checks. |
| 100 | +- The upstream Clang 22 regression test (`kernel.alignsrc`) and the complete |
| 101 | + CMake/Ninja Linux module surface pass with both GCC and LLVM 22.1.8, |
| 102 | + including `USE_EPOLL` and `galay.kernel`. |
| 103 | +- A module consumer importing both `galay.utils` and `galay.kernel` compiles, |
| 104 | + instantiates `co_await AsyncAio::commit()`, and runs successfully under LLVM |
| 105 | + 22.1.8; this confirms the template definition remains visible and member |
| 106 | + accesses bind to the awaitable instance. |
| 107 | +- The previous CI failure was reproduced from run 33269750913/job 99146034674 |
| 108 | + before the upstream patch and is resolved by v5.0.2; the v5.0.1 intrinsic |
| 109 | + guards remain covered by the prelude regression test. |
| 110 | +- PR #285 post-sync validate run 33291129061 passed Linux default GCC, Linux |
| 111 | + LLVM 22.1.8, macOS default, Windows default, lint, mirror-cn-reachable, |
| 112 | + graphics side-effect, member selection, and timing jobs. Site-check run |
| 113 | + 33291129055 also passed. |
| 114 | +- The build compiled 26 Galay units, including both default module interfaces, |
| 115 | + the kernel implementation units, and the transitive libaio package. |
| 116 | +- All six descriptor lint checks passed, and all 134 package descriptors passed |
| 117 | + `mcpp xpkg parse` with the CI-pinned binary. |
| 118 | +- Optional Galay features are intentionally not enabled by this minimal |
| 119 | + member. They remain upstream-owned feature/dependency decisions and need |
| 120 | + dedicated protocol/database environments before being advertised as tested. |
| 121 | + |
| 122 | +## 6. Follow-up |
| 123 | + |
| 124 | +When upstream publishes Windows support or a maintainer creates the |
| 125 | +`mcpp-res/galay` release asset, add the platform/mirror entry with the same |
| 126 | +archive bytes. The v5.0.2 release remains Linux/macOS in its own manifest, so |
| 127 | +the Windows example continues to compile a no-op test until a Windows package |
| 128 | +entry exists. |
0 commit comments