Repository navigation
protocol: add NVXC v2's frame codec beside v1 (SL4.4a) - #1528
Pedro Henrique Penna (ppenna) merged 1 commit into
Conversation
This pull request changes existing testsIt modifies or removes 1 existing test asset(s), listed below. Review each with care: a change to a test can hide a regression that the test caught. See doc/contribute.md#changes-to-existing-tests. Test policy
Relocated unchanged: 0; added: 20. Compared the merge base |
f1ba875 to
e6eeca1
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The comparison includes host/store API removals and sandbox format-10 changes beyond the codec-only scope, requiring maintainer confirmation of the intended stacked base and lifecycle/cross-platform validation coverage.
No open issues 🎉
What changed in this PR
This PR’s stated goal is to introduce a private NVXC v2 frame codec alongside v1 for the streaming-control migration in #1128. The supplied changes also reflect the broader slimming workstream: making NVXC private, removing legacy stores and launch paths, and moving callers toward caller-owned VMs and CLI-owned state.
Changes:
- Restrict NVXC and control-session access, adapting tests and examples to those boundaries.
- Remove legacy store/template code and route retained functionality through VM and platform helpers.
- Update CLI configuration expectations, test wiring, and documentation.
| File | Description |
|---|---|
| scripts/test-layout-allowlist.json | Adjusts protocol and session seam allowances. |
| scripts/test_microvm_tests.py | Updates format expectations and lifecycle test invocation. |
| scripts/nvx_tools/sandbox_ram_upper_tests.py | Expects configuration format 10. |
| scripts/nvx_tools/sandbox_lifecycle_tests.py | Updates the lifecycle test’s documented location. |
| scripts/nvx_tools/microvm_tests.py | Runs managed lifecycle as a CLI-enabled unit test. |
| nvx-rs/tests/vm_lifecycle.rs | Encodes minimal v1 frames without private protocol APIs. |
| nvx-rs/tests/vectors/README.md | Updates vector ownership and legacy-store documentation. |
| nvx-rs/tests/openvmm_vectors.rs | Corrects documentation of excerpt consumers. |
| nvx-rs/tests/host_modules.rs | Updates dependency assertions after store removal. |
| nvx-rs/tests/fixtures/store/runtime.json | Removes a legacy runtime-record fixture. |
| nvx-rs/tests/fixtures/store/launch-spawned.json | Removes a legacy spawned-launch fixture. |
| nvx-rs/tests/fixtures/store/launch-prepared.json | Removes a legacy prepared-launch fixture. |
| nvx-rs/tests/fixtures/store/invalid/runtime-unknown-field.json | Removes an obsolete invalid-record fixture. |
| nvx-rs/tests/fixtures/store/invalid/runtime-truncated.json | Removes an obsolete truncated-record fixture. |
| nvx-rs/tests/fixtures/store/invalid/runtime-instance-format-3.json | Removes a legacy instance-format fixture. |
| nvx-rs/tests/fixtures/store/invalid/runtime-format-5.json | Removes an obsolete unsupported-format fixture. |
| nvx-rs/tests/fixtures/store/invalid/runtime-cli-format-1.json | Removes a legacy CLI-format fixture. |
| nvx-rs/tests/fixtures/store/invalid/launch-without-log.json | Removes an obsolete incomplete-launch fixture. |
| nvx-rs/tests/fixtures/store/invalid/launch-instance-format-3.json | Removes a legacy launch-format fixture. |
| nvx-rs/tests/cli/formats.rs | Tests format 10 and rejection of older configurations. |
| nvx-rs/src/testing/fake_openvmm/tests.rs | Gates feature assertions on their dependencies. |
| nvx-rs/src/testing/fake_openvmm.rs | Removes a documentation link to private NVXC internals. |
| nvx-rs/src/protocol/mod.rs | Makes NVXC exports crate-private and feature-gated. |
| nvx-rs/src/protocol/maps.rs | Describes MAPS without linking private constants. |
| nvx-rs/src/host/vm/tests.rs | Gates a Windows claim test on CLI support. |
| nvx-rs/src/host/vm.rs | Houses nonzero launch-capability generation. |
| nvx-rs/src/host/vm_directory/tests.rs | Adapts permission assertions to retained helpers. |
| nvx-rs/src/host/transport/tests.rs | Gates legacy tests and replaces store-based naming. |
| nvx-rs/src/host/tests.rs | Adds Windows test naming and gates shared helpers. |
| nvx-rs/src/host/template/mod.rs | Removes the legacy template module. |
| nvx-rs/src/host/template/clone/record.rs | Removes legacy clone activation-record construction. |
| nvx-rs/src/host/template/clone/launch/tests.rs | Removes a legacy clone-launch test hook. |
| nvx-rs/src/host/sys/mod.rs | Limits rename support to CLI builds. |
| nvx-rs/src/host/supervisor/reattach.rs | Removes store-coupled VM reattachment. |
| nvx-rs/src/host/store/vmm.rs | Removes legacy store process-recovery helpers. |
| nvx-rs/src/host/store/regular.rs | Removes legacy file-helper wrappers. |
| nvx-rs/src/host/store/names.rs | Removes legacy store file-name constants. |
| nvx-rs/src/host/store/launch.rs | Removes store-owned launch transactions. |
| nvx-rs/src/host/spawn.rs | Documents spawning without legacy store APIs. |
| nvx-rs/src/host/snapshot/tests.rs | Uses platform file helpers and VM directory creation. |
| nvx-rs/src/host/snapshot/manifest.rs | Removes the legacy manifest alias. |
| nvx-rs/src/host/snapshot/key/tests.rs | Removes legacy alias and store-identity assertions. |
| nvx-rs/src/host/snapshot/key.rs | Removes legacy conversions, alias, and gateway accessor. |
| nvx-rs/src/host/snapshot/capture.rs | Imports retained file helpers from platform. |
| nvx-rs/src/host/snapshot.rs | Drops the unused capture-exit re-export. |
| nvx-rs/src/host/session/tests/managed_lifecycle.rs | Adapts managed lifecycle to private unit-test access. |
| nvx-rs/src/host/session/tests.rs | Registers managed lifecycle and gates dependent tests. |
| nvx-rs/src/host/seal/windows/tests.rs | Removes the deleted volume-path helper’s test. |
| nvx-rs/src/host/seal/windows.rs | Removes GUID-volume path lookup. |
| nvx-rs/src/host/seal.rs | Removes the volume-path wrapper. |
| nvx-rs/src/host/sandbox/scratch.rs | Removes an unused binding accessor and legacy link. |
| nvx-rs/src/host/sandbox/prepared.rs | Documents process ownership through retained spawn APIs. |
| nvx-rs/src/host/sandbox/plan.rs | Removes the legacy network DNS wrapper. |
| nvx-rs/src/host/sandbox/geometry.rs | Removes documentation of a deleted re-export. |
| nvx-rs/src/host/sandbox/distro.rs | Removes an unused binding accessor and legacy link. |
| nvx-rs/src/host/runtime/mod.rs | Documents runtime identity through SavedVm verification. |
| nvx-rs/src/host/restore/tests/live_init.rs | Uses snapshot types and local capability generation. |
| nvx-rs/src/host/restore/tests.rs | Gates the live-init harness on CLI support. |
| nvx-rs/src/host/platform/windows/private/tests.rs | Gates CLI-only directory and rename checks. |
| nvx-rs/src/host/platform/windows/mod.rs | Trims exports and gates CLI-only helpers. |
| nvx-rs/src/host/platform/windows/log_claim.rs | Separates shared job creation from CLI claim checks. |
| nvx-rs/src/host/platform/windows/endpoint/tests.rs | Uses standalone names and explicit probe deadlines. |
| nvx-rs/src/host/platform/windows/endpoint.rs | Removes legacy endpoint factories and probe wrapper. |
| nvx-rs/src/host/platform/tests.rs | Tests retained private-file and directory-sync helpers. |
| nvx-rs/src/host/platform/other.rs | Removes obsolete stubs and gates CLI helpers. |
| nvx-rs/src/host/platform/mod.rs | Houses private-file creation, replacement, and directory syncing. |
| nvx-rs/src/host/platform/linux/tests.rs | Uses deadline probes and verified restore-ready reads. |
| nvx-rs/src/host/platform/linux/private.rs | Removes unused permission helpers and gates CLI operations. |
| nvx-rs/src/host/platform/linux/mod.rs | Trims exports and gates CLI-only modules. |
| nvx-rs/src/host/platform/linux/endpoint.rs | Removes legacy wrappers while retaining verified reads. |
| nvx-rs/src/host/platform/inherit.rs | Makes the spawn lock crate-private. |
| nvx-rs/src/host/mod.rs | Removes legacy modules and privatizes the control session. |
| nvx-rs/src/host/instance/files.rs | Removes legacy instance file utilities. |
| nvx-rs/src/host/cli/store/tests.rs | Removes compatibility tests against the deleted library store. |
| nvx-rs/src/host/cli/store/mod.rs | Documents the CLI store independently. |
| nvx-rs/src/host/cli/store/files.rs | Uses platform file operations directly. |
| nvx-rs/src/host/cli/snapshots/tests.rs | Uses the platform private-write helper. |
| nvx-rs/src/host/cli/snapshots/capture/tests.rs | Replaces legacy store file-helper calls. |
| nvx-rs/src/host/cli/snapshots/capture.rs | Creates geometry files through platform. |
| nvx-rs/src/host/cli/snapshots.rs | Uses platform syncing during snapshot publication. |
| nvx-rs/src/host/cli/session/tests.rs | Adapts imports and gates private-protocol dependencies. |
| nvx-rs/src/host/cli/sandbox/state/tests.rs | Tests records using explicit provisioning inputs. |
| nvx-rs/src/host/cli/sandbox/options.rs | Builds NetworkConfig directly from validated options. |
| nvx-rs/src/host/cli/sandbox/lifecycle/tests.rs | Uses the CLI-owned stop outcome. |
| nvx-rs/src/host/cli/sandbox/lifecycle/stop.rs | Defines stop outcomes within the CLI. |
| nvx-rs/src/host/cli/sandbox/lifecycle/start/tests/restore.rs | Adapts restore fixtures to direct configuration inputs. |
| nvx-rs/src/host/cli/sandbox/lifecycle/start/tests.rs | Tests share checks without legacy launch objects. |
| nvx-rs/src/host/cli/sandbox/lifecycle/mod.rs | Provisions from explicit image, export, and network inputs. |
| nvx-rs/src/host/cli/sandbox/lifecycle/directory.rs | Creates state directories through the CLI store. |
| nvx-rs/src/host/cli/run.rs | Uses NetworkConfig without an intermediate conversion. |
| nvx-rs/src/guest/sys/tests.rs | Gates capability-test exports on CLI support. |
| nvx-rs/src/guest/sys/spawn/tests.rs | Gates CLI-dependent test constants. |
| nvx-rs/src/guest/managed_agent/tests.rs | Gates the host integration harness on CLI support. |
| nvx-rs/src/guest/managed_agent/seam/tests.rs | Gates CLI-dependent test helpers. |
| nvx-rs/src/guest/managed_agent/dispatch.rs | Gates dispatch tests on CLI support. |
| nvx-rs/src/contract.rs | Updates documentation to name SnapshotKey. |
| nvx-rs/src/activation/tests.rs | Removes tests of deleted store identity types. |
| nvx-rs/src/activation/mod.rs | Removes store identities, generations, and template references. |
| nvx-rs/examples/external-launch.rs | Connects through the public verified transport. |
| nvx-rs/Cargo.toml | Updates the host feature’s descriptive comment. |
| doc/usage.md | Documents the relocated managed-lifecycle test. |
| doc/run.md | Documents format 10 and CLI-owned state. |
| doc/project-structure.md | Updates the host and test layout descriptions. |
| doc/design/5.3-snapshot-protocol.md | Removes the legacy template-store deadline example. |
| doc/design/1.5-compatibility-and-versioning-model.md | Describes unsupported keys without legacy store guidance. |
| doc/contribute.md | Updates managed-lifecycle test guidance. |
| doc/ci.md | Documents the CLI-enabled lifecycle unit test. |
| doc/adversarial-testing.md | Updates lifecycle test naming and build command. |
| doc/acceptance-case-matrix.md | Records relocated tests, retired doctests, and format changes. |
Review effort: Balanced
e6eeca1 to
eda49e1
Compare
NVXC v1 buffers an execution's input and caps its collected output, so it cannot carry interactive or unbounded exec streams. SL4.4a (#1128) defines version 2's frames and their codec in NVXC's private modules, beside v1, while every peer stays on v1: SL4.4b serves v2 in the guest loop and the fake OpenVMM, and SL4.4c moves the host to it. protocol::app::v2 holds a frame enum with its encoder and decoder. A frame keeps v1's 24-byte header, with version 2, and fits one outer data record. The host sends PING, EXEC, STOP, CANCEL, MAPS, CAPTURE, ACTIVATE, STDIN and STDIN_END, and the guest READY, STDOUT, STDERR, EXIT, STOPPED, STDIN_ACK, BUSY and ERROR. READY carries the protocol version, then, in answer to ACTIVATE, what Ready reports about the activation. EXEC, MAPS, CAPTURE and ACTIVATE carry v1's payloads, which v1's codecs encode and decode, unchanged. STDIN_END ends an execution's input explicitly, and STDIN_ACK returns 1 to 64 KiB of written bytes to its 64 KiB window of unacknowledged input. STDOUT and STDERR have no total cap, so EXIT's outcomes drop v1's output limit. FEATURES has no kind in v2. Both directions refuse a zero request ID, an empty chunk, an acknowledgement outside the window and an empty error category, and the decoder also refuses another magic or version, unknown kinds, a status outside EXIT and ERROR, and a payload that a kind does not allow. Nothing calls the codec yet, so its module is gated by the features of its users, cli, testing, and guest on Linux x86-64, and carries cfg_attr(not(test), expect(dead_code)) naming SL4.4b and SL4.4c, a test hook for which protocol/app.rs takes one seam in the test-layout allowlist. The codec is crate-private, so the public API doesn't change, and BOOT_CONTRACT_VERSION and CONTROL_CONTRACT_REVISION stay as they are. Its tests pin each frame's bytes and round trip, the protocol version that READY carries, the stdin window and the record's bounds, and the refusals, v1's PING vector among them, check that every frame that decodes encodes back to its bytes, and carry v1's EXEC, MAPS, capture and activate payloads across v2 unchanged and in order. Part of #1128 (SL4.4a). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
eda49e1 to
927dce9
Compare
9921641
into
feature/nvx-refactor
Part of #1128 (SL4.4a, "NVXC v2's frames have a codec"). Parent #1089, umbrella #1076.
Was stacked on #1525 (SL6.12), which made NVXC crate-private, gated by the features of its users, and has merged. For its merge, this PR's commit was rebased from
eda49e156dcontofeature/nvx-refactorat1610f771002, as927dce98446:git range-diffshows the same patch, with only a context line of the allowlist's hunk changed by the base. SL4.4b (#1531) was stacked oneda49e156dc.What and why
NVXC v1 buffers an execution's input and caps its collected output at 1 MiB, so it cannot carry interactive or unbounded exec streams. As SL4.4a's Scope says, this PR defines version 2's complete frame codec, and its round-trip tests, in NVXC's private modules, beside v1, while every peer stays on v1. Serving v2 (SL4.4b), switching the host and the CLI (SL4.4c) and deleting v1 and FEATURES (SL4.4d) come later; no payload, wire value of v1, or restore ordering changes.
protocol::app::v2(nvx-rs/src/protocol/app/v2.rs, new): aFrameenum,Frame::encode(request_id)andFrame::decode(bytes) -> (request_id, Frame), theOutcomeof anEXIT, and the constantsVERSION(2),MAX_PAYLOAD(65,512) andSTDIN_WINDOW(64 KiB). A frame keeps v1's 24-byte header with version 2 (magicNVXC, version, kind, zero flags, request ID, status, payload length, little-endian), and fits one outer data record.PING0x01EXEC0x02EXECpayload, unchanged: arguments, working directory, environment, timeoutSTOP0x03CANCEL0x04MAPS0x06MAPSpayload, unchangedCAPTURE0x07ACTIVATE0x08STDIN0x09STDIN_END0x0aREADY0x81ACTIVATE,ReadyActivation's canonical bytesSTDOUT/STDERR0x82/0x83EXIT0x84exit,signal,timeout,cancelled,failed); the status is the exit statusSTOPPED0x85STDIN_ACK0x86u32from 1 to 64 KiBBUSY0x87ERROR0xffREADYacknowledgesPING,MAPS,CAPTUREandACTIVATE, as in v1, and always starts with the protocol version. In answer toACTIVATEit carries what Ready reports about the activation after it, unchanged. The decoder reads any version byte, so that SL4.4c's host can check it and refuse another.EXEC,MAPS,CAPTUREandACTIVATEcarry the bytes that the existing codecs produce and read (encode_exec_payloadand the guest's and fake's decoders,encode_maps_payloadsanddecode_*maps_payloadwithMAX_PAYLOADas the limit,encode_capture_payload/decode_capture_payload,encode_activate_payload/decode_activate_payload, andReadyActivation); the frame codec doesn't reinterpret them.STDIN_ACKreturns 1 toSTDIN_WINDOWwritten bytes to the execution's window,STDIN_ENDends its input explicitly, and the host never has more thanSTDIN_WINDOWbytes unacknowledged. The codec checks each frame's bounds; the peers keep the count (SL4.4b, SL4.4c).STDOUTandSTDERRare bounded only by the data record, andOutcomehas no output limit, unlike v1'sExitCategory, which leaves with v1.0x05, has none in v2), a status outsideEXITandERROR, and a payload that a kind does not allow. Every frame that decodes encodes back to its bytes.protocol'sProtocolError,array,violationandOUTER_MAX_PAYLOAD, and has its own magic and kind constants, so SL4.4d can delete v1 without editing it.protocol::app's module docs namev2, whose module docs give the frames, their exchanges and the window;nvx-rs/README.md'snvx::protocolsection says that the codec of v2's frames sits beside v1's. Its module table row is unchanged.Not in this PR, as the Scope says: serving v2, switching any host path or the CLI, deleting v1, FEATURES or
GuestFeatures, changing a payload or the restore ordering, negotiation, generations, build identifiers, conformance suites (nonvxc-v2.txt; the tests pin the bytes instead) and timing counters.BOOT_CONTRACT_VERSIONandCONTROL_CONTRACT_REVISIONstay unchanged: neither #1076 nor #1128 asks v2 to bump them. The codec is crate-private, so the public-API snapshots don't change.Judgment calls, approved by the orchestrator for Pedro Henrique Penna (@ppenna)
READYcarries the protocol version: it stays the success answer ofPING,MAPS,CAPTUREandACTIVATE, as in v1, so the host can check the version on every session, a restore's included, where the activate exchange takes the place ofPING.READYof any version, so that the host can refuse another version by name rather than as a malformed frame.0x09,0x0a,0x86and0x87.STDIN_ACKcounts the bytes written since the previous acknowledgement, not a running total.nvxc-v2.txt), since nvx-rs slimming 5.1.1: NVXC v2 carries every control path, and streams execs #1128 excludes conformance suites; the tests pin each frame's bytes instead.BUSYis a frame of its own, empty, rather than anERRORwith thebusycategory, as the Scope names it among v2's frames.Seams
Nothing calls the codec yet, so
mod v2inprotocol/app.rsis gated by the features of its eventual users,cli,testing, andgueston Linux x86-64, as SL6.12 gated NVXC, and carries#[cfg_attr(not(test), expect(dead_code, reason = "SL4.4b's guest loop and fake OpenVMM serve NVXC v2, and SL4.4c's host speaks it"))].scripts/test-layout-allowlist.jsongivesnvx-rs/src/protocol/app.rsone seam for that hook.Size
Measured: 213 core lines and 2 counted files (estimate 200 and 3; stop at 400):
nvx-rs/src/protocol/app/v2.rs200 (with its 2-line#[cfg(test)] mod tests;),nvx-rs/src/protocol/app.rs13 (the module's declaration, gate and hook), counting the added lines that are neither blank nor comments. Tests, docs and the allowlist don't count.Validation
The gates that
local_gates.py --filesselects, run from this branch's own action definitions (the adapter gates don't exist onfeature/nvx-refactor), with Rust 1.95.0 andNVX_BUNDLE=skip, atf1ba8757unless a row says otherwise.f1ba8757sat on #1525's earlier head,38d4409f163. Its patch, unchanged (git range-diffshows=), was rebased onto #1525's last head,0e927f7865a, whose changes touch no protocol, README or allowlist file, ase6eeca19, on whichnvx.py verify,cargo fmt --check, Clippy with all features for Windows,x86_64-unknown-linux-gnuand, withguestalone,x86_64-unknown-linux-musl, theprotocol::tests (108 passed),check_test_layout.py,check_test_changes.pyandcheck_matrix.pypassed again; and then ontofeature/nvx-refactoratf03c21c3f0c, which has the same tree as0e927f7865a, aseda49e15, whose tree ise6eeca19's. At this head,927dce98446, on1610f771002, these passed again: on Windows,nvx.py verify,cargo fmt --check, the Windows,x86_64-unknown-linux-gnuandx86_64-unknown-linux-muslClippy rows below, theprotocol::tests with all features,cliandtesting(108, 97 and 97 passed),check_test_layout.py,check_test_changes.py,check_markdown_links.pyandcheck_matrix.py; on nvx-mshv-test,cargo fmt --check, the Linux Clippy row below, the v2 tests with all features,cli,testingandguest(10, 7, 7 and 7 passed), theprotocol::tests with all features (126 passed),cargo +1.89 check,public_api.py(no change) andnvx.py check-guest-binaries(musl Clippy and 1116 tests).cargo fmt --all --checkcargo clippy --locked -- -D warnings:--all-targets --all-features,--lib,--lib --no-default-features,serdealone,--lib --bins --features cli,--lib --bins --no-default-features --features testing,--lib --no-default-features --features guest, and--all-targetswithcli,testingandguestalonex86_64-unknown-linux-gnu(all features,cli,testingandguestalone) and forx86_64-unknown-linux-muslwith--no-default-features --features guest(--all-targetsand--lib --bins)cargo test --locked --all-features/cargo test --locked/cargo build --locked --lib --no-default-features/cargo test --locked --lib --no-default-features/--lib --features cli/--lib --no-default-features --features testingRUSTDOCFLAGS="-D warnings" cargo doc --locked --no-deps --all-features;cargo +1.89 check --locked --all-targets --all-features;cargo check --all-targets --all-features --target aarch64-apple-darwincheck_test_layout.py,check_markdown_links.py, validate-nvx'spython -m compileall -q scripts,python -m unittest scripts/test_*.py ...,test_adversarial.py,test_hosts.py,nvx.py test-microvm --help(atd6c766fe, whose scripts are this head's)check_matrix.pyagainst99d2022085fcargo fmt --all --check;cargo clippy --locked -- -D warningswith all features, the defaults, no features,serde,cli,testingandguestalone (--lib --binsand--all-targets),cli,guest,testing,guestandcli,testingcargo test --locked:--all-features, the defaults,--lib --no-default-features,--lib --features cli,--lib --no-default-features --features testing,--lib --no-default-features --features guestd6c766fe, failedtests/supervisor.rs'svmms_inherit_only_their_streams_and_allowed_descriptors_while_others_spawnonce: a known race of that test, which reads thesleepchild's descriptors as soon asposix_spawnreturns, before its exec closes the close-on-exec pipes, and which #1507 also met at its base. It passed in 5 reruns of--test supervisorand in both later all-features runs.cli,testingandguest: 10, 7, 7 and 7 passed (the capture and activate exchange tests needcliandguest, the workload testcliandtesting)cargo docwith-D warnings;cargo +1.89 check --all-targets --all-features; the bundled-artifacts test (atd6c766fe)python3 scripts/public_api.py(both snapshots)nvx.py check-guest-binaries --toolchain 1.95.0(musl Clippy and 1218 tests),build-guest-binaries,test-guest-binariesA code-review subagent reviewed the whole diff and found no significant issues. Left to CI: the microVM scenarios, since nothing calls the codec and no runtime path changes, and the rest of the matrix.
Changes to existing tests
python scripts/check_test_changes.py --base origin/feature/nvx-refactorreports one change to existing tests, 20 added test items, and none relocated unchanged, so this PR carries thetests-modifiedlabel:scripts/test-layout-allowlist.jsonloosensnvx-rs/src/protocol/app.rsfrom no entry to 1 seam, for theexpect(dead_code)hook ofmod v2(Seams, above). SL4.4c, which gives the codec its last caller, removes the hook and the seam.protocol::app::v2::tests:every_frame_round_trips_in_its_wire_form,ready_round_trips_the_protocol_version,stream_frames_keep_their_bounds,malformed_frames_are_refused, the property testdecoded_frames_encode_back_to_their_bytes,exec_requests_carry_their_workload_unchanged(cliandtesting),exec_payloads_cross_unchanged,maps_tables_cross_unchanged_in_order,capture_requests_carry_their_flag_unchangedandthe_activate_exchange_carries_its_payloads_unchanged(cliandguest), with their helpers and the table of frames.Every old test of the area is kept unchanged:
protocol::tests, v1's codec, payload and vector tests. No test is rewritten, moved or retired. The new tests are unit tests, which the case matrix doesn't inventory, and no row names a test that this PR touches.