bin-runner #36

Merged
zacheryasc merged 103 commits from bin-runner into master 2026-02-13 14:11:40 +00:00
Owner
No description provided.
zacheryasc added 103 commits 2026-02-13 14:08:47 +00:00
Guest alloc returning a pointer near the end of linear memory
(ptr + msg_len > memory_size) causes a Rust panic in copy_from_slice,
which poisons the actor permanently instead of dropping the message
and keeping the actor alive.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Guest alloc could return a pointer where ptr+len exceeds linear memory
size, causing a Rust panic that permanently poisoned the actor. Now
validates ptr+len <= memory.len() before writing, dropping the message
on OOB (consistent with other allocation failure handling).

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Native watcher watching a WASM actor does not receive ActorExited when
the target is stopped via rt.stop_actor(). Root cause: StopSignal
interception in tick_all (worker.rs:734) sets stopping=true but does
not push to the deaths vector, so phase 5b watch notifications never
fire for externally-stopped actors.

Also adds P0-2 through P1-7 test scenarios (all passing):
- empty message, oversized message, allocator exhaustion
- nonexistent address send, wrong export signature/name
- graceful stop, negative payload_len, independent stores
- WASM-to-WASM relay

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
StopSignal interception in tick_all set stopping=true but did not push
to the deaths vector, so phase 5b watch notifications never fired for
externally-stopped actors (via rt.stop_actor()). Now pushes
(addr, ExitReason::Stopped) to deaths, consistent with the
ctx.stop_self() path.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Adds 15 new tests (26 total) covering the full WASM binary runner:

Scenario tests:
- P0: alloc OOB, empty msg, allocator exhaustion, oversized msg
- P1: nonexistent address, wrong exports, graceful stop, negative
  payload_len, independent stores, watch integration
- P2: WASM-to-WASM relay, multi-worker runtime

Property tests (proptest):
- Arbitrary bytes round-trip through echo (identity property)
- Double always produces exactly 2 copies (algebraic property)

Found and fixed 2 bugs:
- actor.rs: missing bounds check on alloc pointer before copy_from_slice
- worker.rs: StopSignal didn't emit watch death notification

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
When a guest calls swactor.send then traps, the outbox entry survives
and leaks into the next successful handle() call. The outbox should be
cleared when handle traps, since the guest's operation was incomplete.

Also adds: invalid WASM bytes test, zero-length payload send test,
multiple sequential traps test (all passing).

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
When a guest calls swactor.send() then traps, the outbox entries from
the incomplete operation survived and leaked into the next successful
handle() call, delivering messages from a failed context. Now clears
the outbox on trap, consistent with the "drop everything from failed
operations" semantics.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- Module with trapping start function correctly rejected by builder
- Self-send feedback loop works (echo to own address, relay on next tick)
- Guest sending 10 messages in one handle: all 10 delivered via outbox
- Overlapping dest_ptr and payload_ptr in send: reads are independent

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- Non-ByteMessage to WASM actor is silently ignored (type mismatch)
- Guest mutable global state persists across handle() calls (counter)
- Native handler can spawn WASM actor dynamically via ctx.spawn()

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- mixed_outbox_partial_delivery: guest sends to valid + garbage addresses in same handle,
  verifies only valid sends deliver and actor survives
- drop_oldest_mailbox_with_wasm_actor: DropOldest policy keeps newest 3 of 5 messages
- echo_to_full_inbox_silently_drops: bounded inbox capacity silently drops excess echoes

All 119 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- pingpong_wasm_echoes_bounded_by_budget: actor_message_budget limits per-tick processing
- wrong_alloc_signature_two_params_rejected: builder rejects alloc(i32,i32)->i32
- wrong_handle_return_type_rejected: builder rejects handle(i32,i32)->i32
- send_with_overlapping_dest_and_payload: aliased dest+payload memory reads work correctly

All 123 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- memory_not_exported_returns_missing_export: memory defined but not exported as "memory"
- multi_value_module_rejected_by_engine: engine config rejects multi-value returns
- send_dest_at_exact_memory_boundary: dest_ptr + 32 == mem_len succeeds
- send_dest_one_past_memory_boundary_traps: dest_ptr + 32 > mem_len traps safely

