From 1aff96f58afe8c4ee2c47a07d1e9722fe18e0f06 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Thu, 22 Oct 2026 18:36:23 +0200 Subject: [PATCH] docs(19.7-02): record deferred items from the pier session router --- .../19.7-generic-mcp-module/deferred-items.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.planning/phases/19.7-generic-mcp-module/deferred-items.md b/.planning/phases/19.7-generic-mcp-module/deferred-items.md index 5930cc87..dc4c3cb1 100644 --- a/.planning/phases/19.7-generic-mcp-module/deferred-items.md +++ b/.planning/phases/19.7-generic-mcp-module/deferred-items.md @@ -22,3 +22,25 @@ was changed by the plan that recorded it. at `schema_types.go:376`, not a duplicate of the new `RecordAction.Prompt`; the criterion's "prints 1" was written without that line in mind. No change needed. +- Stateful pier sessions cannot carry the SDK's protocol-version context value (found during 19.7-02 Task 3) + status: open + **What:** go-sdk v1.8.0's `StreamableHTTPHandler.ServeHTTP` stores the + `Mcp-Protocol-Version` header under an unexported context key that the + transport's `servePOST`/`serveGET` read; pier's own session router (needed + for Redis-shared sessions, D-25) serves `StreamableServerTransport` + directly and cannot set that key, so stateful streams run with the SDK's + 2025-03-26 defaults for stream close/reconnect hints and the JSON-RPC + batch rule (lenient, spec-compliant for older clients; 2026-07-28 clients + go through the SDK's own stateless handler). Revisit if a later SDK + exports the key or a transport-level setter; plan 05 may add a test + pinning the behaviour. +- `notifications/initialized` landing on another instance than `initialize` (found during 19.7-02 Task 3) + status: open + **What:** the session state is persisted after `initialize` and again + after the client's `initialized` notification; when a load balancer sends + the notification to a second instance, the first instance's local copy + keeps `InitializedParams` nil and refuses calls until that copy is + dropped (session end, revocation or process restart) while the second + instance serves them. Sticky sessions or a per-request re-read of the + stored `initialized` flag would close the gap; not needed for the + single-instance demo.