chore(deps): consume alkcall 0.3.1 — list-peers announced-op discovery gate

The alkcall 0.3.1 fix (fd21230, alkhttp review 006 UP-03) lands
PeerCompositeEnv::peer_operations, so services/list-peers now lists
peer-announced ops. Version pin stays 0.3 (semver-compatible); the
lockfile bump carries no source change.

- Extend op_register_served_per_session_and_collision_is_already_exists
  with the discovery assertion that originally surfaced UP-03: after
  the announce resolves, services/list-peers attributes consumer/exec
  to the alice peer entry (fails against 0.3.0, verified by the
  original draft).
- Review 006 UP-03 entry records the 0.3.1 landing (alkcall ADR-030).

Verification: cargo test 454 passed / 0 failed; cargo test
--all-features 582 / 0; clippy (default + all-features, all-targets,
-D warnings) clean; fmt clean; doc clean.
This commit is contained in:
2026-09-04 16:17:07 +00:00
parent 214fd213ff
commit 2053420f7d
3 changed files with 67 additions and 15 deletions
Generated
+5 -5
View File
@@ -27,9 +27,9 @@ dependencies = [
[[package]]
name = "alkcall"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0e415a03f77446ba446b3a758dc7846283b217a356376499a74a836b10e875a"
checksum = "d4116dba284601e3337e918d4a4256706e43dd8bb6a30095bf96d664ae58d74a"
dependencies = [
"async-trait",
"bytes",
@@ -1485,7 +1485,7 @@ dependencies = [
"once_cell",
"socket2",
"tracing",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -1860,7 +1860,7 @@ dependencies = [
"security-framework",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -2679,7 +2679,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -2,10 +2,12 @@
## Status
Unit 2 + Unit 3 remediated and verified (`030c5ef`). Remaining: Unit 4
(docs reconciliation). UP-02 decided (recorded below). One new
upstream gap surfaced during the gates (UP-03 — alkcall-side). See
Remediation log.
All units landed: Unit 2 + Unit 3 remediated and verified (`030c5ef`);
Unit 4 (docs reconciliation) landed with the 0.3.1 consumption
(`Cargo.lock` bump + the `services/list-peers` discovery gate). UP-02
decided (recorded below). UP-03 fixed in alkcall 0.3.1 (`fd21230`,
ADR-030) and asserted by the extended WS-path gate. See Remediation
log.
## Scope
@@ -447,13 +449,20 @@ cargo doc --no-deps → clean
---
## Unit 4 — spec reconciliation (docs) — open
## Unit 4 — spec reconciliation (docs) — LANDED (with the 0.3.1 consumption)
As planned in this review's remediation plan: OQ-05 resolution →
resolved, ADR-067 v1-cut note + ADR-048 amendment note updated,
websocket.md §"Data channels for browsers" status block removed, the
idle-knob deployment note surfaced, and the `op/register` ACL posture
(UP-02's decision) recorded where a deployer reads.
As planned in this review's remediation plan: OQ-05 resolved,
ADR-067 v1-cut note + ADR-048 amendment note updated to the landed
state, websocket.md §"Data channels for browsers" status block removed
(the section now documents the landed surface: `with_ws_openable_alpns`,
the `OpenableAlpns` fallback, cap policy, discovery, gates), the
idle-knob deployment note surfaced (silent data channels make the 60 s
default bite more often; semantics unchanged), the `op/register` ACL
posture (UP-02's decision) recorded in ADR-048's landed note, and the
UP-03 alkcall-side gap closed by 0.3.1 and asserted alkhttp-side (the
extended `op/register` gate). The alknet-ADR-044 §5 pointer was
checked: not stale (the rationale lives in this crate's ADR-044 §5;
the alknet-ADR-043 pointers are correctly marked parked/not-ported).
---
@@ -489,6 +498,21 @@ next alkcall review pass; the alkhttp-side gate
asserts the overlay-landing + collision semantics instead, which is
the behavior Unit 2 actually wires, and is not blocked by UP-03.
**LANDED in alkcall 0.3.1** (2026-09-04, `fd21230`): implemented as
alkcall ADR-030 — `OperationEnv` gains a defaulted
`list_operation_names`; `OverlayOperationEnv` overrides it;
`PeerCompositeEnv::peer_operations` delegates to the peer overlay,
and its `list_operation_names` aggregates session + connections +
base. Upstream gate:
`announced_op_is_discoverable_via_services_list_peers`. The version
pin here is `0.3` (semver-compatible), so the fix arrives through a
`Cargo.lock` bump with no source change; the WS-path gate that
originally surfaced UP-03 now asserts the discovery promise —
`op_register_served_per_session_and_collision_is_already_exists`
gained the `services/list-peers` step (announce → the `alice` peer
entry lists `consumer/exec`) and passes against 0.3.1 (it fails
against 0.3.0, verified by the original draft).
### UP-02 decision (recorded)
`op/register` is served per WS session with
+28
View File
@@ -1345,6 +1345,34 @@ async fn op_register_served_per_session_and_collision_is_already_exists() {
assert_eq!(env.r#type, EVENT_RESPONDED, "got {}", env.r#type);
assert_eq!(env.payload["output"]["registered"], true);
// The announced op is discoverable via services/list-peers: the
// peer entry keyed by the connection identity (alice) lists it
// (UP-03, fixed in alkcall 0.3.1).
let peers = call_and_await(
&mut ws,
"req-list-peers",
"services/list-peers",
serde_json::json!({}),
)
.await;
assert_eq!(peers.r#type, EVENT_RESPONDED, "got {}", peers.r#type);
let peer_entry = peers.payload["output"]["peers"]
.as_array()
.expect("peers array")
.iter()
.find(|p| p["peer_id"] == "alice")
.expect("alice peer entry present");
let peer_op_names: Vec<&str> = peer_entry["operations"]
.as_array()
.expect("peer operations array")
.iter()
.filter_map(|o| o["name"].as_str())
.collect();
assert!(
peer_op_names.contains(&"consumer/exec"),
"announced op discoverable via services/list-peers: {peer_entry}"
);
// The announced op landed in the overlay: a second announce of the
// same name without `replace` hits the overlay collision gate.
let spec = OperationSpec::new(