test_button_one_requires_explicit_task_when_ambiguous (test_backend.BackendTests) ... ok
test_button_one_selects_single_task_but_rejects_cross_label (test_backend.BackendTests) ... ok
test_button_replenishment_cannot_confirm_as_pick (test_backend.BackendTests) ... ok
test_button_two_reuses_open_request (test_backend.BackendTests) ... ok
test_cancel_releases_reservation_without_changing_stock (test_backend.BackendTests) ... ok
test_concurrent_duplicate_events_deduct_exactly_once (test_backend.BackendTests) ... ok
test_concurrent_pick_creation_cannot_overbook (test_backend.BackendTests) ... ok
test_create_label_enforces_scenario_utf8_and_uniqueness (test_backend.BackendTests) ... ok
test_device_button_requires_confirmed_screen_task (test_backend.BackendTests) ... ok
test_device_event_id_cannot_change_display_version (test_backend.BackendTests) ... ok
test_device_success_and_business_are_separate (test_backend.BackendTests) ... ok
test_duplicate_device_event_survives_restart (test_backend.BackendTests) ... ok
test_event_id_cannot_be_reused_for_other_operation (test_backend.BackendTests) ... ok
test_external_commands_never_get_virtual_ack (test_backend.BackendTests) ... ok
test_failed_display_retry_new_version_and_no_stock_change (test_backend.BackendTests) ... ok
test_immutable_snapshot_select_and_auto_advance (test_backend.BackendTests) ... ok
test_invalid_numeric_inputs_are_rejected_without_side_effects (test_backend.BackendTests) ... ok
test_inventory_reason_and_csv_formula_safety (test_backend.BackendTests) ... ok
test_isolated_unicode_surrogate_is_bad_input_not_server_error (test_backend.BackendTests) ... ok
test_late_old_failure_does_not_mask_new_success (test_backend.BackendTests) ... ok
test_mode_switch_supersedes_old_unsent_snapshot (test_backend.BackendTests) ... ok
test_overflow_replenishment_rolls_back (test_backend.BackendTests) ... ok
test_receipt_marks_only_the_physically_selected_task (test_backend.BackendTests) ... ok
test_receipt_uuid_dedupe_and_conflict_survive_restart (test_backend.BackendTests) ... ok
test_replenishment_adds_only_at_confirmation_and_is_unique (test_backend.BackendTests) ... ok
test_reservations_prevent_overbooking_and_low_inventory_adjustment (test_backend.BackendTests) ... ok
test_task_confirmation_is_idempotent (test_backend.BackendTests) ... ok
test_task_creation_retry_is_durable_idempotent (test_backend.BackendTests) ... ok
test_three_scenarios_seed_and_restart_persistence (test_backend.BackendTests) ... ok
test_virtual_ack_never_completes_business_task (test_backend.BackendTests) ... ok
test_host_origin_and_csrf_are_enforced (test_backend.HTTPTests) ... [2026-10-03T17:19:13.814Z] 127.0.0.1 "POST /api/labels/EL-001/locate HTTP/1.1" 403 -
[2026-10-03T17:19:13.815Z] 127.0.0.1 "POST /api/labels/EL-001/locate HTTP/1.1" 403 -
[2026-10-03T17:19:13.815Z] 127.0.0.1 "POST /api/labels/EL-001/locate HTTP/1.1" 403 -
[2026-10-03T17:19:13.816Z] 127.0.0.1 "POST /api/labels/EL-001/locate HTTP/1.1" 403 -
[2026-10-03T17:19:13.816Z] 127.0.0.1 "GET /api/state HTTP/1.1" 403 -
ok
test_http_mutation_and_csv_roundtrip (test_backend.HTTPTests) ... [2026-10-03T17:19:13.851Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 200 -
[2026-10-03T17:19:13.855Z] 127.0.0.1 "POST /api/tasks/eeb702f3-4deb-4943-bed2-f3c8ec174441/complete HTTP/1.1" 200 -
[2026-10-03T17:19:13.856Z] 127.0.0.1 "GET /api/export HTTP/1.1" 200 -
ok
test_json_content_type_size_and_input_validation (test_backend.HTTPTests) ... [2026-10-03T17:19:13.887Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 415 -
[2026-10-03T17:19:13.887Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 400 -
[2026-10-03T17:19:13.888Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 400 -
[2026-10-03T17:19:13.888Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 400 -
[2026-10-03T17:19:13.888Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 413 -
[2026-10-03T17:19:13.890Z] 127.0.0.1 "POST /api/tasks HTTP/1.1" 400 -
[2026-10-03T17:19:13.891Z] 127.0.0.1 "POST /api/labels/unknown/inventory HTTP/1.1" 404 -
[2026-10-03T17:19:13.892Z] 127.0.0.1 "POST /api/tasks/missing/complete HTTP/1.1" 404 -
ok
test_state_health_and_static (test_backend.HTTPTests) ... [2026-10-03T17:19:13.922Z] 127.0.0.1 "GET /api/state HTTP/1.1" 200 -
[2026-10-03T17:19:13.923Z] 127.0.0.1 "GET /health HTTP/1.1" 200 -
[2026-10-03T17:19:13.926Z] 127.0.0.1 "GET / HTTP/1.1" 200 -
[2026-10-03T17:19:13.927Z] 127.0.0.1 "HEAD / HTTP/1.1" 200 -
ok
test_static_traversal_and_symlinks_cannot_escape (test_backend.HTTPTests) ... [2026-10-03T17:19:13.955Z] 127.0.0.1 "GET /../secret.txt HTTP/1.1" 403 -
[2026-10-03T17:19:13.956Z] 127.0.0.1 "GET /%2e%2e/secret.txt HTTP/1.1" 403 -
[2026-10-03T17:19:13.957Z] 127.0.0.1 "GET /..%5csecret.txt HTTP/1.1" 403 -
[2026-10-03T17:19:13.957Z] 127.0.0.1 "GET /escape.txt HTTP/1.1" 403 -
[2026-10-03T17:19:13.958Z] 127.0.0.1 "GET /%00secret.txt HTTP/1.1" 403 -
[2026-10-03T17:19:13.958Z] 127.0.0.1 "GET /api/missing HTTP/1.1" 404 -
ok

----------------------------------------------------------------------
Ran 35 tests in 0.790s

OK
