Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ jobs:
extension-artifacts-native-linux:
name: Native Extensions (Linux)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix_linux).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_linux).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -522,7 +522,7 @@ jobs:
extension-artifacts-native-android-static:
name: Native Extensions (Android Compilation)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
phase: android-static
Expand All @@ -533,7 +533,7 @@ jobs:
extension-artifacts-native-android:
name: Native Extensions (Android Packaging)
needs: [affected, extension-artifacts-native-android-static, extension-artifacts-native-linux]
if: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
phase: android-package
Expand All @@ -544,7 +544,7 @@ jobs:
extension-artifacts-native-ios:
name: Native Extensions (iOS)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix_ios).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_ios).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -554,7 +554,7 @@ jobs:
extension-artifacts-native-other:
name: Native Extensions (Desktop)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix_other).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_other).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -581,7 +581,7 @@ jobs:
needs:
- affected
- liboliphaunt-wasix-runtime
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-wasix') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-wasix') }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.extension_artifacts_wasix_matrix) }}
Expand Down Expand Up @@ -694,7 +694,7 @@ jobs:
mobile-extension-packages-android:
name: Extension Packages (Android)
needs: [affected, extension-artifacts-native-android]
if: ${{ needs.affected.outputs.mobile_extension_package_native_targets_android_csv != '' }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && needs.affected.outputs.mobile_extension_package_native_targets_android_csv != '' }}
uses: ./.github/workflows/mobile-extension-packages.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -706,7 +706,7 @@ jobs:
mobile-extension-packages-ios:
name: Extension Packages (iOS)
needs: [affected, extension-artifacts-native-ios]
if: ${{ needs.affected.outputs.mobile_extension_package_native_targets_ios_csv != '' }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && needs.affected.outputs.mobile_extension_package_native_targets_ios_csv != '' }}
uses: ./.github/workflows/mobile-extension-packages.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -732,7 +732,7 @@ jobs:
liboliphaunt-native-desktop-linux:
name: Native Runtime (Linux)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_desktop_runtime_matrix_linux).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.liboliphaunt_native_desktop_runtime_matrix_linux).include[0] != null }}
uses: ./.github/workflows/liboliphaunt-native-desktop.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -742,7 +742,7 @@ jobs:
liboliphaunt-native-desktop-other:
name: Native Runtime (Desktop)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_desktop_runtime_matrix_other).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.liboliphaunt_native_desktop_runtime_matrix_other).include[0] != null }}
uses: ./.github/workflows/liboliphaunt-native-desktop.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand Down Expand Up @@ -770,7 +770,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-android') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-android') }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_android_runtime_matrix) }}
Expand Down Expand Up @@ -857,7 +857,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-ios') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-ios') }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_ios_runtime_matrix) }}
Expand Down Expand Up @@ -1092,7 +1092,7 @@ jobs:
- liboliphaunt-native-desktop
- liboliphaunt-native-ios
- liboliphaunt-native-ios-abi
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -1165,7 +1165,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'rust-sdk-package') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'rust-sdk-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
Expand Down Expand Up @@ -1249,7 +1249,7 @@ jobs:
broker-runtime-linux:
name: Broker Runtime (Linux)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.broker_runtime_matrix_linux).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.broker_runtime_matrix_linux).include[0] != null }}
uses: ./.github/workflows/broker-runtime.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -1259,7 +1259,7 @@ jobs:
broker-runtime-other:
name: Broker Runtime (Desktop)
needs: [affected, checks, tests]
if: ${{ fromJson(needs.affected.outputs.broker_runtime_matrix_other).include[0] != null }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && fromJson(needs.affected.outputs.broker_runtime_matrix_other).include[0] != null }}
uses: ./.github/workflows/broker-runtime.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand Down Expand Up @@ -1287,7 +1287,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'node-direct') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'node-direct') }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.node_direct_runtime_matrix) }}
Expand Down Expand Up @@ -1466,7 +1466,7 @@ jobs:
swift-bindings:
name: Builds / Swift Native Bindings
needs: [affected, checks, tests]
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'swift-bindings') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'swift-bindings') }}
runs-on: macos-26
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -1505,7 +1505,7 @@ jobs:
- affected
- liboliphaunt-native-ios-abi
- swift-bindings
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
Expand Down Expand Up @@ -1550,7 +1550,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'kotlin-sdk-package') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'kotlin-sdk-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
Expand Down Expand Up @@ -1693,7 +1693,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'js-sdk-package') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'js-sdk-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
Expand Down Expand Up @@ -1867,7 +1867,7 @@ jobs:
wasix-ts-package:
name: Packages / WASIX TypeScript SDK
needs: [affected, checks, tests]
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-ts-package') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-ts-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
Expand Down Expand Up @@ -2027,7 +2027,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-rust-package') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-rust-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
Expand Down Expand Up @@ -2073,7 +2073,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-runtime') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-runtime') }}
runs-on: ubuntu-24.04
timeout-minutes: 360
env:
Expand Down Expand Up @@ -2262,7 +2262,7 @@ jobs:
- affected
- liboliphaunt-wasix-runtime
- liboliphaunt-wasix-aot
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-release-assets') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-release-assets') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all') }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -2333,7 +2333,7 @@ jobs:
- affected
- checks
- tests
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-postmaster') }}
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.checks.result == 'success' && needs.tests.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-postmaster') }}
runs-on: ubuntu-24.04
timeout-minutes: 240
steps:
Expand Down Expand Up @@ -3003,7 +3003,7 @@ jobs:
- liboliphaunt-native-ios-abi
- react-native-sdk-package
- swift-sdk-package
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
runs-on: macos-26
timeout-minutes: 180
env:
Expand Down Expand Up @@ -3332,7 +3332,7 @@ jobs:
needs:
- affected
- mobile-build-ios
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
if: ${{ !cancelled() && !failure() && !contains(needs.*.result, 'skipped') && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
runs-on: macos-26
timeout-minutes: 45
steps:
Expand Down
15 changes: 13 additions & 2 deletions src/docs/internal/OLIPHAUNT_PATCH_STACK.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
# Native PostgreSQL patch stack

The ordered native recipe lives in
[`postgres/series`](../../runtimes/liboliphaunt/native/postgres/series),
[`postgres/series`](../../native/runtime/postgres/series),
and the shared source pin lives in
[`source.toml`](../../postgres/versions/18/source.toml).
[`source.toml`](../../third-party/postgres/source.toml).
Each patch header explains its change. Platform builders apply that series with
`git apply --whitespace=error-all` before compiling PostgreSQL.

Run the native runtime build and its C ABI, SQL, lifecycle, and extension tests
for behavioral evidence. Source fragments, author headers, and a generated
review table do not prove those behaviors and no longer gate qualification.

## Correctness consolidation

Patch 0021 models trusted embedded sessions: catalog identity, normal admission
and wraparound protections without pretending an absent postmaster exists.
Patch 0022 keeps cancellation, timers, wakeups, signal masks and COPY deadlines
inside the embedding boundary. Its narrower changes supersede the former
0021 wake-epoll-self-pipe patch; they are not an optional performance switch.

Startup/cleanup, configured identity and host working-directory restoration
must be checked through the real C ABI, not inferred from patch formatting.
29 changes: 27 additions & 2 deletions src/docs/internal/WASIX_PATCH_STACK.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,37 @@
# WASIX PostgreSQL patch stack

The ordered patches live in
[`patches/series`](../../runtimes/liboliphaunt/wasix/assets/build/postgres/patches/series);
[`postgres/series`](../../wasix/runtime/postgres/series);
the PostgreSQL source pin lives in
[`versions/18/source.toml`](../../postgres/versions/18/source.toml).
[`source.toml`](../../third-party/postgres/source.toml).
Each patch header explains its change. The WASIX builder applies that series
before compiling the runtime.

Use the built runtime's protocol and extension tests for behavioral evidence.
Source fragments and generated review tables no longer gate qualification.
The concurrent Postmaster runtime has its own source, patches, and recovery tests.

## Retired patches

These embedded WASIX numbers remain reserved for traceability; they do not
identify Native or Wasmer patches. The selected series is authoritative.

| Numbers | Why they were removed |
| --- | --- |
| 0013, 0020 | Host-recovery symptom patches retained an exception boundary after its frame returned. Live guest-local recovery replaces them. |
| 0014 | The selected compiler already emitted the intended unaligned hash load; no isolated residual gain justified the fork. |
| 0015 | The current-XID shortcut lacked demonstrated isolated benefit. |
| 0016, 0026 | int4 comparison shortcuts did not prove active comparator identity and could bypass custom opclass semantics. |
| 0017 | Large stack scratch changed allocation ownership and recoverable failure behavior without an earned performance benefit. |
| 0024 | Byte searching could cross non-UTF8 multibyte character boundaries. The LIKE optimization is removed, not retained with an encoding fix. |
| 0028 | The semaphore-reset shortcut did not preserve PostgreSQL semantics. |
| 0030 | Cached WAL-segment arithmetic overflowed at an endpoint; a correction did not establish worthwhile speedup. |
| 0031 | Removing activity reporting discarded behavior without adequate justification. |
| 0035, 0036 | Scalar synchronization replacements lacked complete observer-exclusivity proof and an isolated performance win. |

Correctness removals and unearned optimizations are different decisions; neither
should be reversed merely to improve a compound benchmark score.

Guest recovery, startup identity and output contracts must be updated together
with the Rust and browser hosts. Patch 0044 establishes the host-selected catalog
principal before startup policy runs; a later `SET ROLE` is not equivalent.
1 change: 1 addition & 0 deletions src/docs/maintainers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Executable configuration is authoritative. Documentation explains intent and ope
| CI gates and test selection | `testing.md`, `tooling.md` | `.github/workflows/ci.yml`, `tools/ci/ci_plan.mts`, Moon project files |
| Binary artifacts and WASIX provenance | `assets.md`, `compiler-caching.md` | runtime target metadata, exact producer SHA, runtime/AOT manifests and checksums, `src/wasix/runtime/tools/xtask` |
| WASIX host APIs and storage | `wasix-usage.md` | WASIX binding source, host pins/patches, and product Moon tasks |
| Runtime stacks, buffers, and streaming budgets | `runtime-resource-budgets.md` | Owning runtime constants and `src/wasix/runtime/protocol-contract/contract.json` |
| WASIX postmaster runtime and carrier | `wasix-postmaster.md` | `src/wasix/postmaster`, its Moon project, sealed-carrier policy, and release metadata |
| Extension support and packaging | `extension-packaging-policy.md` | extension catalog, global target profiles, native-component contract, release catalog |
| SDK contracts | `sdk-products-policy.md`, `sdk-parity-policy.md`, `sdk-api-surface.md` | SDK manifests, package manifests, generated extension metadata, clean-consumer tests |
Expand Down
Loading