S-01 — the marked-pub open contract (ADR-047 amendment 4):
- ChannelCore::register_pub_openable + PubOpenHandler (the put path's
handler returns its result for the merged single response; the
wrapper awaits inline, teardown is EOF-driven, handler_task stays
None); register_openable* refuses Pub-typed specs; the wrapper entry
points refuse unmarked/non-Pub shapes
- the reserved input key `channel_id` (the initiator-allocated id):
stripped pre-validation by resolve_sink_handler (the single source of
truth, P-08), handed to the wrapper via OperationContext.metadata, a
missing key rejected INVALID_INPUT; adopt parity enforced
(ManagerError::InvalidAdopt) and adopt failures answer
channel:open_failed / adopt_failed
- zero call.published on marked ops: the first publish chunk on a
marked op is rejected loudly (channel:publish_chunks_rejected) in
both dispatch loops; the handler is never fed
- relay put-translation replaces RelayError::PubTypedOpen: hub
allocates odd on the producer leg, opens the spoke op in the
background (put-acks-in-result), one-direction pump, response-mirror
with the producer's reserved key stripped
- ChannelClient::open_pub_channel + PubOpenReply (the initiator-
allocates put open capability)
S-02 — channel/control implemented (ADR-052): establisher-contributed
ChannelControl (Establishment::with_control), manager-owned registry,
teardown removals, channel:no_control_handle capability answer.
S-03 — channel/resources/subscribe implemented (ADR-053): the
ResourceEnumerators registry (shared per peer), snapshot-then-changes
enumerators, scan-once aggregation, the empty seed; the
always-failing one-shot error stream removed.
S-04 — op/register forward-through (ADR-022 amendment): announced
unmarked Sub/Pub register the real streaming/sink forwarding shapes;
marked announcements refused with MARKED_SPEC_UNSUPPORTED; marked
specs refuse the generic registration path and register_imported
(Result-returning now).
Guard (review 010 action 3): tests/stub_guard.rs greps src/ for
not_implemented; the four pinned stub tests are deleted and the
marked-spec registration refusals are pinned by tests.
Verified: cargo test (696 + guard), clippy --all-targets -D warnings,
fmt --check, fuzz corpus replay.