Add session management routes to api-gw. Internal only (poimen-frontend consumer). No OpenAPI spec required — shapes documented in POIMEN.md.
Routes
POST /v1/sessions create session
GET /v1/sessions/:id get session
PATCH /v1/sessions/:id update (rename, set goal, archive)
GET /v1/sessions list sessions (status, cwd filter)
POST /v1/sessions/:id/milestones create milestone
GET /v1/sessions/:id/episodes list episodes
GET /v1/sessions/:id/episodes/:eid get episode + artifact_url
Implementation
New SessionAdapter in internal/serviceadapter/
Reads/writes PostgreSQL poimen-sessions DB in poimen namespace
Uses existing pgx driver pattern from other adapters
Auth: same JWT validation as all other routes
Notes
Episode artifact_url resolves to MinIO presigned URL
Summaries inline, full artifacts in MinIO
episode_id is sha256(session_id+milestone_id+attempt) — accept on write, return on read
## Goal
Add session management routes to api-gw. Internal only (poimen-frontend consumer). No OpenAPI spec required — shapes documented in POIMEN.md.
## Routes
```
POST /v1/sessions create session
GET /v1/sessions/:id get session
PATCH /v1/sessions/:id update (rename, set goal, archive)
GET /v1/sessions list sessions (status, cwd filter)
POST /v1/sessions/:id/milestones create milestone
GET /v1/sessions/:id/episodes list episodes
GET /v1/sessions/:id/episodes/:eid get episode + artifact_url
```
## Implementation
- New `SessionAdapter` in `internal/serviceadapter/`
- Reads/writes PostgreSQL `poimen-sessions` DB in poimen namespace
- Uses existing `pgx` driver pattern from other adapters
- Auth: same JWT validation as all other routes
## Notes
- Episode `artifact_url` resolves to MinIO presigned URL
- Summaries inline, full artifacts in MinIO
- `episode_id` is sha256(session_id+milestone_id+attempt) — accept on write, return on read
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.
Goal
Add session management routes to api-gw. Internal only (poimen-frontend consumer). No OpenAPI spec required — shapes documented in POIMEN.md.
Routes
Implementation
SessionAdapterininternal/serviceadapter/poimen-sessionsDB in poimen namespacepgxdriver pattern from other adaptersNotes
artifact_urlresolves to MinIO presigned URLepisode_idis sha256(session_id+milestone_id+attempt) — accept on write, return on readHarness cycle complete — PR #51
Routes: backend (coder-impl) → testing (coder-tests) → review×2 → fixes → gate ✅
Files changed
internal/sessions/handler.gointernal/serviceadapter/session_adapter.gointernal/sessions/handler_test.gocmd/gateway/main.gointernal/serviceadapter/adapters.goRoute mapping
Key decisions
episode_id = sha256(session_id+milestone_id+attempt)— §4.14 Q6tracing.NewTransportwired — traceparent propagated to poimen-memory + poimen-graphqlerrorsarray detected, surfaced as 502Reviewer verdicts (post-fix)
PR: #51