✗
Failing This test is currently failing.
Failed: backend-exec
Error Details
install
Failure Output
Showing last 10 of 28 lines
error: the following command failed with 1 compilation errors:
/opt/homebrew/Cellar/zig/0.15.2_1/bin/zig build-exe -ODebug --dep koru_parser --dep koru_ast=ast --dep koru_errors=errors --dep ast --dep flow_parser --dep liquid -Mroot=/Users/larsde/src/koru/tests/regression/400_RUNTIME_FEATURES/440_RESOURCE_BRIDGE/440_002_cross_session_discharge/output_emitted.zig -ODebug --dep ast --dep lexer --dep errors --dep type_registry --dep expression_parser --dep union_collector --dep module_resolver -Mkoru_parser=/usr/local/lib/koru/src/parser.zig -ODebug --dep errors -Mast=/usr/local/lib/koru/src/ast.zig -ODebug -Merrors=/usr/local/lib/koru/src/errors.zig -ODebug --dep ast --dep lexer --dep errors --dep expression_parser -Mflow_parser=/usr/local/lib/koru/src/flow_parser.zig -ODebug -Mliquid=/usr/local/lib/koru/src/liquid.zig -ODebug -Mlexer=/usr/local/lib/koru/src/lexer.zig -ODebug --dep ast --dep log -Mtype_registry=/usr/local/lib/koru/src/type_registry.zig -ODebug --dep lexer --dep ast -Mexpression_parser=/usr/local/lib/koru/src/expression_parser.zig -ODebug --dep ast -Munion_collector=/usr/local/lib/koru/src/union_collector.zig -ODebug --dep config --dep log -Mmodule_resolver=/usr/local/lib/koru/src/module_resolver.zig -ODebug -Mlog=/usr/local/lib/koru/src/log.zig -ODebug --dep log -Mconfig=/usr/local/lib/koru/src/config.zig --cache-dir .zig-cache --global-cache-dir /Users/larsde/.cache/zig --name output --zig-lib-dir /opt/homebrew/Cellar/zig/0.15.2_1/lib/zig/ --listen=-
Build Summary: 0/3 steps succeeded; 1 failed
install transitive failure
+- install output transitive failure
+- compile exe output Debug native 1 errors
error: the following build command failed with exit code 1:
.zig-cache/o/0c41be2c9bc10c1541c45cc00d09a65f/build /opt/homebrew/Cellar/zig/0.15.2_1/bin/zig /opt/homebrew/Cellar/zig/0.15.2_1/lib/zig /Users/larsde/src/koru/tests/regression/400_RUNTIME_FEATURES/440_RESOURCE_BRIDGE/440_002_cross_session_discharge .zig-cache /Users/larsde/.cache/zig --seed 0x5a0233fe -Z32672459fad3909d Code
// Test: Cross-session handle discharge
// The core bridge scenario: create handle in run 1, discharge in run 2
//
// This is the Hollywood OS pattern - state persists across turns,
// human or AI can act on resources created in previous turns.
~import "$std/runtime"
~import "$std/io"
const std = @import("std");
const HandlePool = @import("root").koru_std.interpreter.HandlePool;
// External pool - the bridge
var bridge_pool = HandlePool.init(std.heap.page_allocator);
// Events with obligations
~pub event open { path: []const u8 }
| opened []const u8[opened!]
~open = opened "file_1"
~pub event close { handle: []const u8[!opened] }
| closed
~proc close {
std.debug.print("close() called for handle\n", .{});
return .{ .closed = .{} };
}
~std.runtime:register(scope: "files") {
open(10)
close(1)
}
// Session 1: Open a file (creates obligation)
const SESSION_1 = "~open(path: \"test.txt\")\n| opened h |> result { handle: h }";
// Session 2: Close the file (discharges obligation)
const SESSION_2 = "~close(handle: \"file_1\")\n| closed |> result {}";
// Run session 1 - creates handle on bridge
~std.runtime:run(source: SESSION_1, scope: "files", budget: 100, handle_pool: &bridge_pool, auto_discharge: false)
| result r1 |> run_session_2(handles_after_open: r1.handles)
| done d |> std.io:print.ln("PASS: open={{ d.after_open:d }}, close={{ d.after_close:d }}")
| fail f |> std.io:print.ln("FAIL: {{ f.reason:s }}")
| exhausted _ |> std.io:println(text: "FAIL: session 1 exhausted")
| parse_error _ |> std.io:println(text: "FAIL: session 1 parse_error")
| validation_error _ |> std.io:println(text: "FAIL: session 1 validation_error")
| shape_error _ |> std.io:println(text: "FAIL: session 1 shape_error")
| event_denied _ |> std.io:println(text: "FAIL: session 1 event_denied")
| dispatch_error _ |> std.io:println(text: "FAIL: session 1 dispatch_error")
| scope_not_found _ |> std.io:println(text: "FAIL: session 1 scope_not_found")
// Helper event to run session 2 and report both counts
~event run_session_2 { handles_after_open: u32 }
| done { after_open: u32, after_close: u32 }
| fail []const u8
~proc run_session_2 {
std.debug.print("Session 1 left {} handle(s) on bridge\n", .{handles_after_open});
// Run session 2 to discharge the handle
const result = @import("root").koru_std.runtime.run_event.handler(.{
.source = SESSION_2,
.scope = "files",
.budget = 100,
.handle_pool = &bridge_pool,
.auto_discharge = false,
});
switch (result) {
.result => |r| {
std.debug.print("Session 2 complete, {} handle(s) remaining\n", .{r.handles});
return .{ .done = .{ .after_open = handles_after_open, .after_close = r.handles } };
},
.exhausted => return .{ .fail = "session 2 exhausted" },
.parse_error => return .{ .fail = "session 2 parse error" },
.validation_error => return .{ .fail = "session 2 validation error" },
.shape_error => return .{ .fail = "session 2 shape error" },
.event_denied => return .{ .fail = "session 2 event denied" },
.dispatch_error => return .{ .fail = "session 2 dispatch error" },
.scope_not_found => return .{ .fail = "session 2 scope not found" },
}
}
Test Configuration
MUST_RUN