fix: Unit 1 — publishing blocker + convention fixes (R-01, R-02, R-03)
- R-01: remove `readme = "README.md"` from Cargo.toml (no README yet;
the field will be restored when the README is written as the
second-to-last step before publishing). `cargo publish --dry-run
--allow-dirty` now succeeds.
- R-02: replace the three `expect` calls in non-test library code per
AGENTS.md §2:
- `channels/operations.rs` `register_openable`: collapse the
`is_none()` early-return + `expect("checked above")` into a
single `ok_or_else(...)?` (same error message, no expect).
- `core/types.rs` `StreamBidiStreamSource::accept_bi` and
`close`: use `unwrap_or_else(|e| e.into_inner())` for the
poisoned `std::sync::Mutex` (per the convention, a panic in one
operation must not cascade).
- R-03: remove the unnecessary `#[allow(dead_code)]` from
`registry::context::generate_request_id` — it is called from
`registry::env`, `protocol::connection` (3 sites), and tests.
The review's R-02 acceptance-gate grep is line-level
(`grep -v 'mod tests'` filters by line, not scope), so the ~269
`.expect(` calls inside `#[cfg(test)] mod tests` blocks still match
it. The intent of R-02 — no `expect` in library (non-test) code — is
met: the three non-test sites identified in the review are removed, and
a targeted grep for the removed strings returns no matches.
Verification:
cargo test → 483 passed, 0 failed
cargo clippy --all-targets -- -D warnings → clean
cargo fmt --check → clean
cargo doc --no-deps → clean (0 warnings)
cargo publish --dry-run --allow-dirty → succeeds
This commit is contained in:
1 parent
deba5f7023
commit
adbd57da46
4 files changed
+13
-12
No files matched your search
@@ -6,7 +6,6 @@ rust-version = "1.85"
|
|||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
description = "Call + channels RPC: structured JSON operations, streaming subscriptions, service discovery, and N-channel multiplexing over one transport stream"
|
description = "Call + channels RPC: structured JSON operations, streaming subscriptions, service discovery, and N-channel multiplexing over one transport stream"
|
||||||
repository = "https://git.alk.dev/alkdev/alkcall"
|
repository = "https://git.alk.dev/alkdev/alkcall"
|
||||||
readme = "README.md"
|
|
||||||
keywords = ["rpc", "json-rpc", "multiplexing", "wire-format", "alpn"]
|
keywords = ["rpc", "json-rpc", "multiplexing", "wire-format", "alpn"]
|
||||||
categories = ["network-programming", "asynchronous", "encoding"]
|
categories = ["network-programming", "asynchronous", "encoding"]
|
||||||
exclude = [".opencode/", "docs/reviews/", "docs/research/", "docs/sdd_process.md", "Cargo.lock"]
|
exclude = [".opencode/", "docs/reviews/", "docs/research/", "docs/sdd_process.md", "Cargo.lock"]
|
||||||
|
|||||||
@@ -405,14 +405,17 @@ impl ChannelCore {
|
|||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
let op_type = spec.op_type;
|
let op_type = spec.op_type;
|
||||||
let channel_open = spec.channel_open.clone();
|
let channel_open = spec.channel_open.clone();
|
||||||
if channel_open.is_none() {
|
let alpn = channel_open
|
||||||
return Err(format!(
|
.as_ref()
|
||||||
"register_openable: spec `{}` has no channel_open marker — \
|
.ok_or_else(|| {
|
||||||
use `OperationSpec::with_channel_open` to set it (ADR-047 §2)",
|
format!(
|
||||||
spec.name
|
"register_openable: spec `{}` has no channel_open marker — \
|
||||||
));
|
use `OperationSpec::with_channel_open` to set it (ADR-047 §2)",
|
||||||
}
|
spec.name
|
||||||
let alpn = channel_open.expect("checked above").alpn.to_string();
|
)
|
||||||
|
})?
|
||||||
|
.alpn
|
||||||
|
.to_string();
|
||||||
|
|
||||||
let manager = self.manager.clone();
|
let manager = self.manager.clone();
|
||||||
let policy = Arc::clone(&self.policy);
|
let policy = Arc::clone(&self.policy);
|
||||||
|
|||||||
+2
-2
@@ -433,7 +433,7 @@ struct StreamBidiStreamSource {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl BidiStreamSource for StreamBidiStreamSource {
|
impl BidiStreamSource for StreamBidiStreamSource {
|
||||||
async fn accept_bi(&self) -> Result<BiStream, StreamError> {
|
async fn accept_bi(&self) -> Result<BiStream, StreamError> {
|
||||||
let mut guard = self.stream.lock().expect("stream mutex poisoned");
|
let mut guard = self.stream.lock().unwrap_or_else(|e| e.into_inner());
|
||||||
match guard.take() {
|
match guard.take() {
|
||||||
Some(stream) => Ok(stream),
|
Some(stream) => Ok(stream),
|
||||||
None => Err(StreamError::ConnectionClosed),
|
None => Err(StreamError::ConnectionClosed),
|
||||||
@@ -453,7 +453,7 @@ impl BidiStreamSource for StreamBidiStreamSource {
|
|||||||
/// §"Negative"). The `_` prefix is intentional — the signature matches
|
/// §"Negative"). The `_` prefix is intentional — the signature matches
|
||||||
/// the public `Connection::close` API (ADR-070 §"REQ-CORE-02").
|
/// the public `Connection::close` API (ADR-070 §"REQ-CORE-02").
|
||||||
fn close(&self, _code: u32, _reason: &str) {
|
fn close(&self, _code: u32, _reason: &str) {
|
||||||
let _ = self.stream.lock().expect("stream mutex poisoned").take();
|
let _ = self.stream.lock().unwrap_or_else(|e| e.into_inner()).take();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,7 +144,6 @@ impl Default for ScopedPeerEnv {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub(crate) fn generate_request_id() -> String {
|
pub(crate) fn generate_request_id() -> String {
|
||||||
uuid::Uuid::new_v4().to_string()
|
uuid::Uuid::new_v4().to_string()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user