Skip to content

test(scenarios): scenario harness on the testkit, with the reactive e2e suite moved into it - #358

Merged
jsam merged 9 commits into
mainfrom
fm/test-t01
Oct 5, 2026
Merged

jsam merged 9 commits into
mainfrom
fm/test-t01

Conversation

@jsam

@jsam jsam commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Intent

make sure that all those new changes we are making in accordance with the production readiness are properly covered by e2e / integration testing cause all of them are related so they cannot be tested in isolation only ... we have to check them through scenarios which we have to craft ... please ensure that all those different testing we have is cleaned up and that we bring some structure to it so we dont have too much redudancy ... our testing is getting huge and slow so ensure that we are always testing the right stuff and that this is all properly documented in TESTING.md

(Context: implement issue #335 exactly as written, part of the test strategy in ~/firstmate/data/test-strategy/report.md and TESTING.md draft.)

Issue #335 "Testing: Scenario harness (T-01)", as written:
Scope. tests/scenarios/main.rs (test = true, debug-capable) built on inputlayer-testkit. Move tests/e2e_reactive/* in as scenarios::reactive, scenarios::stream, scenarios::delivery, scenarios::wire unchanged; keep make e2e-reactive as the release run that writes latency samples. Testkit additions: EngineBuilder::views(Mode) writing engine.views once V2 defines it (until then the builder accepts the mode and the maintained value is refused with a clear panic), Mode::from_env("INPUTLAYER_SCENARIO_VIEWS"); memory_limits, max_query_cost, nesting_limit settings; Engine::metrics() -> Counters from /metrics/prometheus with Option fields; Engine::create_user, grant, WsClient::connect_with_key; WsClient::execute_expecting(program, revision, scope) and execute_at (sends at and reads revision from the reply; both Option until V9/V13); Fixture::shop_pack(size) with the rules in report Section 7.2 (the near rule only in Size::Vector).
The report Section 7.2 shop pack: one fixture so scenarios exercise the related changes together. Base relations order(id, cust, total), order_item(order, item), stock(item, qty), blocked(item), link(item, other), embedding(item, vec), claim(order, item, agent). Deployed rules: eligible(Order, Item, Why) <- order_item(Order, Item), stock(Item, Q), Q > 0, !blocked(Item), Why = "in_stock"; related(Item, Other) <- link(Item, Other); related(Item, Other) <- related(Item, Mid), link(Mid, Other); offer(Order, Other) <- eligible(Order, Item, _), related(Item, Other), !blocked(Other), !claim(Order, Other, _); n_eligible(Order, N) <- eligible(Order, Item, _), N = count(Item); near(Item, Other, D) <- embedding(Item, V), hnsw_nearest("emb_idx", V, 5, Other, D). Order is the agent's key; sizes small (hundreds of rows, every PR) and lab (1M edges, bench host only). Counters the scenarios assert on: rule_evaluations, view_reads, subscription_evaluations, view_maintenance_us; until V1 exports them the helper returns None and an assertion on it is an expected failure (not measurable), never a skip.
Acceptance. cargo test --test scenarios runs the 14 moved scenarios green in debug in under 60 s on 4 cores; INPUTLAYER_SCENARIO_VIEWS=maintained cargo test --test scenarios fails fast with the "mode not available" message until V2; make lint covers the binary; shop_pack(Size::Small) installs in under 200 ms; Counters::rule_evaluations is None on this engine and the helper's unit test shows a parsed sample.

What Changed

  • Replaced the e2e_reactive test target with tests/scenarios (test = true, so plain cargo test now runs it in debug). The reactive, stream, delivery, wire and saturation modules moved over; saturation runs only in release. A new harness module checks the testkit pieces against a running engine. The shop_pack vector scenario is #[ignore]d because of the .index create hang (Rare hang: .index create (HNSW, cosine) never replies under load #377).
  • Additions to inputlayer-testkit:
    • Mode and EngineBuilder::views: Mode::from_env("INPUTLAYER_SCENARIO_VIEWS") picks the mode, and maintained panics with a clear message until V2.
    • EngineBuilder settings: memory_limits, max_query_cost and nesting_limit.
    • Engine methods: metrics() returns Counters read from /metrics/prometheus with Option fields, plus create_user and grant.
    • WsClient methods: connect_with_key, execute_expecting and execute_at.
    • Fixture::shop_pack(Size), where the near rule exists only in Size::Vector.
    • A Violation::NotMeasurable variant.
  • Makefile and TESTING.md updates:
    • make e2e-reactive runs --test scenarios in release with --include-ignored and still writes latency samples.
    • test-all and ci-test-all leave the scenarios binary out of their cargo test pass, so the suite runs only once.
    • The separate e2e_reactive clippy line is gone; make lint now covers the binary through --all-targets.
    • TESTING.md documents the new structure.

Risk Assessment

✅ Low: The change only touches test code, the testkit, the Makefile and docs. The uncertified fixer commits are correct and stay within what was decided: the fixture error now reports the program's index, byte size and the engine's errors without the program text, and only the vector scenario is quarantined, with an unconditional #[ignore], --include-ignored in make e2e-reactive, and a TESTING.md note. I found no reachable defect.

Testing

I drove each scenario against real engine processes. The debug suite, pinned to 4 cores, passed 18 scenarios in 26 s with the vector and saturation scenarios ignored. Maintained mode failed all 18 non-ignored scenarios within 0.3 s with the V2 "mode not available" message. The counter unit tests passed. make e2e-reactive passed all 20 scenarios in release, including the quarantined vector scenario and saturation, wrote three latency sample files, and printed the shop_pack(Small) install time as 66.7 ms. A no-run build of the test-all debug-stage targets listed 82 test executables and none was scenarios. I did not run make lint because this phase may not run linters. Logs are in the evidence directory.

  • Live validation: ✅ go - 7 of 8 scenarios driven live against the product
Scenario Result Live Evidence
Developer runs cargo test --test scenarios in debug on 4 cores: the 14 moved scenarios and the harness scenarios pass in under 60 s ✅ pass live debug-scenarios-4cores.log: 18 passed, 0 failed, 2 ignored, 26.28 s wall clock under taskset -c 0-3
On PR-tier cargo test, the quarantined vector scenario is reported as ignored with its #377 reason instead of running ✅ pass live debug-scenarios-4cores.log: 'shop_pack_vector_serves_the_near_rule ... ignored, quarantined: rare engine hang in .index create (#377); nightly tier runs it'
Adversarial: setting INPUTLAYER_SCENARIO_VIEWS=maintained fails every scenario fast with the 'mode not available' message and starts no engine ✅ pass live maintained-mode.log: 18 failed in 0.07 s, each panicking with 'engine.views = "maintained": mode not available on this engine (V2 #309 adds it)'
make e2e-reactive runs every scenario in release, including the quarantined vector scenario and saturation, and writes latency samples ✅ pass live make-e2e-reactive.log: 20 passed, 0 ignored, harness::shop_pack_vector_serves_the_near_rule ok; target/e2e-reactive has fanout_64, long_query_on_subscriber and single_subscriber .jsonl
The shop_pack(Size::Small) install on a real engine derives the expected eligible, offer, n_eligible and related rows, and the harness prints the install time ✅ pass live make-e2e-reactive.log: 'shop_pack(Small): 17 statements in 66.669042ms'; shop_pack_installs_and_derives_its_anchors ok in debug and release
Counters: scraping a running engine counts queries, rule_evaluations is None and is judged as an expected failure, and the parser unit test shows a parsed sample ✅ pass live counters_scrape_the_running_engine ok (debug and release); testkit-counters-unit.log: view_counters_parse_and_delta and todays_engine_has_no_rule_evaluation_counter ok
The debug stage of test-all and ci-test-all builds every workspace test except the scenarios binary ✅ pass live makefile-debug-stage.log: NON_SCENARIO_TESTS has no 'scenarios' entry; the no-run build lists 82 executables, none of them scenarios; make -n test-all uses the split command
make lint covers the scenarios binary ⏸️ untested no This test phase may not run linters or static analysis, so I did not run clippy. The lint phase owns this check.
Evidence: Debug scenarios on 4 pinned cores (18 passed, 2 ignored, 26 s wall)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.21s
     Running tests/scenarios/main.rs (target/debug/deps/scenarios-e36d7e30c71358d5)

running 20 tests
test harness::counters_scrape_the_running_engine ... ok
test harness::expect_revision_and_at_reach_the_engine ... ok
test harness::shop_pack_vector_serves_the_near_rule ... ignored, quarantined: rare engine hang in .index create (#377); nightly tier runs it
test harness::scoped_keys_users_and_grants_reach_the_engine ... ok
test reactive::agent_cancels_its_long_query_and_keeps_its_subscription ... ok
test harness::shop_pack_installs_and_derives_its_anchors ... ok
test reactive::agent_receives_exact_deltas_for_facts_and_rules ... ok
test reactive::agent_resubscribes_after_reconnect_and_engine_restart ... ok
test reactive::refresh_over_result_cap_fails_closed_and_recovers ... ok
test reactive::subscribe_over_result_cap_is_refused_and_not_registered ... ok
test reactive::unrelated_writes_produce_no_deltas ... ok
test reactive::write_burst_converges_without_requery ... ok
test saturation::saturated_sessions_get_every_delta_once_in_time_and_nothing_else ... ignored, timing bounds hold for a release engine; `make e2e-reactive` runs it
test stream::a_cursor_from_before_a_restart_gets_a_replay_gap ... ok
test reactive::agent_receives_deltas_while_its_own_long_query_runs ... ok
test stream::commits_racing_subscribe_all_reach_the_agent ... ok
test wire::replies_correlate_through_pushes_notices_and_bad_requests ... ok
test reactive::every_subscriber_receives_every_delta ... ok
test delivery::oversized_delta_and_snapshot_arrive_whole ... ok
test stream::concurrent_commits_notify_in_seq_order ... ok

test result: ok. 18 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 26.03s

	Command being timed: "taskset -c 0-3 cargo test --test scenarios"
	User time (seconds): 59.71
	System time (seconds): 3.00
	Percent of CPU this job got: 238%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.28
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 273760
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 9
	Minor (reclaiming a frame) page faults: 310763
	Voluntary context switches: 34801
	Involuntary context switches: 24655
	Swaps: 0
	File system inputs: 0
	File system outputs: 16784
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0
Evidence: Maintained views mode fails fast with the V2 'mode not available' message
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.19s
     Running tests/scenarios/main.rs (target/debug/deps/scenarios-e36d7e30c71358d5)

running 20 tests
test harness::shop_pack_vector_serves_the_near_rule ... ignored, quarantined: rare engine hang in .index create (#377); nightly tier runs it
test saturation::saturated_sessions_get_every_delta_once_in_time_and_nothing_else ... ignored, timing bounds hold for a release engine; `make e2e-reactive` runs it
test harness::expect_revision_and_at_reach_the_engine ... FAILED
test reactive::agent_receives_deltas_while_its_own_long_query_runs ... FAILED
test harness::scoped_keys_users_and_grants_reach_the_engine ... FAILED
test reactive::agent_resubscribes_after_reconnect_and_engine_restart ... FAILED
test delivery::oversized_delta_and_snapshot_arrive_whole ... FAILED
test harness::counters_scrape_the_running_engine ... FAILED
test reactive::write_burst_converges_without_requery ... FAILED
test reactive::agent_cancels_its_long_query_and_keeps_its_subscription ... FAILED
test reactive::every_subscriber_receives_every_delta ... FAILED
test harness::shop_pack_installs_and_derives_its_anchors ... FAILED
test reactive::subscribe_over_result_cap_is_refused_and_not_registered ... FAILED
test reactive::agent_receives_exact_deltas_for_facts_and_rules ... FAILED
test reactive::unrelated_writes_produce_no_deltas ... FAILED
test stream::a_cursor_from_before_a_restart_gets_a_replay_gap ... FAILED
test stream::concurrent_commits_notify_in_seq_order ... FAILED
test stream::commits_racing_subscribe_all_reach_the_agent ... FAILED
test wire::replies_correlate_through_pushes_notices_and_bad_requests ... FAILED
test reactive::refresh_over_result_cap_fails_closed_and_recovers ... FAILED

failures:

---- harness::expect_revision_and_at_reach_the_engine stdout ----

thread 'harness::expect_revision_and_at_reach_the_engine' (3923718) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- reactive::agent_receives_deltas_while_its_own_long_query_runs stdout ----

thread 'reactive::agent_receives_deltas_while_its_own_long_query_runs' (3923722) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- harness::scoped_keys_users_and_grants_reach_the_engine stdout ----

thread 'harness::scoped_keys_users_and_grants_reach_the_engine' (3923719) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::agent_resubscribes_after_reconnect_and_engine_restart stdout ----

thread 'reactive::agent_resubscribes_after_reconnect_and_engine_restart' (3923724) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- delivery::oversized_delta_and_snapshot_arrive_whole stdout ----

thread 'delivery::oversized_delta_and_snapshot_arrive_whole' (3923716) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- harness::counters_scrape_the_running_engine stdout ----

thread 'harness::counters_scrape_the_running_engine' (3923717) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::write_burst_converges_without_requery stdout ----

thread 'reactive::write_burst_converges_without_requery' (3923769) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::agent_cancels_its_long_query_and_keeps_its_subscription stdout ----

thread 'reactive::agent_cancels_its_long_query_and_keeps_its_subscription' (3923721) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::every_subscriber_receives_every_delta stdout ----

thread 'reactive::every_subscriber_receives_every_delta' (3923726) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- harness::shop_pack_installs_and_derives_its_anchors stdout ----

thread 'harness::shop_pack_installs_and_derives_its_anchors' (3923720) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::subscribe_over_result_cap_is_refused_and_not_registered stdout ----

thread 'reactive::subscribe_over_result_cap_is_refused_and_not_registered' (3923729) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::agent_receives_exact_deltas_for_facts_and_rules stdout ----

thread 'reactive::agent_receives_exact_deltas_for_facts_and_rules' (3923723) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::unrelated_writes_produce_no_deltas stdout ----

thread 'reactive::unrelated_writes_produce_no_deltas' (3923760) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- stream::a_cursor_from_before_a_restart_gets_a_replay_gap stdout ----

thread 'stream::a_cursor_from_before_a_restart_gets_a_replay_gap' (3923783) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- stream::concurrent_commits_notify_in_seq_order stdout ----

thread 'stream::concurrent_commits_notify_in_seq_order' (3923820) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- stream::commits_racing_subscribe_all_reach_the_agent stdout ----

thread 'stream::commits_racing_subscribe_all_reach_the_agent' (3923794) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- wire::replies_correlate_through_pushes_notices_and_bad_requests stdout ----

thread 'wire::replies_correlate_through_pushes_notices_and_bad_requests' (3923846) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"

---- reactive::refresh_over_result_cap_fails_closed_and_recovers stdout ----

thread 'reactive::refresh_over_result_cap_fails_closed_and_recovers' (3923728) panicked at testkit/src/engine.rs:146:9:
engine.views = "maintained": mode not available on this engine (V2 #309 adds it); unset INPUTLAYER_SCENARIO_VIEWS or set it to "recompute"


failures:
    delivery::oversized_delta_and_snapshot_arrive_whole
    harness::counters_scrape_the_running_engine
    harness::expect_revision_and_at_reach_the_engine
    harness::scoped_keys_users_and_grants_reach_the_engine
    harness::shop_pack_installs_and_derives_its_anchors
    reactive::agent_cancels_its_long_query_and_keeps_its_subscription
    reactive::agent_receives_deltas_while_its_own_long_query_runs
    reactive::agent_receives_exact_deltas_for_facts_and_rules
    reactive::agent_resubscribes_after_reconnect_and_engine_restart
    reactive::every_subscriber_receives_every_delta
    reactive::refresh_over_result_cap_fails_closed_and_recovers
    reactive::subscribe_over_result_cap_is_refused_and_not_registered
    reactive::unrelated_writes_produce_no_deltas
    reactive::write_burst_converges_without_requery
    stream::a_cursor_from_before_a_restart_gets_a_replay_gap
    stream::commits_racing_subscribe_all_reach_the_agent
    stream::concurrent_commits_notify_in_seq_order
    wire::replies_correlate_through_pushes_notices_and_bad_requests

test result: FAILED. 0 passed; 18 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.07s

error: test failed, to rerun pass `--test scenarios`

real	0m0.301s
user	0m0.194s
sys	0m0.383s
Evidence: Counters unit tests (parsed sample, rule_evaluations None)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.08s
     Running unittests src/lib.rs (target/debug/deps/inputlayer_testkit-033b700a58955b79)

running 4 tests
test counters::tests::a_counter_that_went_backwards_is_not_a_delta ... ok
test counters::tests::a_missing_counter_is_not_measurable ... ok
test counters::tests::todays_engine_has_no_rule_evaluation_counter ... ok
test counters::tests::view_counters_parse_and_delta ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 12 filtered out; finished in 0.00s
Evidence: make e2e-reactive release run (20 passed incl. quarantined vector scenario; latency samples written)
rm -rf target/e2e-reactive
cargo test --release -p inputlayer-testkit
   Compiling inputlayer-testkit v0.1.0 (~/.no-mistakes/worktrees/9eea230c3aae/01M46PTE8QP69DVNPY97BAVXS8/testkit)
    Finished `release` profile [optimized] target(s) in 5.91s
     Running unittests src/lib.rs (target/release/deps/inputlayer_testkit-e4fe971ddf5ff0a4)

running 16 tests
test counters::tests::todays_engine_has_no_rule_evaluation_counter ... ok
test counters::tests::a_counter_that_went_backwards_is_not_a_delta ... ok
test counters::tests::a_missing_counter_is_not_measurable ... ok
test counters::tests::view_counters_parse_and_delta ... ok
test engine::tests::maintained_mode_is_refused_until_the_engine_has_it - should panic ... ok
test engine::tests::mode_from_env_defaults_to_recompute ... ok
test engine::tests::recompute_mode_is_accepted ... ok
test known_defect::tests::test_holding_contract_is_unexpected_pass - should panic ... ok
test known_defect::tests::test_matching_violation_is_expected_failure ... ok
test known_defect::tests::test_other_violation_is_real_failure - should panic ... ok
test known_defect::tests::test_racy_defect_not_reproduced_passes ... ok
test metrics::tests::test_percentile_nearest_rank ... ok
test metrics::tests::test_sample_records_latencies_from_send ... ok
test streamed::tests::a_complete_stream_is_one_delta ... ok
test streamed::tests::missing_duplicate_or_foreign_chunks_break_the_stream ... ok
test streamed::tests::nothing_applies_before_the_end ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests inputlayer_testkit

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

INPUTLAYER_REACTIVE_SAMPLES_DIR=~/.no-mistakes/worktrees/9eea230c3aae/01M46PTE8QP69DVNPY97BAVXS8/target/e2e-reactive \
	cargo test --release --test scenarios -- --nocapture --include-ignored
   Compiling inputlayer-testkit v0.1.0 (~/.no-mistakes/worktrees/9eea230c3aae/01M46PTE8QP69DVNPY97BAVXS8/testkit)
   Compiling inputlayer v0.1.0 (~/.no-mistakes/worktrees/9eea230c3aae/01M46PTE8QP69DVNPY97BAVXS8)
    Finished `release` profile [optimized] target(s) in 2m 19s
     Running tests/scenarios/main.rs (target/release/deps/scenarios-2c40d9b87232c4de)

running 20 tests
test reactive::refresh_over_result_cap_fails_closed_and_recovers ... ok
shop_pack(Small): 17 statements in 66.669042ms
XFAIL [#308] rule_evaluations is not exported, so a read cannot prove it skipped evaluation: counter rule_evaluations is not exported
test harness::counters_scrape_the_running_engine ... ok
test harness::shop_pack_installs_and_derives_its_anchors ... ok
test harness::expect_revision_and_at_reach_the_engine ... ok
[single_subscriber] 6 delta sample(s): p50 5141 us, p99 28499 us, max 28499 us
test reactive::agent_receives_exact_deltas_for_facts_and_rules ... ok
test reactive::agent_cancels_its_long_query_and_keeps_its_subscription ... ok
test harness::shop_pack_vector_serves_the_near_rule ... ok
test harness::scoped_keys_users_and_grants_reach_the_engine ... ok
test reactive::agent_resubscribes_after_reconnect_and_engine_restart ... ok
test stream::a_cursor_from_before_a_restart_gets_a_replay_gap ... ok
test wire::replies_correlate_through_pushes_notices_and_bad_requests ... ok
test reactive::unrelated_writes_produce_no_deltas ... ok
test reactive::subscribe_over_result_cap_is_refused_and_not_registered ... ok
[fanout_64] 640 delta sample(s): p50 9175 us, p99 19175 us, max 21618 us
test reactive::every_subscriber_receives_every_delta ... ok
test reactive::write_burst_converges_without_requery ... ok
test delivery::oversized_delta_and_snapshot_arrive_whole ... ok
test stream::commits_racing_subscribe_all_reach_the_agent ... ok
[long_query_on_subscriber] 1 delta sample(s): p50 2079 us, p99 2079 us, max 2079 us
test reactive::agent_receives_deltas_while_its_own_long_query_runs ... ok
test stream::concurrent_commits_notify_in_seq_order ... ok
test saturation::saturated_sessions_get_every_delta_once_in_time_and_nothing_else has been running for over 60 seconds
saturated sessions: 960 sessions, 10561 receipts in 30s, 170 probes, 166 delivered during the load; ack->delta p50 826.474722ms p99 2.166111633s max 2.434936865s; send->delta p50 940.058346ms p99 2.299578994s
test saturation::saturated_sessions_get_every_delta_once_in_time_and_nothing_else ... ok

test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 77.77s


real	3m43.052s
user	8m5.434s
sys	0m58.245s
Evidence: test-all debug stage excludes the scenarios binary
NON_SCENARIO_TESTS = --test advanced_integration_tests --test aggregate_correctness_tests --test atomic_program_tests --test auth_hardening_tests --test authz_multistatement --test backup_restore_tests --test backup_safety_tests --test bootstrap_secret_tests --test boundary_value_tests --test client_handler_tests --test comparison_tests --test concurrency_tests --test config_tests --test crash_recovery_tests --test credential_revocation_tests --test data_dir_lock_tests --test data_dir_loss_tests --test error_handling_tests --test example_execution_tests --test example_verification --test expression_comparison_tests --test fact_program_tests --test fastpath_regressions --test flights_reachability_tests --test hnsw_index_tests --test il_migration_delegation --test input_validation_tests --test integration_test --test iql_syntax_tests --test lock_stress_tests --test magic_sets_regressions --test memory_limit_tests --test metrics_tests --test multi_clause_rule_tests --test mutual_recursion_tests --test name_validation_tests --test nesting_depth_tests --test notification_cursor_tests --test numeric_safety_tests --test online_checkpoint_tests --test optimizer_config_tests --test optimizer_tests --test parallel_execution_tests --test param_program_tests --test persist_crash --test persist_roundtrip --test pinned_proof_tests --test property_arithmetic --test replication_tests --test restart_equivalence --test result_limit_tests --test serialization_tests --test server_startup_tests --test session_schema_tests --test size_limit_tests --test snapshot_sharing_tests --test statement_counts_tests --test statement_status_tests --test storage_engine_tests --test string_literal_tests --test typed_arithmetic_tests --test wal_transaction_recovery --test why_not_tests --test why_provenance_tests --test wildcard_rule_tests --test write_concurrency_tests --test ws_cancel_tests --test ws_delivery_tests --test ws_expect_revision_tests --test ws_hygiene_tests --test ws_pipeline_tests --test ws_session_tests --test differential_oracle --test standing_query_tests

--- cargo test -p inputlayer --lib --bins $(NON_SCENARIO_TESTS) --no-run executables:
  Executable unittests src/lib.rs (target/debug/deps/inputlayer-8786668a8751a85d)
  Executable unittests src/bin/debug_ir.rs (target/debug/deps/debug_ir-c590d686eb02b2b5)
  Executable unittests src/bin/il/main.rs (target/debug/deps/il-dce3b691be258ae1)
  Executable unittests src/main.rs (target/debug/deps/inputlayer-4434e7f3a90a4625)
  Executable unittests src/bin/backup.rs (target/debug/deps/inputlayer_backup-d56f643994876a82)
  Executable unittests src/bin/client.rs (target/debug/deps/inputlayer_client-4525fd0be5c567d2)
  Executable unittests src/bin/server.rs (target/debug/deps/inputlayer_server-1e37aae9b55915c8)
  Executable unittests src/bin/test_optimizers.rs (target/debug/deps/test_optimizers-fc263f52a6b9cf61)
  Executable tests/advanced_integration_tests.rs (target/debug/deps/advanced_integration_tests-6abe4bad57a847a8)
  Executable tests/aggregate_correctness_tests.rs (target/debug/deps/aggregate_correctness_tests-7fe39c79caf4282a)
  Executable tests/atomic_program_tests.rs (target/debug/deps/atomic_program_tests-63311199029ba990)
  Executable tests/auth_hardening_tests.rs (target/debug/deps/auth_hardening_tests-523b89bfe3f6790e)
  Executable tests/authz_multistatement.rs (target/debug/deps/authz_multistatement-eddf8fb784b6902c)
  Executable tests/backup_restore_tests.rs (target/debug/deps/backup_restore_tests-2925782a2b58b074)
  Executable tests/backup_safety_tests.rs (target/debug/deps/backup_safety_tests-e0068bca7d663e21)
  Executable tests/bootstrap_secret_tests.rs (target/debug/deps/bootstrap_secret_tests-caa76c0a4b994213)
  Executable tests/boundary_value_tests.rs (target/debug/deps/boundary_value_tests-4af45c240f496cc8)
  Executable tests/client_handler_tests.rs (target/debug/deps/client_handler_tests-3888f3b1cce5363c)
  Executable tests/comparison_tests.rs (target/debug/deps/comparison_tests-7fd23edf59fda76d)
  Executable tests/concurrency_tests.rs (target/debug/deps/concurrency_tests-fbb4476024f8eaf7)
  Executable tests/config_tests.rs (target/debug/deps/config_tests-b7b84c9b98487b3f)
  Executable tests/crash_recovery_tests.rs (target/debug/deps/crash_recovery_tests-b92c0e108170134a)
  Executable tests/credential_revocation_tests.rs (target/debug/deps/credential_revocation_tests-5c989b475a91e31e)
  Executable tests/data_dir_lock_tests.rs (target/debug/deps/data_dir_lock_tests-6133ef9c73ca4538)
  Executable tests/data_dir_loss_tests.rs (target/debug/deps/data_dir_loss_tests-23b681b2e2b70cf9)
  Executable tests/differential_oracle/main.rs (target/debug/deps/differential_oracle-0e5054ab033ddd0d)
  Executable tests/error_handling_tests.rs (target/debug/deps/error_handling_tests-85e005383db44ee4)
  Executable tests/example_execution_tests.rs (target/debug/deps/example_execution_tests-1e2b20c5a64c7aee)
  Executable tests/example_verification.rs (target/debug/deps/example_verification-1df6fa8205031bc6)
  Executable tests/expression_comparison_tests.rs (target/debug/deps/expression_comparison_tests-9fe0b7d5410375f0)
  Executable tests/fact_program_tests.rs (target/debug/deps/fact_program_tests-87b27a2b263b2ea3)
  Executable tests/fastpath_regressions.rs (target/debug/deps/fastpath_regressions-d172d2b924228acd)
  Executable tests/flights_reachability_tests.rs (target/debug/deps/flights_reachability_tests-f9d4d099398be6cb)
  Executable tests/hnsw_index_tests.rs (target/debug/deps/hnsw_index_tests-002f4e97eb470993)
  Executable tests/il_migration_delegation.rs (target/debug/deps/il_migration_delegation-21b0745aa848ba06)
  Executable tests/input_validation_tests.rs (target/debug/deps/input_validation_tests-1fe5928ed3724751)
  Executable tests/integration_test.rs (target/debug/deps/integration_test-40dee6f0ebe91376)
  Executable tests/iql_syntax_tests.rs (target/debug/deps/iql_syntax_tests-1e1951ba34b2f6b2)
  Executable tests/lock_stress_tests.rs (target/debug/deps/lock_stress_tests-ecbd919e80554ac6)
  Executable tests/magic_sets_regressions.rs (target/debug/deps/magic_sets_regressions-bf7d4a0db1e73cfa)
  Executable tests/memory_limit_tests.rs (target/debug/deps/memory_limit_tests-317afe8938a53c24)
  Executable tests/metrics_tests.rs (target/debug/deps/metrics_tests-568dd1adf120383f)
  Executable tests/multi_clause_rule_tests.rs (target/debug/deps/multi_clause_rule_tests-ed794fe14a99e40f)
  Executable tests/mutual_recursion_tests.rs (target/debug/deps/mutual_recursion_tests-9e8cf8edee1faf55)
  Executable tests/name_validation_tests.rs (target/debug/deps/name_validation_tests-9e0175730541001d)
  Executable tests/nesting_depth_tests.rs (target/debug/deps/nesting_depth_tests-4226761fbe55419e)
  Executable tests/notification_cursor_tests.rs (target/debug/deps/notification_cursor_tests-60a1bfc3d96deac9)
  Executable tests/numeric_safety_tests.rs (target/debug/deps/numeric_safety_tests-21b61a626e28363b)
  Executable tests/online_checkpoint_tests.rs (target/debug/deps/online_checkpoint_tests-b6da0cd7a1b3ff46)
  Executable tests/optimizer_config_tests.rs (target/debug/deps/optimizer_config_tests-46d9554618b916e5)
  Executable tests/optimizer_tests.rs (target/debug/deps/optimizer_tests-8c0bba2efa07dd10)
  Executable tests/parallel_execution_tests.rs (target/debug/deps/parallel_execution_tests-7e9404c8f2bef421)
  Executable tests/param_program_tests.rs (target/debug/deps/param_program_tests-3aa168aa06c944bf)
  Executable tests/persist_crash.rs (target/debug/deps/persist_crash-e707a72c3a28dcd5)
  Executable tests/persist_roundtrip.rs (target/debug/deps/persist_roundtrip-414fed720c6838ed)
  Executable tests/pinned_proof_tests.rs (target/debug/deps/pinned_proof_tests-4b4e15b7f01c59b0)
  Executable tests/property_arithmetic.rs (target/debug/deps/property_arithmetic-6f0834b59d88401d)
  Executable tests/replication_tests.rs (target/debug/deps/replication_tests-37e395923cabdc80)
  Executable tests/restart_equivalence.rs (target/debug/deps/restart_equivalence-1113c79b69e28a6b)
  Executable tests/result_limit_tests.rs (target/debug/deps/result_limit_tests-793de1cf0ba00f54)
  Executable tests/serialization_tests.rs (target/debug/deps/serialization_tests-0566898bfe63e09f)
  Executable tests/server_startup_tests.rs (target/debug/deps/server_startup_tests-b118856c6f378a3f)
  Executable tests/session_schema_tests.rs (target/debug/deps/session_schema_tests-a64e65b486726021)
  Executable tests/size_limit_tests.rs (target/debug/deps/size_limit_tests-5648986c88e123e6)
  Executable tests/snapshot_sharing_tests.rs (target/debug/deps/snapshot_sharing_tests-404c7866f5638f0d)
  Executable tests/standing_query_tests/main.rs (target/debug/deps/standing_query_tests-269310bc67184f4f)
  Executable tests/statement_counts_tests.rs (target/debug/deps/statement_counts_tests-a519535484f37802)
  Executable tests/statement_status_tests.rs (target/debug/deps/statement_status_tests-1bf7bd0b18b11134)
  Executable tests/storage_engine_tests.rs (target/debug/deps/storage_engine_tests-f0b4f53aea0c78b0)
  Executable tests/string_literal_tests.rs (target/debug/deps/string_literal_tests-00c4b66d68b16943)
  Executable tests/typed_arithmetic_tests.rs (target/debug/deps/typed_arithmetic_tests-cb7ac46222899fdc)
  Executable tests/wal_transaction_recovery.rs (target/debug/deps/wal_transaction_recovery-e62f7ff2a28e1c42)
  Executable tests/why_not_tests.rs (target/debug/deps/why_not_tests-aadbd891e72de29b)
  Executable tests/why_provenance_tests.rs (target/debug/deps/why_provenance_tests-c19745e6e1e5c16c)
  Executable tests/wildcard_rule_tests.rs (target/debug/deps/wildcard_rule_tests-f4238347e427b00c)
  Executable tests/write_concurrency_tests.rs (target/debug/deps/write_concurrency_tests-9f1250e98e2bab58)
  Executable tests/ws_cancel_tests.rs (target/debug/deps/ws_cancel_tests-a7fafb33cef592a8)
  Executable tests/ws_delivery_tests.rs (target/debug/deps/ws_delivery_tests-1920ef20b7e3cdff)
  Executable tests/ws_expect_revision_tests.rs (target/debug/deps/ws_expect_revision_tests-6d9d29a51d4d7430)
  Executable tests/ws_hygiene_tests.rs (target/debug/deps/ws_hygiene_tests-87f24ad58da03247)
  Executable tests/ws_pipeline_tests.rs (target/debug/deps/ws_pipeline_tests-68b7d54d46c1a7db)
  Executable tests/ws_session_tests.rs (target/debug/deps/ws_session_tests-e506ee5b64ad39a3)

--- make -n test-all (debug unit stage lines):
51:{ RUST_TEST_THREADS=$NCPU cargo test --workspace --all-features --exclude inputlayer -- --test-threads=$NCPU --format=pretty && RUST_TEST_THREADS=$NCPU cargo test -p inputlayer --all-features --lib --bins --test advanced_integration_tests --test aggregate_correctness_tests --test atomic_program_tests --test auth_hardening_tests --test authz_multistatement --test backup_restore_tests --test backup_safety_tests --test bootstrap_secret_tests --test boundary_value_tests --test client_handler_tests --test comparison_tests --test concurrency_tests --test config_tests --test crash_recovery_tests --test credential_revocation_tests --test data_dir_lock_tests --test data_dir_loss_tests --test error_handling_tests --test example_execution_tests --test example_verification --test expression_comparison_tests --test fact_program_tests --test fastpath_regressions --test flights_reachability_tests --test hnsw_index_tests --test il_migration_delegation --test input_validation_tests --test integration_test --test iql_syntax_tests --test lock_stress_tests --test magic_sets_regressions --test memory_limit_tests --test metrics_tests --test multi_clause_rule_tests --test mutual_recursion_tests --test name_validation_tests --test nesting_depth_tests --test notification_cursor_tests --test numeric_safety_tests --test online_checkpoint_tests --test optimizer_config_tests --test optimizer_tests --test parallel_execution_tests --test param_program_tests --test persist_crash --test persist_roundtrip --test pinned_proof_tests --test property_arithmetic --test replication_tests --test restart_equivalence --test result_limit_tests --test serialization_tests --test server_startup_tests --test session_schema_tests --test size_limit_tests --test snapshot_sharing_tests --test statement_counts_tests --test statement_status_tests --test storage_engine_tests --test string_literal_tests --test typed_arithmetic_tests --test wal_transaction_recovery --test why_not_tests --test why_provenance_tests --test wildcard_rule_tests --test write_concurrency_tests --test ws_cancel_tests --test ws_delivery_tests --test ws_expect_revision_tests --test ws_hygiene_tests --test ws_pipeline_tests --test ws_session_tests --test differential_oracle --test standing_query_tests -- --test-threads=$NCPU --format=pretty && RUST_TEST_THREADS=$NCPU cargo test -p inputlayer --all-features --doc -- --test-threads=$NCPU --format=pretty; } \
- Outcome: 🔧 1 issue found → auto-fixed ✅ across 3 runs (34m58s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

🔧 **Rebase** - 1 issue found → auto-fixed ✅
  • ⚠️ TESTING.md - merge conflict rebasing onto origin/main

🔧 Fix applied.
✅ Re-checked - no issues remain.

🔧 **Review** - 1 issue found → auto-fixed ✅
  • ℹ️ testkit/src/fixture.rs:73 - Since Fixture::install now groups statements into programs of up to PROGRAM_BYTES (256 KiB), a failed fixture commit produces a huge error. WsClient::commit (testkit/src/client.rs:469) formats the whole program with {program:?}, and install wraps that in fixture &#39;{}&#39; statement failed: {e}. So one bad fact in a Size::Lab or Size::Small pack prints up to about 256 KiB of escaped IQL instead of the failing statement. Correctness is unaffected; only the diagnostic suffers. Fix: in install's map_err, report the program's index and byte length plus the engine's errors rather than relying on the commit message that embeds the program, or truncate the program in the message.

🔧 Fix applied.
✅ Re-checked - no issues remain.

✅ No issues found.

🔧 **Test** - 1 issue found → auto-fixed ✅
  • ⚠️ tests/scenarios/harness.rs:66 - This scenario failed once in 9 full debug runs on 4 pinned cores: harness::shop_pack_vector_serves_the_near_rule stopped at fixture &#39;shop_pack_vector&#39; program 1 (53 bytes) failed: timed out waiting for a reply. The engine never answered .index create emb_idx on embedding(vec) metric cosine within the testkit's 60 s FRAME_TIMEOUT, which also pushed that run to 62 s, over the 60 s acceptance budget. The hang did not come back when the test ran alone, in 16 parallel copies, or in 120 overloaded harness runs. That points to a rare engine-side hang in index creation, not a harness bug. Since this test now runs on every PR, it may show up as an intermittent PR failure. Decide whether to investigate the engine's index-create path or track it as a known flake.
  • Live validation: ✅ go - 8 of 9 scenarios driven live against the product
Scenario Result Live Evidence
Developer runs cargo test --test scenarios in debug on 4 cores and the 14 moved scenarios plus the harness scenarios pass in under 60 s ✅ pass live scenarios-debug-4cores-rerun1..8.log: 19 passed, 1 ignored, 25–28 s each. The first run (scenarios-debug-4cores.log) failed once on the vector index-create timeout; see the finding
Developer sets INPUTLAYER_SCENARIO_VIEWS=maintained and every scenario fails fast with 'mode not available' before any engine starts ✅ pass live scenarios-maintained.log: 19 failures, each with the mode-not-available message, 0.27 s
Adversarial: an unknown INPUTLAYER_SCENARIO_VIEWS value is refused, not silently treated as recompute ✅ pass live scenarios-bogus-mode.log: panic 'INPUTLAYER_SCENARIO_VIEWS="bogus": expected "recompute" or "maintained"'
shop_pack(Size::Small) installs on a live engine, derives eligible/offer/n_eligible/related anchors, and reports its install time ✅ pass live scenarios-debug-4cores.log: 'shop_pack(Small): 17 statements in 56.009429ms'; harness::shop_pack_installs_and_derives_its_anchors ok
Size::Vector pack serves the near rule via the HNSW index ✅ pass live Passed in 8 of 9 full runs and in 16 of 16 parallel isolated runs (vector-stress/). Failed once: index-create reply timed out
Engine::metrics scrapes /metrics/prometheus; queries counted; rule_evaluations is None and the assertion is an expected failure (#308), not a skip ✅ pass live XFAIL [#308] line in scenarios-debug-4cores.log; harness::counters_scrape_the_running_engine ok; testkit-unit.log counters tests
Scoped API key, create_user, grant, execute_expecting (stale revision refused) and execute_at reach the live engine ✅ pass live harness::scoped_keys_users_and_grants_reach_the_engine and harness::expect_revision_and_at_reach_the_engine ok in all runs
test-all / ci-test-all debug stage runs every workspace test target except scenarios ✅ pass live non-scenario-tests.txt lists 73 of 74 targets without scenarios; non-scenario-targets-resolve.log: cargo resolves all of them, rc=0, no scenarios executable built
make e2e-reactive runs the scenarios in release (including saturation) and writes latency samples ⏸️ untested no I started make e2e-reactive with samples sent to the evidence dir, but the cold release build plus the 30 s saturation load had not finished when the structured result was required. Re-run `make e2e…
  • taskset -c 0-3 cargo test --test scenarios -- --nocapture (first run: 18 passed, 1 failed with the vector index-create timeout, 61.9 s)
  • taskset -c 0-3 cargo test --test scenarios run 8 more times: all 19 passed, 1 ignored (saturation, release-only), 25–28 s wall
  • taskset -c 0-3 cargo test --test scenarios harness::shop_pack_vector alone, and 16 parallel copies under taskset: all passed
  • 120 parallel harness:: runs on 4 cores to try to reproduce the index-create hang: no reply timeouts (11 failures were engine-startup credential reads under 40x overload; that code already exists on the base commit)
  • INPUTLAYER_SCENARIO_VIEWS=maintained cargo test --test scenarios: 19 scenarios failed in 0.27 s, each with the 'mode not available' message
  • INPUTLAYER_SCENARIO_VIEWS=bogus cargo test --test scenarios wire: panics with 'expected "recompute" or "maintained"'; =recompute passes
  • cargo test -p inputlayer-testkit: 16 unit tests, including the Counters parse/delta tests and the maintained-mode should_panic test
  • make --eval expansion of NON_SCENARIO_TESTS: 73 of the 74 test targets, scenarios left out; cargo test -p inputlayer --all-features --lib --bins &lt;those&gt; --no-run resolves them all and builds no scenarios binary
  • make -n lint: cargo clippy --workspace --all-targets --all-features -- -D warnings (covers the scenarios binary)
  • make e2e-reactive E2E_REACTIVE_SAMPLES=&lt;evidence dir&gt;: started in the background, not finished when this result was due

🔧 Fix applied.
✅ Re-checked - no issues remain.

  • Live validation: ✅ go - 5 of 5 scenarios driven live against the product
Scenario Result Live Evidence
PR gate: cargo test --test scenarios in debug on 4 cores is green in under 60 s and skips the quarantined vector scenario with its #377 reason ✅ pass live debug-scenarios-4cores.txt: 18 passed, 2 ignored, 25.7 s wall
Nightly stand-in: make e2e-reactive (release, --include-ignored) runs the quarantined vector scenario and the saturation scenario and writes latency samples ✅ pass live make-e2e-reactive.txt: 20 passed, 0 ignored; e2e-reactive-samples/*.jsonl present
Adversarial: INPUTLAYER_SCENARIO_VIEWS=maintained fails fast with the 'mode not available' message ✅ pass live maintained-mode.txt: all 18 fail in 0.07 s with the V2 #309 message
Quarantined vector scenario still works when explicitly included in debug (quarantine hides it but does not break it) ✅ pass live vector-include-ignored-debug.txt: shop_pack_vector_serves_the_near_rule ... ok
Counters: rule_evaluations is None on this engine and the helper's unit test parses a sample; shop_pack(Small) install time is reported ✅ pass live make-e2e-reactive.txt: counters::tests::* ok, harness::counters_scrape_the_running_engine ok, 'shop_pack(Small): 17 statements in 68.78ms'
  • taskset -c 0-3 cargo test --test scenarios (debug, 4 pinned cores)
  • INPUTLAYER_SCENARIO_VIEWS=maintained cargo test --test scenarios
  • cargo test --test scenarios -- --include-ignored harness::shop_pack (debug)
  • make e2e-reactive E2E_REACTIVE_SAMPLES=&lt;evidence dir&gt; (release testkit tests + scenarios with --nocapture --include-ignored)

✅ No issues found.

  • Live validation: ✅ go - 7 of 8 scenarios driven live against the product
Scenario Result Live Evidence
Developer runs cargo test --test scenarios in debug on 4 cores: the 14 moved scenarios and the harness scenarios pass in under 60 s ✅ pass live debug-scenarios-4cores.log: 18 passed, 0 failed, 2 ignored, 26.28 s wall clock under taskset -c 0-3
On PR-tier cargo test, the quarantined vector scenario is reported as ignored with its #377 reason instead of running ✅ pass live debug-scenarios-4cores.log: 'shop_pack_vector_serves_the_near_rule ... ignored, quarantined: rare engine hang in .index create (#377); nightly tier runs it'
Adversarial: setting INPUTLAYER_SCENARIO_VIEWS=maintained fails every scenario fast with the 'mode not available' message and starts no engine ✅ pass live maintained-mode.log: 18 failed in 0.07 s, each panicking with 'engine.views = "maintained": mode not available on this engine (V2 #309 adds it)'
make e2e-reactive runs every scenario in release, including the quarantined vector scenario and saturation, and writes latency samples ✅ pass live make-e2e-reactive.log: 20 passed, 0 ignored, harness::shop_pack_vector_serves_the_near_rule ok; target/e2e-reactive has fanout_64, long_query_on_subscriber and single_subscriber .jsonl
The shop_pack(Size::Small) install on a real engine derives the expected eligible, offer, n_eligible and related rows, and the harness prints the install time ✅ pass live make-e2e-reactive.log: 'shop_pack(Small): 17 statements in 66.669042ms'; shop_pack_installs_and_derives_its_anchors ok in debug and release
Counters: scraping a running engine counts queries, rule_evaluations is None and is judged as an expected failure, and the parser unit test shows a parsed sample ✅ pass live counters_scrape_the_running_engine ok (debug and release); testkit-counters-unit.log: view_counters_parse_and_delta and todays_engine_has_no_rule_evaluation_counter ok
The debug stage of test-all and ci-test-all builds every workspace test except the scenarios binary ✅ pass live makefile-debug-stage.log: NON_SCENARIO_TESTS has no 'scenarios' entry; the no-run build lists 82 executables, none of them scenarios; make -n test-all uses the split command
make lint covers the scenarios binary ⏸️ untested no This test phase may not run linters or static analysis, so I did not run clippy. The lint phase owns this check.
  • taskset -c 0-3 /usr/bin/time -v cargo test --test scenarios (debug, 4 pinned cores)
  • INPUTLAYER_SCENARIO_VIEWS=maintained cargo test --test scenarios
  • cargo test -p inputlayer-testkit counters -- --nocapture
  • make e2e-reactive (release testkit unit tests + cargo test --release --test scenarios -- --nocapture --include-ignored + latency sample check)
  • make --eval expansion of NON_SCENARIO_TESTS, cargo test -p inputlayer --all-features --lib --bins $(NON_SCENARIO_TESTS) --no-run executable list, and make -n test-all debug-stage command
✅ **Document** - passed

✅ No issues found.

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

✅ No issues found.

@jsam jsam changed the title test(scenarios): scenario harness on the testkit (T-01) test(testkit): add scenario harness and move the reactive e2e suite into it Oct 5, 2026
@jsam jsam changed the title test(testkit): add scenario harness and move the reactive e2e suite into it test(scenarios): scenario harness on the testkit with the reactive e2e suite moved in Oct 5, 2026
@jsam jsam changed the title test(scenarios): scenario harness on the testkit with the reactive e2e suite moved in test(scenarios): scenario harness on the testkit, absorbing the reactive e2e suite Oct 5, 2026
jsam added 9 commits October 5, 2026 19:25
…2e suite into it

Move tests/e2e_reactive into one tests/scenarios binary that runs under plain
cargo test (debug); make e2e-reactive stays the release run that writes
latency samples, and make lint covers the binary through --all-targets.

Testkit additions: EngineBuilder::views(Mode) with Mode::from_env (maintained
is refused with a clear panic until V2 #309 defines engine.views),
memory_limits, max_query_cost and nesting_limit settings; Engine::metrics()
reading /metrics/prometheus into Counters with Option fields and
Violation::NotMeasurable for a missing counter; Engine::create_user, grant,
create_api_key and WsClient::connect_with_key; WsClient::execute_expecting and
execute_at with the reply revision; Fixture::shop_pack(Size) with the shop
rules (near only in Size::Vector). Fixture::install commits consecutive
statements as one program. A harness module checks these against a real
engine. TESTING.md documents the suite and the harness.

Refs #335
…se-only

Rebased onto main, which added tests/e2e_reactive/saturation.rs while e2e_reactive
was test = false. Its delivery bounds need a release engine (in debug a probe
delta took 8 s against the 5 s bound), so it is ignored in debug builds and
runs in make e2e-reactive.
@jsam jsam changed the title test(scenarios): scenario harness on the testkit, absorbing the reactive e2e suite test(scenarios): scenario harness on the testkit, with the reactive e2e suite moved into it Oct 5, 2026
@jsam
jsam marked this pull request as ready for review October 5, 2026 20:10
@jsam
jsam merged commit 0bab354 into main Oct 5, 2026
29 of 30 checks passed
@jsam
jsam deleted the fm/test-t01 branch October 5, 2026 20:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant