Skip to content

Weft 0.4.53

Choose a tag to compare

@easel easel released this 23 Oct 22:07
726a840

Weft 0.4.53

Weft 0.4.53 adds a closed compiler profile for typed, same-row backfill expressions carried by UMF table operation 0.2. The compiler source is 7413c19d16ca5d8d8ce60b62d49ca0a3250544df. It consumes UMF’s reviewed operation schema at commit 8a79d269e648f17ae1e24841ebc02b5f17020973, path spec/extensions/tables/operation-0.2.schema.json, SHA-256 5634f932533cebb972ba27b96d60802e2bc4f154cc1ef65b2d4c25cecfe3351e. The UMF schema pin remains at that reviewed commit.

G02 compiler profile

The compiler accepts one bounded UPDATE assignment whose target is selected only while NULL. Expressions can use unchanged same-row fields, typed literals, coalesce, strict NULL-propagating text concat, conditional branches in the existing closed predicate grammar, and exact add, subtract, and multiply. The declaration permits one assignment and no batch, with integral maxRows from 1 through 10,000. The full expression and conditional predicate tree has maximum depth 16 (root depth 0) and 256 nodes, counting predicate leaves; fan-out is at most 32, and each decoded UTF-8 literal payload is at most 1 MiB. Ambient values, self-reference, related-row access, arbitrary SQL, callbacks, and additional effects are outside this profile and are refused.

Numeric literals retain their authored tokens while admission derives bounded exact decimal meaning. Exponent and insignificant-zero forms are handled without passing unbounded or non-finite values to PostgreSQL. Finite numeric(p,s) leaves require 0 <= s <= p; each inferred node is limited to at most 1,000 total integral and fractional digits. Integer destinations require a statically integral result. PostgreSQL target precision, scale, range, and exact representability are checked so assignment cannot silently round or overflow. Text/native-width restrictions and other admitted Field rules are checked against the original UMF Field semantics.

Conditional predicate literals are checked against their referenced input Field's logical domain, including nullability and declared value, length, and range constraints; they are not validated against a native assignment width. Equality and inequality retain the existing NULL-safe meaning; IN literals receive the same logical Field-domain checks. A predicate value outside the source Field's logical domain is refused during preparation.

A private PostgreSQL exact-value guard rejects a NULL expression result and non-finite numeric inputs, including referenced numeric inputs from unchosen conditional branches, with SQLSTATE 22012 and transaction rollback. The PostgreSQL backend performs the native assignment cast and constraints, then compares each returned stored value with the exact expression result. A lossy conversion aborts the statement instead of being silently accepted. Ordinary native overflow and constraint SQLSTATEs are preserved. If any affected row fails, the transaction receives an error and callers do not receive a partial affected-row result. The public 8 MiB frame guard covers returned markers and outputs; it does not claim an 8 MiB bound on private PostgreSQL expression memory. Source, literal, AST, numeric, row, statement-timeout, lock-timeout and PostgreSQL datum limits constrain this profile. This is a compiler/backend contract for the admitted statement shape, not a host authorization or recovery policy.

UMF owns the closed declaration schema and Field meaning. The UMF migration planner proves that every expression input's meaning is unchanged across both retained sources. Weft's shared Rust core admits the current bound model and operation declaration; it cannot authenticate predecessor-source invariance on its own. The PostgreSQL backend lowers the admitted operation to SQL and implements the native guard. The host owns authority, approval, transaction boundaries, migration fencing, durable progress, replay identity, recovery, and database execution. A compiled operation does not authorize a host to run it.

Operation 0.1 remains unchanged. The 0.2 profile is separately versioned and migration-only; it does not widen ordinary generated-client action catalogs or change historical 0.1 predicate behavior.

Selected assets and qualification

This release selects three platform wheels. The macOS ARM64 wheel has functional compiler qualification. Linux x86_64 and Linux aarch64 qualification is packaging-only; no Linux G02 functional execution is claimed.

Asset SHA-256 Qualification scope
weft_sql-0.4.53-cp39-abi3-macosx_11_0_arm64.whl 4c8281945b852af02cae8602747fb7b1b652ab3a1369d7650efce62ae6d35c6c macOS ARM64 functional compiler cohort
weft_sql-0.4.53-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl db01c4cf6357d674f1591609a2b9c83a9322ad8f8937c345e5950cc1582b83d2 Linux x86_64 packaging only
weft_sql-0.4.53-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 2bb5ebc1ae1ad64847bbc15cd01e6a33f87f43ea417df38b36fa6e46268ca5a9 Linux aarch64 packaging only

The completed local candidate evidence includes 20 primary native migration cases, three fault/recovery scenarios, and a separate no-default native case. Independent evidence also covers 37 host scenarios, 87 fault checks, 19 no-default checks, 37 literal-domain cases, and 47 browser checks. The selected 0.1 SQL regression suite has 50 checks, and the table-operation unit suite has 25 tests. These suites overlap in scope and their counts are not additive. Formal packaging checks passed for the selected assets.

The host/native evidence is limited to the stated fixtures, statement profile, PostgreSQL 18.6, and installed candidate cohort. No production migration or general operation-executor acceptance is claimed. Other migration profiles, database engines, and production acceptance remain outside this release’s selected G02 scope.

This source descends from the unpublished 0.4.52 candidate at 32ec02f0c3fd24a97b7726500dc5992c6475908d, verified as an ancestor of the 0.4.53 compiler source. The 0.4.52 candidate receipts are not promoted as 0.4.53 evidence. Metadata head 5d196ea3184b1a711bb4bcf91215a496c18ce9b2 preserves the compiler source inputs stated above. The release commit and asset provenance are recorded in release-pins.json.