feat(infra): full-surface integration suite + docs sync + publish prep

Full-surface integration suite (tests/full_surface.rs, mcp feature):
- one HttpAdapter over real TCP (ProtocolHandler::handle path) serving
  gateway endpoints, /openapi.json, /mcp, and the WS channels session
- gateway: search/schema/call/subscribe/batch/publish presence,
  envelope shapes, error fidelity end-to-end
- from_openapi import -> Internal-by-default invisible from the wire ->
  External facade composes it via env.invoke -> upstream HTTP API
  called end-to-end (ADR-015 composition model exercised)
- to_openapi 6-path doc validated against openapiv3 over the wire
- to_mcp: MCP client connects to /mcp on the served adapter, lists the
  4 gateway tools, search returns ACL-filtered ops (Sub excluded)

Production fix: the WS upgrade route was reserved but never wired into
HttpAdapter's router (the ws-upgrade-session tests built their own
router). Now wired with ws_bearer_auth (401 without a resolvable
token) around ws_upgrade_handler.

Docs sync: all 28 'Port notes' sections/blockquotes stripped from
ported ADRs/specs; OQ-01/OQ-02 statuses corrected to resolved in
overview.md, websocket.md, and the README table (open-questions.md was
already current).

Publish prep: cargo publish --dry-run --allow-dirty succeeds;
cargo doc --no-deps warning-free (ADR link targets fixed); feature
combinations (default / test-support / mcp / wss / all) compile
warning-free under clippy -D warnings.

Verified: cargo test (182 lib default), --all-features (227 lib + 29
integration), clippy -D warnings x3 feature sets, fmt, doc,
publish --dry-run.
This commit is contained in:
2026-08-28 16:07:56 +00:00
parent bc99ec7188
commit 4a825d33e7
41 changed files with 700 additions and 1035 deletions
@@ -195,46 +195,3 @@ endpoint.
- alkcall ADR-027 — the decision record in the call crate (`from_jsonschema`
as an HTTP-backed adapter; `FromJsonSchema` provenance is a
handler-bearing leaf in alkcall's `OperationProvenance`).
## Port notes
- **History accuracy (kept per the porting instruction):** the move this
ADR records happened in two hops. Originally the adapter was specified in
the call crate (`alknet-call`) as a schema-only placeholder; alknet
ADR-066 moved it to `alknet-http` (the HTTP crate of the alknet
mono-repo); with the crate extraction, `alknet-http` is now **alkhttp**.
The title, §Decision 1, the location table, and the Consequences now
name alkhttp as the home. The original title said "in alknet-http"; the
ported title says "in alkhttp" — same crate, current name.
- **Provenance location (per alkcall ADR-027):** `FromJsonSchema` provenance
lives in alkcall (the call crate's `OperationProvenance` enum) — the
provenance is a handler-bearing leaf in alkcall; only the adapter
implementation lives in alkhttp. The original already said this; the port
names the current crates and adds the alkcall ADR-027 citation to the
References.
- Renames: "alknet-http" → alkhttp; "alknet-call" → "the call crate
(alkcall)"; the source-file path `crates/alknet-http/src/adapters/from_jsonschema.rs`
`src/adapters/from_jsonschema.rs` (this crate's layout); "the HTTP
crate" phrasing retained where the original used it generically.
- `Subscription``Sub` (alkcall rename; alkcall ADR-046 added
`OperationType::Pub` — producer→consumer streaming via `call.published`,
`HandlerKind::Sink` — which does not affect this adapter: `from_jsonschema`
detects SSE responses as `Sub` and registers `HandlerKind::Stream`, same
as `from_openapi`).
- Cross-reference remappings (verified alknet→alkcall ADR mapping): alknet
ADR-017 (adapter contract) → alkcall ADR-022; alknet ADR-022 (handler
registration) → alkcall ADR-018; alknet ADR-023 (error schemas) → alkcall
ADR-016; alknet ADR-049 (streaming handler) → alkcall ADR-021; alknet
ADR-014 (secret material flow) → alkcall ADR-010. ADR-014/017/022/023/049
are ported to this crate under the same numbers and linked.
- The `client-and-adapters.md` references became textual "the call crate's
`client-and-adapters.md`" references with the alknet mono-repo path noted
(the document lives in alkcall's docs/architecture/).
- Status line: the superseded clauses (ADR-017 §5, ADR-022's
`FromJsonSchema` row) are cited as this crate's ported ADRs — the
supersession text is unchanged from the alknet original.
- No decision content changed — the real-forwarding-handler requirement, the
single-endpoint registration shape, the provenance location, the removal of
the schema-only concept, the comparison table, and the
neutral/positive/negative consequences are verbatim from the alknet ADR
modulo the corrections logged above.