You traced runner_boots_listens_and_shuts_down_cleanly in
production harness (Part II).
Here you change that integration test: add visible markers, assert what production wiring can show
without pretending the test already submits a user transaction, and document how real ingress
(POST /api/v1/transactions or tx_submission_sender()) would feed the same ShardLoop path.
cargo.#[serial] production tests and RUST_LOG=info.crates/production/tests/runner.rs β runner_boots_listens_and_shuts_down_cleanlycrates/production/src/runner.rs (tx_submission_sender), crates/production/src/rpc/handlers.rs (submit_transaction_handler)From the repository root (production tests are serial and use real ports):
RUST_LOG=info cargo test -p hyperscale-production --test runner runner_boots_listens_and_shuts_down_cleanly -- --test-threads=1 --nocapture
Confirm pass once. Note log lines for peer id, listen addresses, and clean shutdown.
Add three tracing::info! markers (preferred over println!):
build() succeeds β e.g. info!("[lab] runner built");listen_addresses() returns β log addrs.len() and the addressesdrop(shutdown) β e.g. info!("[lab] requesting shutdown");Re-run with the same command. Verify ordering: built β listening β shutdown β test pass.
After fetching listen addresses, add:
assert!(!addrs.is_empty(), "production runner should bind at least one QUIC listen address (validator libp2p mesh, not wallet HTTP)");
info!("[lab] listen addresses: {:?}", addrs);
This documents what production E2E can prove today: wiring + network surface, not yet tx execution.
In your journal (or PR description), answer in bullet form:
submit_transaction_handler β tx_submission_tx.send(NodeInput::SubmitTransaction { ... }) β pinned loop on consensus_rx.ProductionRunner::tx_submission_sender() sends the same NodeInput without RPCβuseful for integration tests that need a tx without standing up HTTP.Stretch (optional): sketch a new #[serial] test that calls tx_submission_sender() after run() starts, with a fixture transaction from TestFixturesβdo not block this lab on finishing that test.
Change the post-run() sleep from 500ms to 2s once, re-run, and note whether logs show periodic metrics or channel-depth exports (if enabled in your build). Restore 500ms before you finish so CI stays fast.
tx_submission_sender ingress without conflating them with the pinned loop itself.Continue to JMT & shard state deep dive, then Cross-Shard Simulation E2E, or extend production coverage in a separate PR after the simulation/substate work in #18.