From c93352b5e82d7c60761ea0bdb3ae4e5054a7894b Mon Sep 17 00:00:00 2001 From: enricopiovesan <4609982+enricopiovesan@users.noreply.github.com> Date: Fri, 2 Oct 2026 20:40:54 +0000 Subject: [PATCH 1/2] chore(swift): point Package.swift at the swift-host-v0.14.0-4 xcframework --- packages/swift/TraverseEmbedder/Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/swift/TraverseEmbedder/Package.swift b/packages/swift/TraverseEmbedder/Package.swift index fb94aae2..1312e822 100644 --- a/packages/swift/TraverseEmbedder/Package.swift +++ b/packages/swift/TraverseEmbedder/Package.swift @@ -9,8 +9,8 @@ let package = Package( targets: [ .binaryTarget( name: "TraverseSwiftHost", - url: "https://github.com/traverse-framework/traverse/releases/download/swift-host-v0.14.0-3/TraverseSwiftHost.xcframework.zip", - checksum: "2007d783b143707c1120090ef8fada70ee21f72c4e7c44751f263e88160d741f" + url: "https://github.com/traverse-framework/traverse/releases/download/swift-host-v0.14.0-4/TraverseSwiftHost.xcframework.zip", + checksum: "959fd0054d852e423d30999d405cb2cd5e6628cb2952eea0d8709e647dcca4d2" ), .target( name: "TraverseEmbedder", From 52122723222bdbe0ba7ffe6428f7c0acb2026c58 Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Fri, 2 Oct 2026 14:42:39 -0600 Subject: [PATCH 2/2] test(swift): an over-budget invocation surfaces RESOURCE_LIMIT / bridge_timeout (#1615) Co-Authored-By: Claude Opus 5.5 --- .../BridgeResourceLimitTests.swift | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 packages/swift/TraverseEmbedder/Tests/TraverseEmbedderTests/BridgeResourceLimitTests.swift diff --git a/packages/swift/TraverseEmbedder/Tests/TraverseEmbedderTests/BridgeResourceLimitTests.swift b/packages/swift/TraverseEmbedder/Tests/TraverseEmbedderTests/BridgeResourceLimitTests.swift new file mode 100644 index 00000000..7ab3b246 --- /dev/null +++ b/packages/swift/TraverseEmbedder/Tests/TraverseEmbedderTests/BridgeResourceLimitTests.swift @@ -0,0 +1,28 @@ +import CryptoKit +import Foundation +import Testing +@testable import TraverseEmbedder + +/// Spec 074 FR-003 (1.1.0, #1615): an over-budget invocation surfaces the +/// stable resource-limit status and the `bridge_timeout` code through +/// `TraverseBridgeError`, instead of the opaque `-5` / `bridge_trap`. +@Test func overBudgetInvocationReportsAStableTimeout() throws { + let url = try #require(Bundle.module.url(forResource: "client_bridge.wasm", withExtension: nil, subdirectory: "Fixtures")) + let wasm = Array(try Data(contentsOf: url)) + let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true) + let runtime = root.appendingPathComponent("runtime", isDirectory: true) + try FileManager.default.createDirectory(at: runtime, withIntermediateDirectories: true) + try Data(wasm).write(to: runtime.appendingPathComponent("runtime.wasm")) + let bundle = try TraverseBundle( + rootURL: root, + runtimeWasmDigest: "sha256:" + SHA256.hash(data: Data(wasm)).map { String(format: "%02x", $0) }.joined() + ) + let client = try WasmiHostBridgeClient(bundle: bundle, limits: try TraverseHostLimits(fuelPerInvocation: 64)) + do { + _ = try client.initialize(configJSON: Data("{}".utf8)) + Issue.record("a 64-unit fuel budget (enough to create the host) must not complete initialize") + } catch let error as TraverseBridgeError { + #expect(error.status == -4) + #expect(error.code == "bridge_timeout") + } +}