okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
d4842e6
main
1//// Partial repairs require permission, and reused call IDs need distinct rows. 2//// Direct calls pin compile state and stored call identities independently of turns. 3 4import albedo/harness/extensions/python/cells 5import albedo/harness/extensions/python/kernel as python 6import albedo/harness/runtime 7import gleam/string 8import gleeunit/should 9import harness/session_fixture 10 11pub fn partial_execution_requires_explicit_replay_permission_test () -> Nil { 12let assert Ok ( host ) = runtime . start ( ":memory:" ) 13session_fixture . initialise ( host ) 14session_fixture . create ( host , "a" , "/tmp" ) 15let assert Ok ( session ) = runtime . open_session ( host , "a" , "/tmp" ) 16let assert Ok ( failed ) = 17runtime . execute ( 18host , 19session , 20"counter = globals().get('counter', 0) + 1\nraise ValueError('bad')" , 215000 , 22) 23let assert Ok ( original ) = runtime . cell ( host , failed . cell_id ) 24original . started |> should . be_true 25let repair = 26"await cells.run('" 27<> failed . cell_id 28<> "', replacements=[(\"raise ValueError('bad')\", 'counter')]" 29let assert Ok ( denied ) = runtime . execute ( host , session , repair <> ")" , 5000 ) 30let assert Ok ( denied ) = denied . result 31denied . status |> should . equal ( python . Failed ) 32denied . output |> string . contains ( "allow_partial=True" ) |> should . be_true 33let assert Ok ( counter ) = runtime . execute ( host , session , "counter" , 5000 ) 34let assert Ok ( counter ) = counter . result 35counter . value |> should . equal ( "1" ) 36let assert Ok ( allowed ) = 37runtime . execute ( host , session , repair <> ", allow_partial=True)" , 5000 ) 38let assert Ok ( allowed ) = allowed . result 39allowed . value |> should . equal ( "2" ) 40runtime . stop ( host ) 41} 42 43pub fn ambiguous_repairs_and_compile_errors_do_not_execute_test () -> Nil { 44let assert Ok ( host ) = runtime . start ( ":memory:" ) 45session_fixture . initialise ( host ) 46session_fixture . create ( host , "a" , "/tmp" ) 47let assert Ok ( session ) = runtime . open_session ( host , "a" , "/tmp" ) 48let assert Ok ( failed ) = 49runtime . execute ( host , session , "state = 1\n(yield 1)" , 5000 ) 50let assert Ok ( original ) = runtime . cell ( host , failed . cell_id ) 51original . started |> should . be_false 52let assert Ok ( denied ) = 53runtime . execute ( 54host , 55session , 56"await cells.run('" <> original . id <> "', replacements=[('1', '2')])" , 575000 , 58) 59let assert Ok ( denied ) = denied . result 60denied . status |> should . equal ( python . Failed ) 61denied . output |> string . contains ( "exactly once" ) |> should . be_true 62let assert Ok ( spaced ) = 63runtime . execute ( 64host , 65session , 66"await cells.run('" 67<> original . id 68<> "', replacements=[('state =\\n1', '2')])" , 695000 , 70) 71let assert Ok ( spaced ) = spaced . result 72spaced . output |> string . contains ( "whitespace differs" ) |> should . be_true 73let assert Ok ( state ) = 74runtime . execute ( host , session , "'state' in globals()" , 5000 ) 75let assert Ok ( state ) = state . result 76state . value |> should . equal ( "False" ) 77runtime . stop ( host ) 78} 79 80pub fn reused_call_id_does_not_fail_unique_constraint_test () -> Nil { 81let assert Ok ( host ) = runtime . start ( ":memory:" ) 82let storage = runtime . ledger ( host ) 83let session = "test-session" 84let assert Ok ( first_id ) = 85cells . begin_call ( storage , session , "call_0" , "x = 1" ) 86first_id |> should . equal ( session <> "/call_0" ) 87 88let assert Ok ( second_id ) = 89cells . begin_call ( storage , session , "call_0" , "x = 2" ) 90string . starts_with ( second_id , session <> "/call_0-" ) |> should . be_true 91{ first_id != second_id } |> should . be_true 92 93let assert Ok ( found ) = cells . find_call ( storage , session <> "/call_0" ) 94found . id |> should . equal ( second_id ) 95 96runtime . stop ( host ) 97}