feat: promote dispatch spine to gateway module (ADR-048, feature-gated)
Promote alkhttp's transport-neutral dispatch spine into alkcall as
alkcall::gateway behind the opt-in gateway cargo feature (default off;
adds no dependencies):
- GatewayDispatch: deadline-bounded invoke spine over OperationRegistry
(invoke / invoke_streaming / invoke_sink) with the root-context
discipline (internal: false, forwarded_for: None) hubs and spokes
relaying calls (ADR-042 translate path) need identically to alkhttp's
HTTP gateway. The 30 s deadline becomes a constructor knob
(with_deadline).
- schema_disclosure_denial: the shared is-internal + ACL check for
services/schema inner-name disclosure; ACL denial returns FORBIDDEN
(identity-aware refinement), Internal visibility returns spec-404.
One implementation so transports cannot drift (CF-004).
- MAX_BATCH_OPERATIONS / CallRequest / HTTP error mapping stay in
alkhttp (projection + transport concerns); alkhttp migrates to this
module in a follow-up session and drops its local copy.
Docs: ADR-048 (decision + divergence rationale), ADR index entry,
CHANGELOG.
Verification: 574 tests pass with --features gateway (16 new), 558 pass
default, clippy -D warnings clean both feature sets, --all-features
clean, fmt clean, wasm32 target clean, rustdoc warning-free.