All 127 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- reference_types_module_rejected: externref table rejected by sandboxed engine
- trapping_actor_does_not_affect_sibling: trap in actor 1 doesn't corrupt actor 2
- alloc_returns_negative_for_nonzero_drops_message: negative ptr gracefully drops
- global_counter_accumulates_across_messages: mutable global state persists across 5 calls

All 131 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- send_import_zero_length_payload_delivers_empty: payload_len=0 delivers empty msg
- actors_from_separate_engines_coexist: two engines on same runtime work independently
- rapid_spawn_send_stop_50_rounds: 50 sequential spawn-send-stop cycles all deliver
- start_function_that_succeeds_allows_normal_operation: start initializes global, handle uses it

All 135 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- prop_random_payload_sizes_never_panic: random 0-8KB payloads never crash host
- multi_page_data_segments_persist: data segments initialized across 3 memory pages
- conditional_send_fan_out_based_on_payload: command byte controls 0/1/2x sends
- guest_with_advancing_allocator_handles_multiple_messages: proper bump alloc, 10 msgs in one tick

All 139 tests pass (9 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_overwrites_payload_after_send_outbox_has_copy: outbox snapshots memory at send time
- alloc_grows_memory_returns_pointer_in_new_page: memory.grow per alloc, 5 messages through
- trap_after_successful_send_clears_outbox: trap discards all outbox entries including valid ones
- send_payload_at_memory_offset_zero: offset 0 is a valid payload location

All 143 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- wasmtime_error_converts_to_wasm_actor_error: From conversion produces Wasmtime variant
- three_wasm_actors_on_two_threads: 3 WASM echo actors on 2-thread runtime all deliver
- handle_with_if_else_branching: guest uses if/else to send different responses by length

All 146 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- handle_with_loop_computes_sum: iterative byte sum via wasm loop/br, u8 overflow wrapping
- send_with_dest_ptr_zero_reads_from_memory_start: dest_ptr=0 is a valid location
- stop_actor_with_pending_messages_no_crash: stop before tick with 10 queued messages
- prop_truncated_wat_always_produces_error: any truncated WASM bytes always fail to build

All 150 tests pass (10 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- same_tick_message_ordering_preserved: 20 numbered messages arrive in FIFO order
- send_payload_ptr_plus_len_overflow_traps: i32::MAX payload_ptr + 1 traps safely
- handle_sends_100_messages_in_one_call: 100 sends in single handle via loop
- br_table_dispatch_in_handle: switch-like dispatch on first payload byte
- Fixed prop_truncated_wasm_never_panics (renamed): test only asserts no-panic, not always-error

All 154 tests pass (10 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- mutual_watch_wasm_actors: watcher notified when watched WASM actor stops
- select_instruction_in_handle: wasm select (ternary) based on payload presence
- wasm_to_wasm_to_native_relay: 3-layer echo1→echo2→inbox relay
- prop_any_dest_address_bytes_never_panic: arbitrary 32-byte dest address never panics

All 158 tests pass (11 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- native_handler_spawns_wasm_actor_inline: native handler spawns WASM actor + sends
- handle_uses_many_locals: guest uses 4 local variables for arithmetic
- wasm_actor_survives_1000_ticks: 1000+ empty ticks + 10 messages, no resource leak
- send_to_dead_wasm_actor_silently_dropped: send to stopped actor doesn't panic

All 162 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- static_alloc_pointer_messages_overwrite: same alloc ptr, outbox snapshots correctly
- nested_blocks_in_handle: nested block/br control flow with 3 branches
- guest_uses_memory_size_instruction: memory.size reports correct page count
- prop_spawn_send_stop_cycle_never_panics: random msg count + payload size lifecycle fuzz
- Fixed unused variable warning in prop_random_payload_sizes_never_panic

All 166 tests pass (12 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_start_function_modifies_alloc_region: host overwrites pre-filled 0xFF memory
- engine_clone_is_same_engine: cloned engine produces working actors
- handle_uses_i64_operations: i64 arithmetic with i32.wrap_i64
- two_hundred_actors_from_same_engine: 200 actors all process one message
- Updated history.md with Cycles 27-39

All 170 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- handle_receives_just_address_no_payload: 32-byte message echos empty payload
- guest_writes_last_byte_of_memory: write/read at offset 65535
- alloc_returns_overlapping_region: static alloc region, outbox snapshots correctly
- memory_exported_with_wrong_name_fails: memory as "heap" not "memory" rejected
- fan_in_from_multiple_native_senders: 5 inboxes all receive correct echo responses

All 175 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- module_with_internal_function_calls: helper functions (double, add_ten) composed in handle
- build_from_raw_wat_bytes: WAT-compiled silent actor works
- build_and_discard_100_actors: WasmActor drops cleanly 100 times
- handle_uses_floating_point: f64 arithmetic with i32.trunc_f64_s
- empty_wasm_bytes_error: empty Vec<u8> produces build error

All 180 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- module_with_funcref_table_works: call_indirect through funcref table dispatches correctly
- concurrent_build_from_shared_engine: 4 threads build actors from same engine
- guest_uses_memory_copy_for_response: bulk memory.copy for message relay
- wasm_actor_error_is_send_and_sync: compile-time trait check

All 184 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- all_256_byte_values_round_trip: every byte value 0x00-0xFF echoes correctly
- guest_uses_memory_fill_for_response: memory.fill writes 10 constant bytes
- wasm_actor_works_normally_while_being_watched: watched actor processes 5 msgs then stops
- double_guest_with_max_byte_value: double guest handles 0xFF payload correctly

All 188 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- large_4kb_message_round_trips: 4096-byte payload echoes with pattern verification
- guest_reports_payload_length: guest computes and sends back payload length as LE i32
- alloc_returns_odd_alignment: alloc returns 1 (unaligned), host writes correctly
- shared_engine_clone_and_debug: cloned engine Debug output matches
- idle_ticks_dont_affect_wasm_actor: 500 empty ticks, then message still works

All 193 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- wasm_and_native_alternate_in_same_tick: 5 WASM + 5 native msgs in same tick
- guest_sums_two_payload_bytes: sum computation with value duplication
- single_byte_payload_echo: minimum meaningful payload round-trip
- module_with_no_functions_fails: module with only memory export rejected
- response_varies_by_message_size: 4 different sizes produce correct length reports
- prop_echo_is_deterministic: same input to two fresh actors → same output
- comprehensive_lifecycle_all_guest_types_200th: echo+double+silent lifecycle

**200 tests pass** — 3 bugs found/fixed, 13 property tests, ~7,150 lines.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- alloc_at_page_boundary_works: alloc + msg = exactly 65536, in bounds
- alloc_one_past_page_boundary_drops: alloc + msg = 65537, OOB drops gracefully
- multiple_runtimes_with_wasm_actors: two separate runtimes with WASM actors
- guest_mirrors_full_message: sends full message (addr+payload) as payload

All 204 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_sends_to_self_via_framed_address: self-send bounces through, reaches inbox
- guest_uses_bit_rotation: i32.rotl instruction
- guest_uses_bit_counting: i32.clz, i32.ctz, i32.popcnt instructions
- stop_every_other_actor_remaining_work: stop 5 of 10, other 5 still respond

All 208 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_uses_i32_store_load: verifies little-endian i32 store/load
- guest_uses_eqz: i32.eqz instruction for empty/non-empty detection
- silent_guest_processes_1000_messages: silent actor handles 1000 messages, stays alive
- send_before_first_tick_delivers: send immediately after spawn delivers on first tick

All 212 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_uses_modulo: i32.rem_u instruction for mod 10 computation
- echo_8kb_payload: 8192-byte payload round-trips with pattern check
- duplicate_sends_all_deliver: 5 identical messages all deliver
- prop_full_lifecycle_never_panics: combined fuzz (1-5 actors, 0-10 msgs, any byte)

All 216 tests pass (14 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_xor_transform_key: loop-based XOR cipher with 0xAA key
- actor_address_reconstructible_from_bytes: ActorAddress round-trips through raw bytes
- double_guest_watch_fires_once_on_stop: double works + watch notifies exactly once
- byte_message_various_constructors: ByteMessage from string, empty, 1024 zeros

All 220 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_uses_shift_operations: i32.shl and i32.shr_u bit shifts
- guest_uses_bitwise_and_or: i32.and (0xFF & 0x0F) and i32.or (0xF0 | 0x0F)
- echo_and_double_coexist_same_worker: different guest types on same runtime
- guest_reads_i16_from_payload: i32.load16_u reads little-endian 16-bit value

All 224 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- repeated_build_same_bytes_independent: 3 actors from same bytes, stop one, others work
- guest_reads_stale_memory_region: reading uninitialized memory is safe
- prop_any_guest_module_processes_safely: echo/double/silent × random msg count
- three_level_nested_function_calls: inc→double_inc→transform chain (x+2)*3

All 228 tests pass (15 property tests). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- grow_memory_and_use_new_page_for_send: memory.grow then send from new page
- twenty_actors_twenty_messages_each: 400 total messages across 20 actors
- module_with_only_send_import_needed: minimal sending module works
- guest_data_segment_used_as_template: data segment content sent as payload

All 232 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- send_raw_bytes_to_inbox: direct ByteMessage to inbox address
- multiple_data_segments_different_offsets: 3 data segments concatenated
- echo_across_100_separate_ticks: 100 messages across 100 individual ticks
- guest_with_nop_instructions: nop instructions don't affect behavior

All 236 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- interleaved_spawn_and_message_delivery: spawn-send-spawn-send-tick delivers both
- guest_uses_i32_store16: 16-bit LE store/read
- guest_computes_min_max: select instruction for min/max of two bytes
- drop_runtime_with_live_actors: drop runtime with 10 live WASM actors, no panic

All 240 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
- guest_with_immutable_global: i32 global constant used in response
- multiple_echo_round_trips: 5 sequential send-receive-send cycles
- builder_is_consumed_on_build: verify builder ownership semantics
- empty_tick_between_sends_preserves_order: A-B-C with empty ticks between

All 244 tests pass. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 6 tests: guest reverses payload via WAT loop, extra exports tolerated,
comprehensive guest fuzz property test, respawned actor gets different address,
echo+double to separate inboxes, builder accepts slice reference.
No new bugs found. All 250 tests pass.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: local.tee instruction, 16KB payload round-trip, two independent
runtimes with WASM actors, i64-to-i32 wrap instruction, random WAT variations
property test. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: three destinations from three echo actors, one-message-per-tick
for 10 ticks, 10-page initial memory, fill+copy together, stop with pending
messages. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: unreachable instruction trap recovery, bump allocator advancing
pointers, block/loop/br_if control flow, stop one of two actors, property test
spawning 1..20 actors from same engine. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: self-send loop bounded by budget, empty module missing exports,
static alloc same pointer echoes, two engines two runtimes cross-combo, 32KB
payload round-trip. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: zero-length payload from guest, overlapping dest/payload regions,
alloc exhaustion drops gracefully, stop all actors in runtime. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: send then OOB send clears outbox, i32.extend8_s instruction,
double processes then stops cleanly, near-page payload echo (60KB), property
test echo preserves arbitrary content. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: alloc trap then normal message, unused table tolerated, alternating
large/small messages, silent absorbs 200 messages, two actors from cloned bytes.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: logical right shift, 100 messages across 100 ticks, three-deep
nested if/else, increasing payload sends in one handle, engine dropped after
build. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 6 tests: grow memory and use new page, native verifier receives WASM echo,
sequential echo/double/silent lifecycle, zero-page memory, double receives two
messages produces four, stop-with-pending property test. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: write offset zero, 10 echo actors all respond, alternating
silent/sending behavior, budget=1 one-per-tick, echo with address-only message.
No new bugs found.

**300 tests pass milestone** — 3 bugs found and fixed total, 20 property tests,
68 cycles of testing. Implementation proved extremely robust.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: multiple mutable globals rotation, large data segment module,
echo+double interleaved, i64 store instruction, runtime dropped with active actors.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: dynamic send count from payload byte, three-actor echo pipeline,
rapid build of 3 guest types (60 cycles), XOR-with-key payload transform.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: same payload to echo+double verified, f32 store/load, 50 silent
actors clean shutdown, 5-deep nested blocks, property test mixed guest response
counts. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: byte checksum computation, 4-thread runtime stress test, three
data segments, 50KB message echo, comparison operations (gt_s, lt_s, le_u, ge_s).
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: trap on specific byte, three runtimes share engine, spawn with no
messages, multiply/divide operations, 1000 actors from same engine stress test.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: guest counts messages via global, echo with DropOldest mailbox,
guest echoes only odd-length messages, build error Display formatting.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: internal function with 8 params, WASM-to-native-to-inbox relay,
any message size round-trip property, sign extend 16, echo after 100 idle ticks.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: guest sends to two addresses in one handle, engine clone builds
independent actors, 500 messages in one tick, guest early return from handle.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: guest reverses payload then echoes, actors share budget setting,
f64 arithmetic, 5-round actor replacement cycle. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: fibonacci via recursion, single inbox from five actors, minimal
lifecycle no messages, reuse message bytes, block with result value.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: echo zeros then ones, extra exports with init/cleanup,
property test double always sends 2 copies, 30 mixed actors simultaneous.
No new bugs found. **350 tests pass.**

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: length-prefixed response, two-actor ping-pong bounded, build 100
actors then drop, memory.size/grow sequence, broadcast to 10 actors.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: bitwise NOT each byte, stop on MT runtime, i64 extend operations,
5 sequential runtimes, random tick/message interleaving property test.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: compute max byte, echo own address, rapid engine creation, select
conditional value, all 256 single-byte payloads integrity check.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: 1000 message echo stress, many typed locals, alternate empty/nonempty,
error variants distinct display, heterogeneous WAT actors on same runtime.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: i32 bit pattern inversion, native handler spawns WASM and sends,
factorial loop, echo determinism across 10 independent runs.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: 7-byte non-aligned payload, tick empty runtime then spawn, grow
memory 5 times, ByteMessage clone independence, budget leaves remaining for next tick.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: conditional double or echo, 200 messages across 200 ticks,
three inboxes from same runtime, AND mask low nibble. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 6 tests: OR set high nibble, 31-byte message too short, loop to 1000,
500 actors one message each, bitwise identical property test, modify last byte.
No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 11 tests: byte swap, runtime configs, trap-3-then-succeed, 10 actors
3 types, various payload sizes, builder consumes self, WAT builder property fuzz,
burst send/tick, 3-level call chain, cross-thread build, FIFO ordering.
No new bugs found.

**400 tests pass milestone** — 3 bugs found and fixed total, 26 property tests,
88 cycles of rigorous testing. Implementation extremely robust.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: running sum across messages, parallel build 10 actors, multiple
memory.fill, 10KB echo, alloc works then returns negative. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 5 tests: mixed payload types, i64 global, all three guest types, stopped
actor never responds property test, exact 33-byte echo. No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Added 4 tests: double each byte with saturation, 20 echo actors on 2-thread
runtime, 5-page memory spread alloc, 100KB payload dropped for 1-page guest
(verifies graceful OOB handling). No new bugs found.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Final cycle of the testing campaign. Adds: byte count threshold guest,
actor slot reuse after stop, missing handle export error, silent never-sends
property test, and 1000 empty ticks stability test.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Update history.md with cycles 89-92 and final campaign summary.
Mark state.md as campaign complete.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
zacheryasc force-pushed bin-runner from a76237fe57 to c23867c0b0 2026-02-13 14:10:41 +00:00 Compare
zacheryasc merged commit 29b4f53d69 into master 2026-02-13 14:11:40 +00:00
zacheryasc deleted branch bin-runner 2026-02-13 14:11:40 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: zacheryasc/swactor#36
No description provided.