Skip to content

chore(prebuilt): refresh libkcl binaries to kcl 3ec296a9 - #400

Merged
Peefy merged 3 commits into
mainfrom
chore/refresh-prebuilt-libkcl
Oct 8, 2026
Merged

Peefy merged 3 commits into
mainfrom
chore/refresh-prebuilt-libkcl

Conversation

@Peefy

@Peefy Peefy commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Why

The 29-case consistency suite (and any consumer of BuiltinService.ListMethod / the LoadPackage kcl-mod fields) cannot pass on CI for the bindings that load the committed prebuilts: go/lib/ darwin-amd64, linux-amd64/arm64, both musl archives and both windows dlls all predated those RPCs — the darwin-arm64 binary was refreshed in #383, the rest were last built before FormatTestReport existed. This is the load_package/list_method (and julia FormatTestReport) failures seen on the #394-#397 stack.

What

Rebuild every stale binary from kcl-lang/kcl at 3ec296a9 — the revision the sub-crate Cargo locks (python/java/swift/ruby/lua/cpp) and the darwin-arm64 prebuilt already track:

  • darwin-amd64, linux-amd64, linux-arm64: cargo (zig)build -r -p kcl-lib
  • linux-musl-amd64/arm64: cargo zigbuild (same recipe as kcl-lang/kcl's own musl workflows)
  • windows-amd64: x86_64-pc-windows-msvc on a windows runner
  • windows-arm64: now a genuine aarch64-pc-windows-msvc image instead of a copy of the x86_64 dll, so the dart workflow gains the windows-11-arm leg

Exported capi symbols verified to be a strict superset of the old binaries (0 removed); the darwin-amd64 dylib passes the full go consistency suite locally under Rosetta.

Also

  • dart-test/julia-test/ast-diff-test path filters gain go/lib/** — the FFI consumers must re-run when the prebuilt changes (go-test already covers it via go/**).

Merge order: this is a base PR — the #393-#397 stack rebases over it, after which their go/dart/julia/zig legs go green.

Peefy added 3 commits October 7, 2026 23:34
dart, julia and the ast-diff dump legs load the committed binaries under
go/lib/ instead of building from source, so a prebuilt refresh must
re-run those workflows.

Signed-off-by: Peefy <xpf6677@163.com>
Rebuild every stale prebuilt from kcl-lang/kcl at 3ec296a9, the rev the
sub-crate Cargo locks and the darwin-arm64 binary already track. The old
linux/windows/darwin-amd64/musl binaries predated BuiltinService.ListMethod
and the LoadPackage kcl-mod fields, so the 29-case consistency suite could
not pass on go, dart, julia or zig CI. windows-arm64 is now a real
aarch64-pc-windows-msvc image instead of a copy of the x86_64 dll.

Signed-off-by: Peefy <xpf6677@163.com>
The windows-arm64 prebuilt is a genuine aarch64-pc-windows-msvc build
now, so the Dart FFI loader works on the ARM64 runner and the leg
exercises it.

Signed-off-by: Peefy <xpf6677@163.com>
@Peefy
Peefy merged commit 634ffa1 into main Oct 8, 2026
33 of 34 checks passed
@Peefy
Peefy deleted the chore/refresh-prebuilt-libkcl branch October 8, 2026 01:56
Peefy added a commit that referenced this pull request Oct 8, 2026
Update every binding's package version and its kcl-* git dependency pins
from 0.13.0 to 0.13.1, and refresh the checked-in libkcl binaries.

Manifests (root and per-language Cargo.toml, pyproject.toml,
package.json + the eight @kcl-lib/native-* platform packages, java/kotlin
pom.xml, pubspec.yaml, gem version, build.zig.zon, CMake project version,
rockspec, KCL_VERSION, the publish workflows) all move to 0.13.1, as do
the install instructions in the READMEs. The rockspec is renamed to
kcl_lib-0.13.1-3.rockspec to match its new package_version.

c/Cargo.toml pinned kcl-api by rev as well as version, so the rev moves
842b02be -> 0e17d806 to stay consistent: at the old rev the workspace
still reads 0.13.0 and cargo would fail to resolve the 0.13.1 requirement.
This is the only rev pin in the tree.

Binaries, all sha256-verified against the sources they came from:

- kcl-lang/kcl v0.13.1 release assets (release 37631976551) for
  linux-{amd64,arm64}, linux-musl-{amd64,arm64}, darwin-{amd64,arm64},
  windows-amd64 and wasm32-wasip1.
- ios-arm64 and ios-arm64-sim rebuilt locally with cargo against the new
  rev, matching build-libkcl-mobile.yaml; lipo confirms arm64 for both.
- wasm/examples/browser/kcl.wasm had drifted from wasm/kcl.wasm and is
  replaced with the same canonical artifact so the two agree.

The six go/lib binaries that #400 had already rebuilt are taken from the
release assets here, not from #400. #400 built them from kcl 3ec296a9,
which is three commits behind the v0.13.1 tag and therefore reports
version 0.13.0 and misses the a80c8a34 sema fix. These report 0.13.1.

go/lib/windows-arm64/kcl.dll keeps #400's build. It is a genuine
aarch64-pc-windows-msvc image, so it stays ahead of the release matrix,
which ships windows-amd64 only.

The v0.13.0 behaviour comments and the list_method / BuiltinService
assertions are also left alone; see the PR description for why those now
need a separate pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Peefy <xpf6677@163.com>
@Peefy Peefy mentioned this pull request Oct 8, 2026
11 tasks done
Peefy added a commit that referenced this pull request Oct 8, 2026
Update every binding's package version and its kcl-* git dependency pins
from 0.13.0 to 0.13.1, and refresh the checked-in libkcl binaries.

Manifests (root and per-language Cargo.toml, pyproject.toml,
package.json + the eight @kcl-lib/native-* platform packages, java/kotlin
pom.xml, pubspec.yaml, gem version, build.zig.zon, CMake project version,
rockspec, KCL_VERSION, the publish workflows) all move to 0.13.1, as do
the install instructions in the READMEs. The rockspec is renamed to
kcl_lib-0.13.1-3.rockspec to match its new package_version.

c/Cargo.toml pinned kcl-api by rev as well as version, so the rev moves
842b02be -> 0e17d806 to stay consistent: at the old rev the workspace
still reads 0.13.0 and cargo would fail to resolve the 0.13.1 requirement.
This is the only rev pin in the tree.

Binaries, all sha256-verified against the sources they came from:

- kcl-lang/kcl v0.13.1 release assets (release 37631976551) for
  linux-{amd64,arm64}, linux-musl-{amd64,arm64}, darwin-{amd64,arm64},
  windows-amd64 and wasm32-wasip1.
- ios-arm64 and ios-arm64-sim rebuilt locally with cargo against the new
  rev, matching build-libkcl-mobile.yaml; lipo confirms arm64 for both.
- wasm/examples/browser/kcl.wasm had drifted from wasm/kcl.wasm and is
  replaced with the same canonical artifact so the two agree.

ruby/Cargo.lock is refreshed too. The version bump moved
ruby/Cargo.toml but not the lock, which still resolved kcl to 931e6a98 --
several releases before the tag. Every other binding's lock is
gitignored, so this is the only stale one in the tree. CI is unaffected
either way, since a plain `cargo build` re-resolves, but a --locked build
would otherwise compile the ruby extension against the wrong core.

The six go/lib binaries that #400 had already rebuilt are taken from the
release assets here, not from #400. #400 built them from kcl 3ec296a9,
which is three commits behind the v0.13.1 tag and therefore reports
version 0.13.0 and misses the a80c8a34 sema fix. These report 0.13.1.

go/lib/windows-arm64/kcl.dll keeps #400's build. It is a genuine
aarch64-pc-windows-msvc image, so it stays ahead of the release matrix,
which ships windows-amd64 only.

The v0.13.0 behaviour comments and the list_method / BuiltinService
assertions are also left alone; see the PR description for why those now
need a separate pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Peefy <xpf6677@163.com>
Peefy added a commit that referenced this pull request Oct 8, 2026
* release: bump bindings to KCL v0.13.1

Update every binding's package version and its kcl-* git dependency pins
from 0.13.0 to 0.13.1, and refresh the checked-in libkcl binaries.

Manifests (root and per-language Cargo.toml, pyproject.toml,
package.json + the eight @kcl-lib/native-* platform packages, java/kotlin
pom.xml, pubspec.yaml, gem version, build.zig.zon, CMake project version,
rockspec, KCL_VERSION, the publish workflows) all move to 0.13.1, as do
the install instructions in the READMEs. The rockspec is renamed to
kcl_lib-0.13.1-3.rockspec to match its new package_version.

c/Cargo.toml pinned kcl-api by rev as well as version, so the rev moves
842b02be -> 0e17d806 to stay consistent: at the old rev the workspace
still reads 0.13.0 and cargo would fail to resolve the 0.13.1 requirement.
This is the only rev pin in the tree.

Binaries, all sha256-verified against the sources they came from:

- kcl-lang/kcl v0.13.1 release assets (release 37631976551) for
  linux-{amd64,arm64}, linux-musl-{amd64,arm64}, darwin-{amd64,arm64},
  windows-amd64 and wasm32-wasip1.
- ios-arm64 and ios-arm64-sim rebuilt locally with cargo against the new
  rev, matching build-libkcl-mobile.yaml; lipo confirms arm64 for both.
- wasm/examples/browser/kcl.wasm had drifted from wasm/kcl.wasm and is
  replaced with the same canonical artifact so the two agree.

ruby/Cargo.lock is refreshed too. The version bump moved
ruby/Cargo.toml but not the lock, which still resolved kcl to 931e6a98 --
several releases before the tag. Every other binding's lock is
gitignored, so this is the only stale one in the tree. CI is unaffected
either way, since a plain `cargo build` re-resolves, but a --locked build
would otherwise compile the ruby extension against the wrong core.

The six go/lib binaries that #400 had already rebuilt are taken from the
release assets here, not from #400. #400 built them from kcl 3ec296a9,
which is three commits behind the v0.13.1 tag and therefore reports
version 0.13.0 and misses the a80c8a34 sema fix. These report 0.13.1.

go/lib/windows-arm64/kcl.dll keeps #400's build. It is a genuine
aarch64-pc-windows-msvc image, so it stays ahead of the release matrix,
which ships windows-amd64 only.

The v0.13.0 behaviour comments and the list_method / BuiltinService
assertions are also left alone; see the PR description for why those now
need a separate pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Peefy <xpf6677@163.com>

* fix(c,wasm): the v0.13.1 bump exposed two behaviour changes the tests assumed away

Both failures come from the release bump in #399, not from the guard
removal. Neither is reachable from the binding -- both need a change in
kcl-lang/kcl -- so what this commit does is stop the suite from reporting
the wrong thing, and say what the wrong thing is.

c/examples/generate_openapi_api.c asserted `strstr(spec, "\"AppConfig\"")`.
v0.13.1 qualifies a schema with the module it was declared in, so the
document carries `AppConfig___main__` and the substring never matched.
Dropping the closing quote matches either spelling.

The same file, and four siblings, each skipped when their RPC answered
with an empty reply. Those guards were dead on 0.13.1 but were never
reached before, because the example failed on the assertion first.

wasm/tests/consistency.test.ts could not read its fixture at all. It
resolved manifest paths to host absolute paths, but the instance sees a
MemFS; v0.13.1's preopen-aware loader rejects a path it cannot reach with
"Cannot find the kcl file". The file-based cases only ran because the
`new_core` skip hid them on 0.13.0. Seed the MemFS from the host instead,
and mount each fixture at the sandbox root -- that is the only location
where the module is left unmangled, so it is what makes
generate_openapi_v3 agree with the native runners.

Two cases still diverge and are recorded in WASM_DIVERGENT rather than
normalised away:

  generate_proto   the wasm build emits `Base` and `Address` twice, once
                   per reference, where the native build emits them once
  generate_doc_md  the wasm build titles the section `## Package` where
                   the native build titles it `## Package __main__`

Same core, same gitSha -- `getVersion` reports 0.13.1 at 0e17d806 on both
-- so this is the wasm32-wasip1 target disagreeing with the native one, and
no sandbox layout satisfies both RPCs. Normalising the names before
comparing would hide that; the skip names it in the run summary instead.

Verified locally:

  c/examples   make examples, then the CI loop over ./examples/* -- all pass
  wasm         npm test -- 17 suites, 145 tests, all pass

Signed-off-by: Peefy <xpf6677@163.com>

---------

Signed-off-by: Peefy <xpf6677@163.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
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