internal/sessions/handler.go — new Handler; 7 endpoints dispatched via X-Upstream-Path; writes to poimen-memory via /memory/ingest; reads from poimen-graphql via GraphQL hybridSearch/entity
internal/serviceadapter/session_adapter.go — NewSessionAdapter() + GetSessionSpec() with 5 resources
cmd/gateway/main.go — register sessions adapter after memory adapter
internal/serviceadapter/adapters.go — add sessions case to factory
internal/sessions/handler_test.go — 30 tests, all pass
New internal/sessions package with Handler bridging 7 REST endpoints to:
- POST /memory/ingest on poimen-memory:8080 (writes)
- GraphQL hybridSearch/entity on poimen-graphql:8090 (reads)
Adapter registration: X-Service: sessions with resources sessions,
session, milestones, episodes, episode. IDs via query params
(?session_id=, ?episode_id=) — dispatcher does not substitute path params.
episode_id = sha256(session_id+milestone_id+attempt) per §4.14 Q6.
Content JSON-encoded (prevents key:value injection on user fields).
Limit capped at 200. GraphQL error body detected and surfaced as 502.
tracing.NewTransport wired for cross-service trace propagation.
JWT forwarded to both upstreams for auth.
30 tests in handler_test.go covering all 7 handlers + EpisodeID helper.
Closes#50
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #50
Changes
internal/sessions/handler.go— new Handler; 7 endpoints dispatched viaX-Upstream-Path; writes topoimen-memoryvia/memory/ingest; reads frompoimen-graphqlvia GraphQLhybridSearch/entityinternal/serviceadapter/session_adapter.go—NewSessionAdapter()+GetSessionSpec()with 5 resourcescmd/gateway/main.go— register sessions adapter after memory adapterinternal/serviceadapter/adapters.go— addsessionscase to factoryinternal/sessions/handler_test.go— 30 tests, all passDesign
X-Service: sessions+X-Resource: <sessions|session|milestones|episodes|episode>?session_id=,?episode_id=) — dispatcher does not substitute path paramsepisode_id = sha256(session_id+milestone_id+attempt)per §4.14 Q6tracing.NewTransportwired for cross-service trace propagationerrorsarray detected, surfaced as 502