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:
Generated
+5
-5
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user