What & why
sdk/streamlib-sdk is the public Rust authoring crate (streamlib). Its nine tests in sdk/streamlib-sdk/tests/app_sugar_test.rs have never run in CI, and after #2052 deleted the example-coupled E2E the crate's --lib slice runs zero tests — so .github/workflows/test.yml's -p streamlib half is compile coverage only.
The tests are real coverage of the authoring surface: App::add matching Runner::add_processor snapshot-for-snapshot, App::connect passing the runtime's typed ProcessorPortNotFound through unmasked, config-serialization rejection, and display-name assignment/disambiguation.
What we want: the public authoring crate's behaviour gated by CI like every other crate's.
What exists today: test.yml:121 runs cargo test --locked -p streamlib -p streamlib-macros -p streamlib-processor-schema --lib. --lib excludes tests/, so app_sugar_test.rs is compiled by nothing and run by nothing. No xtask mirror names it either.
Why it moves now: #2052 removed the crate's only lib test, so the gap is no longer masked by a passing invocation.
Design
Add cargo test --locked -p streamlib --tests as its own step in test.yml's unit-test block, and mirror the name in xtask if the mirror covers this crate (engine lib tests reach CI by name only — verify whether the same holds here).
No GPU is required, verified against the tree 2026-08-30: GpuContext::init_for_platform_sync() is called from Runner::start() (runtime/streamlib-engine/src/core/runtime/runtime.rs:354), not Runner::new(). None of the nine tests calls start() or run() — they are graph-construction only.
The one unknown to settle in the ticket: App::new() creates an iceoryx2 node and binds a surface-share unix socket under /run/user/<uid>. Confirm CI's container provides a usable runtime dir; if it does not, that — not the GPU — is what needs solving, and the fix belongs here rather than in a skip.
Constraints
- Test-only and CI-only. No library code changes.
- Do not re-add a test that reaches into
examples/ or packages/ — docs/plan/ARCHITECTURE.md §Consumers forbids a consumer as a contract source, which is why the deleted E2E was not replaced.
Done means
app_sugar_test.rs's nine tests execute in CI and are red when the authoring surface regresses.
- §Product's Rust-authoring DECIDED bullet (
docs/plan/ARCHITECTURE.md:41-44) regains a verify: anchor, or the PR states why it stays anchor-free.
Validation shape
One real CI run is the proof — the container's iceoryx2/runtime-dir behaviour cannot be established locally. No rig needed.
What & why
sdk/streamlib-sdkis the public Rust authoring crate (streamlib). Its nine tests insdk/streamlib-sdk/tests/app_sugar_test.rshave never run in CI, and after #2052 deleted the example-coupled E2E the crate's--libslice runs zero tests — so.github/workflows/test.yml's-p streamlibhalf is compile coverage only.The tests are real coverage of the authoring surface:
App::addmatchingRunner::add_processorsnapshot-for-snapshot,App::connectpassing the runtime's typedProcessorPortNotFoundthrough unmasked, config-serialization rejection, and display-name assignment/disambiguation.What we want: the public authoring crate's behaviour gated by CI like every other crate's.
What exists today:
test.yml:121runscargo test --locked -p streamlib -p streamlib-macros -p streamlib-processor-schema --lib.--libexcludestests/, soapp_sugar_test.rsis compiled by nothing and run by nothing. Noxtaskmirror names it either.Why it moves now: #2052 removed the crate's only lib test, so the gap is no longer masked by a passing invocation.
Design
Add
cargo test --locked -p streamlib --testsas its own step intest.yml's unit-test block, and mirror the name inxtaskif the mirror covers this crate (engine lib tests reach CI by name only — verify whether the same holds here).No GPU is required, verified against the tree 2026-08-30:
GpuContext::init_for_platform_sync()is called fromRunner::start()(runtime/streamlib-engine/src/core/runtime/runtime.rs:354), notRunner::new(). None of the nine tests callsstart()orrun()— they are graph-construction only.The one unknown to settle in the ticket:
App::new()creates an iceoryx2 node and binds a surface-share unix socket under/run/user/<uid>. Confirm CI's container provides a usable runtime dir; if it does not, that — not the GPU — is what needs solving, and the fix belongs here rather than in a skip.Constraints
examples/orpackages/—docs/plan/ARCHITECTURE.md§Consumers forbids a consumer as a contract source, which is why the deleted E2E was not replaced.Done means
app_sugar_test.rs's nine tests execute in CI and are red when the authoring surface regresses.docs/plan/ARCHITECTURE.md:41-44) regains averify:anchor, or the PR states why it stays anchor-free.Validation shape
One real CI run is the proof — the container's iceoryx2/runtime-dir behaviour cannot be established locally. No rig needed.