Repository navigation
The first stable release. Every package's public API and the platforms in the README's
Platform support table are now a commitment under Semantic
Versioning: breaking or dropping either takes a new major version. To get there, no Swift
door throws (bad data is the verdict's Fault, as in every binding), Python and Ruby build
every number format the core accepts, the Rust scalar types hold at every boundary, what
was deprecated or never used goes (Java's GraalWasm backend, Go's ErrNativeUnavailable,
Swift's NativeLibraryError, Python's BACKEND), and every shipped file verifies from the
release tag alone.
Changed
- Swift — no door throws, and neither does
Cast.nativeVersion(). Every door and
nativeVersion()declaredthrowsand never threw: bad data is theVerdict'sFault,
and the core is linked in, so there is nothing to fail to load. Call sites need notry;
one left in place compiles with a warning. (Swift) - C# —
HyperCast.targetsno longer lists anEmccExportedFunctionper entry point. The
NativeFileReferenceis the whole Blazor WebAssembly wiring: the SDK's generated pinvoke
table calls each native function by symbol, so the link resolves them against the archive
andLibraryImport("*")reaches them through that table. The smoke test calls all twenty-seven
entry points with the list gone (on SDK 11.0.100-rc.2) and fails at the link with the
archive unlinked, so the list was dead weight. (C#) - The release is two acts at one tag, and every shipped file verifies from the tag.
PushingvX.Y.Zpacks every registry input, attests each package and the release as a
whole, preserves the bytes and plans every upload without publishing; a dispatch of
release.ymlwithprepared_run_idpublishes from the preserved bytes through what was
the recovery path. The release attestation is one statement signed at the tag whose
subjects are every registry package and every native library committed for Go, Swift and
PHP, and whose predicate is the release inventory, so
gh attestation verify <file> --repo SkunkWerkx/HyperCast --source-ref refs/tags/vX.Y.Z --predicate-type https://github.com/SkunkWerkx/.github/predicates/release/v1answers for
any of them, including the wheels and the committed natives that build provenance alone
tied to the preparation commit on master (SkunkWerkx/HyperUuid#35). The GitHub Release notes come from this
file's section for the version plus the verification commands, and a tag whose CHANGELOG
lacks the section is refused before anything publishes. The job bodies ofrelease.yml,
prepare-release.yml,stage-native-binaries.ymland every static check inci.yml
moved to the Forge (SkunkWerkx/.github, called at master, composite actions where the
repository's own identity signs or publishes), with this repository described to it by
.github/hyper.jsonand.github/scripts/abi_probe.c. Dependabot bumps every ecosystem in
one monthly pull request, every third-party action is pinned to a commit, and CodeQL runs
weekly. (repository only) - The Go, Swift and PHP suites check that the committed core is current. Those three
link binaries committed undergo/staticlib,swift/HyperCastCore.artifactbundleand
php/src/native, refreshed only at release, so a plain local run after a core change
tested the core as it was at the last staging. Outside CI, a run without the local core
(hypercast_local,HYPERCAST_LOCAL_CORE,HYPERCAST_NATIVE_LIBRARY) now stops with the
command to use when this checkout'srust/differs from the commit those binaries were
built from: Go and PHP before any test, Swift as a failingCoreFreshnessTests.
.github/scripts/local-core.shalso finds the Forge at../HyperForge. (repository only)
Fixed
-
Python — a separator, sign or percent symbol follows the core's rule: 1 to 8 UTF-8
bytes with no ASCII digit. Python alone also refused anything over two characters, so
a format every other binding builds (four no-break spaces, say) raisedValueError
there. The docs in every binding now state the rule the core enforces, where they said
"one or two characters". (Python) -
Ruby —
NumFormat.from_i18nfills a missing mark instead of raising.
from_i18n({separator: ","})raisedArgumentError, because the missing delimiter fell
back to","as well. A missing mark is now whichever of","and"."the declared one
is not, for the currency pair too, as Python'sfrom_localeconvand PHP's
fromLocaleconvalready did. (Ruby) -
Rust — safe scalar representation boundaries.
Symbol<N>rejects strings longer
than its one-byte length can carry, including whenNexceeds 255, preserving
UTF-8 boundaries.Decimaldisplay handles every public scale byte without a
panic, allocation, clamping or precision loss; its public fields and ABI remain
unchanged. Typed integer documentation makes the existing shortest-decimal
behavior above 2^53 explicit. (crates.io) -
C# — the Mac Catalyst registrar note names the SDK it was observed on. The README
said .NET 11 RC1 whileglobal.jsonpins 11.0.100-rc.2. The abort on the
trimmable-staticregistrar still reproduces on SDK 11.0.100-rc.2.26504.105, so the
smoke test keepsmanaged-staticthere and the README states it in the present
tense. (C#) -
PHP — no API or behaviour change. The package reaches 1.0.0 as 0.9.0 left it, its
docs stating the core's separator rule; its committed libraries are restaged from this
release's core, and the release attestation names each one. (Packagist)
Removed
- Java — the GraalWasm backend. The jar no longer carries the core a second time as a
wasm32-wasip1module, andCast.backend(), thehypercast.backendproperty and the
fall-back to the module on a platform without a native build are gone: the binding is FFM
downcalls into the library it bundles, as the other bindings link or load theirs. The module
served a platform nobody had asked for, and in HyperTabular, which carried the same backend,
replaying the suite through it in interpreter mode had become the longest step of every CI
leg.cargo wasm-module, thewasm32-wasip1export flags inrust/.cargo/config.tomland
the-Pwasmruns of the JMH suite and the Native Image smoke test leave with it. (Java) - Go —
ErrNativeUnavailable. The core is linked into the binary, so nothing ever
returned the error or panicked with it; it was kept, deprecated, only so code testing for
it kept compiling.Available,LoadErrorandNativeVersionstay. (Go) - Swift —
NativeLibraryError. The deprecated error type had no cases and was never
thrown, since the core is linked in on every platform.Cast.isAvailablestays, always
true, as the availability probe every binding carries. (Swift) - Python —
hypercast.BACKEND. It was always"native": the PyO3 extension is the only
backend, in CPython and in Pyodide alike. Ruby'sHyperCast::BACKENDstays, since it
tells the Magnus extension from Fiddle. (Python)
The full list is in CHANGELOG.md.
Verifying
Every file in this release verifies from the tag alone. One attestation, signed by this
repository's release.yml at v1.0.0, names all 102 of them: every registry
package (NuGet, RubyGems, PyPI, crates.io and Maven Central), the 34 native
libraries committed for Go, Swift and PHP, and the 8 metadata files staged beside
them. Its predicate is the release inventory attached below.
gh attestation verify <file> --repo SkunkWerkx/HyperCast \
--source-ref refs/tags/v1.0.0 --predicate-type https://github.com/SkunkWerkx/.github/predicates/release/v1The native libraries, the Python wheels and the archives inside the NuGet package and the
jar also carry build provenance from CI run 40232760003
at commit 07c0f9a, the parent of the tagged commit, signed by the Forge:
gh attestation verify <file> --repo SkunkWerkx/HyperCast --signer-repo SkunkWerkx/.github --source-digest 07c0f9a140eed2899c64b5783a7c0eeb6d04794binventory.json lists every file with its size and SHA-256 and, for each file with build
provenance, the commit it was built from and the repository that signed it; it carries
build provenance of its own at the tagged commit. PyPI additionally holds a PEP 740 publish attestation for every wheel.