- OperationSpec.input_schema was advertise-only: services/schema disclosed it but no dispatch entry point consulted it (the only enforced schema was publish_schema per-chunk on Pub ops, P-03). - compile input_schema once at registration, same fail-closed rule as publish_schema/CF-003: an un-compilable schema is a registration error, never a silently-skipped contract. Validator cache mirrored on fork and in OperationRegistryBuilder like the publish validators. - check after the ACL gate in all three dispatch entry points: invoke, invoke_streaming, invoke_sink (via resolve_sink_handler, preserving the P-08 single-source-of-truth property). Violations return INVALID_INPUT with the input echoed in details. - raw-JSON-Schema semantics (permissive on unknown keys); adapters wanting closed-by-default keep their own hardening (alkhttp's CompiledInputSchema composes unchanged). - motivated by alktty review #001 L1: the channels open-op wrapper hands the registry-checked input to the OpenHandler as the authoritative params, which requires the registry to validate it. Verification: cargo test 596 lib (6 new: invoke/streaming/sink enforcement, fail-closed registration, permissive-{} compile, fork-carries-validator); --all-features 613; clippy -D warnings clean; fmt clean; doc 0 warnings; publish --dry-run ok. alkhttp 438+16 tests pass against 0.3.1 (registry) — re-verify against the published 0.4.0 after upload.
34 lines
1.1 KiB
TOML
34 lines
1.1 KiB
TOML
[package]
|
|
name = "alkcall"
|
|
version = "0.4.0"
|
|
edition = "2021"
|
|
rust-version = "1.85"
|
|
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"
|
|
readme = "README.md"
|
|
repository = "https://git.alk.dev/alkdev/alkcall"
|
|
keywords = ["rpc", "json-rpc", "multiplexing", "wire-format", "alpn"]
|
|
categories = ["network-programming", "asynchronous", "encoding"]
|
|
exclude = [".opencode/", "AGENTS.md", "docs/reviews/", "docs/sdd_process.md"]
|
|
|
|
[lib]
|
|
name = "alkcall"
|
|
|
|
[features]
|
|
default = []
|
|
gateway = []
|
|
|
|
[dependencies]
|
|
jsonschema = { version = "0.46", default-features = false }
|
|
tokio = { version = "1", features = ["rt", "sync", "time", "io-util", "macros"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
async-trait = "0.1"
|
|
tracing = "0.1"
|
|
thiserror = "2"
|
|
uuid = { version = "1", features = ["v4", "rng-getrandom"] }
|
|
getrandom = { version = "0.4", features = ["wasm_js"] }
|
|
futures = "0.3"
|
|
parking_lot = "0.12"
|
|
bytes = "1"
|
|
zeroize = { version = "1", features = ["alloc", "derive"] } |